HackTheBox Cap 靶机:从 IDOR 到 PCAP 凭据提取再到 Capabilities 提权
一、题目信息二、信息搜集TCP 全端口扫描 指纹识别 操作系统识别sudo rustscan -a 10.129.35.25 -r 1-65535 -- -sV -O -Pn -n输出关键部分PORT STATE SERVICE REASON VERSION 21/tcp open ftp syn-ack ttl 63 vsftpd 3.0.3 22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http syn-ack ttl 63 Gunicorn目标 OSUbuntu80 指纹Gunicorn这是 Python 的 WSGI HTTP 服务器通常作为 Web 应用与反向代理如 Nginx之间的中间层运行但是在本题中是直接作为后端服务器存在21 端口可以尝试 ftp 匿名登入补一波 UDP 高价值top 20端口扫描 指纹识别sudo nmap -sU -sV -Pn -n 10.129.35.25 -vvv --top-ports 20输出PORT STATE SERVICE REASON VERSION 53/udp open|filtered domain no-response 67/udp closed dhcps port-unreach ttl 63 68/udp open|filtered dhcpc no-response 69/udp closed tftp port-unreach ttl 63 123/udp closed ntp port-unreach ttl 63 135/udp open|filtered msrpc no-response 137/udp closed netbios-ns port-unreach ttl 63 138/udp closed netbios-dgm port-unreach ttl 63 139/udp closed netbios-ssn port-unreach ttl 63 161/udp closed snmp port-unreach ttl 63 162/udp closed snmptrap port-unreach ttl 63 445/udp closed microsoft-ds port-unreach ttl 63 500/udp closed isakmp port-unreach ttl 63 514/udp closed syslog port-unreach ttl 63 520/udp closed route port-unreach ttl 63 631/udp closed ipp port-unreach ttl 63 1434/udp closed ms-sql-m port-unreach ttl 63 1900/udp closed upnp port-unreach ttl 63 4500/udp closed nat-t-ike port-unreach ttl 63 49152/udp closed unknown port-unreach ttl 63目前来看UDP 这块并没有高价值的信息优先考虑打 TCP 端口如果 TCP 那边没有思路可以回到 UDP 端口用专门的工具进行验证。三、验证 FTP 匿名登入尝试用户名anonymous密码空直接回车ftp anonymous10.129.35.25 Connected to 10.129.35.25. 220 (vsFTPd 3.0.3) 331 Please specify the password. Password: 530 Login incorrect. ftp: Login failed ftp quit 221 Goodbye.失败了服务器应该开启了禁止匿名登入。再次验证这次将密码输入成合法邮箱格式但是依旧失败了。极少数非标准场景密码可能会要求“邮箱格式”。将目标转移到 80 端口。四、80 端口突破1、功能一览浏览器访问 80 端口可以看到一个仪表盘界面用户栏和搜索功能是没有作用的点了没反应burp 也没有显示出对应的请求说明这并不是我们需要关注的点。左侧汉堡菜单点开后这里的几个功能都是可以正常使用的对于IP ConfigNetwork Status就是一个指定命令执行的接口后端将指定命令执行的结果返回给用户。观察 URL 可以发现/ip /netstat这虽然不是准确的命令但是也可能存在隐藏接口去执行隐藏命令现在还看不出来有什么特别的。重头戏在Security Snapshot (5 Second PCAP Analysis)点开后可以看到下面有个下载按钮点击下载后得到一个流量包用 wireshark 打开并没有有用的信息。2、IDOR观察 URLhttp://10.129.35.25/data/2可能存在 IDORIDORInsecure Direct Object Reference不安全的直接对象引用是一种访问控制漏洞。应用系统通过用户可控的标识符如数字 ID、文件名、UUID来定位资源但没有验证当前用户是否有权访问该资源导致攻击者通过篡改标识符就能越权查看或操作他人的数据。而且经过几个的测试后发现Value 的值应该就是代表流量包中是否存在信息。最终发现http://10.129.35.25/data/0这个页面下载得到的流量包是有内容的五、流量分析流量不多简单查看后不难发现登入 ftp 的明文用户名和密码就在里面FTP 是明文协议这意味着任何能嗅探到流量的中间人都能直接看到你的凭据和传输的文件我们在.pcap抓包中提取出nathan:Buck3tH4TF0RM3!就是 FTP 明文特性的直接后果。现在有一个直接思路就是用账户密码直接登入 ftp。但是转念一想账号密码复用的概率非常大而且本靶机开放了 22 端口。因此最高的优先级是“账密复用 ssh 尝试登入”。六、ssh 登入经过检验果然存在账密复用的现象直接获得了用户 nathan 的 shell在家目录下有user.txt文件查看其中的内容得到的就是 user flag接下来的 root flag 就需要提权获得了。七、提权本题的题名为 Cap很可能提示的就是 Capabilities 提权思路。查找设置了 Capabilities 的文件getcap -r / 2/dev/null输出nathancap:~$ getcap -r / 2/dev/null /usr/bin/python3.8 cap_setuid,cap_net_bind_serviceeip /usr/bin/ping cap_net_rawep /usr/bin/traceroute6.iputils cap_net_rawep /usr/bin/mtr-packet cap_net_rawep /usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper cap_net_bind_service,cap_net_adminep发现Python3.8有cap_setuid允许进程更改自身的 UID这是可以直接提权的。去网站https://gtfobins.org/查找 payload应用