HackInOS:1
本篇使用的靶机,请大家参考官方网站,自行下载靶机
目录
环境搭建
我使用的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 | #!/usr/bin/python |
我们就得到了一个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 | nc -lvp 1234 |
获得反向shell之后,我们生成了一个TTY shell,我们发现我们在Docker容器中。 我们找到所有设置了SUID位的文件,并发现“tail”命令设置了SUID位。 因此,我们使用“tail”命令打开“/ etc / shadow”。
1 | python3 -c 'import pty;pty.spawn("/bin/bash")' |

我们从/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 | msf5 > use exploit/multi/script/web_delivery |

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


获得反向shell后,我们在Metasploit框架中使用autoroute模块进行pivoting;
1 | msf5 > use post/multi/manage/autoroute |

使用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 | ssh hummingbirdscyber@192.168.1.101 |

发现Ubuntu映像可供使用,因此使用它来创建一个新的docker容器,并将主机的/目录挂载到名为/root的文件夹中;
运行docker镜像后,转到/root/root/目录下并找到一个名为flag的文件, 当打开文件时,发现祝贺标志。
1 | docker run -v /:/root -i -t ubuntu /bin/bash |

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