🌟想了解其它网安工具?看看这个:[网安工具] 网络安全工具管理 —— 工具仓库 · 管理手册
0x01:Fuxploider 工具简介
Fuxploider 是一款开源的渗透测试工具,它能够自动化检测目标站点文件上传表单的安全问题,识别目标允许上传的文件类型,并确定最适合在目标 Web 服务器上上传的 Web Shell 或而已文件的技术,从而帮助研究人员快速发现并利用文件上传表单中的漏洞。
0x02:Fuxploider 使用教程
注意:该工具的使用需要安装 Python 环境,笔者运行的环境是 Python 3.9.6
0x0201:Fuxploider 工具安装
Fuxploider 工具获取
首先读者需要从上面笔者提供的资源中下载好 Fuxploider ,然后通过下面的命令,从该工具的 requirements.txt 中安装其所需依赖(笔者假定你 Python 环境是好的):
python -m pip install -r requirements.txt
安装成功后,可以通过下面的命令,尝试运行 fuxploider.py 看看会不会报错,如果没有报错,那么恭喜你,fuxploider.py 安装成功了:
python fuxploider.py -h
0x0202:Fuxploider 使用示例
本部分笔者将演示一些 Fuxploider 的常见示例,如果你对该工具已经有所了解,仅仅是为了查阅参数用法,可以跳转到本文的第三部分,即 “速查手册” 部分。
1. 对目标进行简单的文件上传漏洞的探测
使用下面的命令,不携带任何扩展参数,Fuxploider 会探测目标支持的上传后缀,并尝试进行文件上传漏洞的攻击(笔者使用的是 Upload-labs 靶场的第 14 关):
### 检测目标是否存在文件上传漏洞,当页面中含有 "文件未知,上传失败!" 时标注上传失败
python fuxploider.py --url http://127.0.0.1/upload-labs/Pass-14/index.php --not-regex "文件未知,上传失败!"
上面笔者放出来的这部分截图是它在探测目标 Form 表单支持的上传格式,这里探测的结果其实是有问题的,当然,这也可能与笔者配置的正则表达式有关 😂。当它探测完,就会尝试对目标上传 Payload 进行攻击,不过从目前结果来看,探测都不对,咋可能继续让它上传(解析页面的能力还有待提高)。
其实运行这个工具的时候,笔者有一个好玩的发现,页面显示 “上传失败”,是否属于刷新式显示?比如你刚刚一上传,然后它动态展示,但是当你一刷新页面,它又恢复原本的上传页面了。若这个工具是通过这种单一的请求来判断是否上传成功,那不炸了嘛(说的有些抽象了,你自己可以上传文件后尝试刷新一下页面看看)。
2. 手动指定表单检测参数进行上传漏洞探测
通过 --input-name
参数,我们可以指定目标上传的参数(依旧不尽如人意,我用错了?):
python fuxploider.py --url http://127.0.0.1/upload-labs/Pass-14/index.php -m --input-name upload_file --not-regex "文件未知"
从笔者的两次试验来看,结果都不尽如人意,此工具正式被笔者打入冷宫 !! 如果你有该工具其它更好的用法,欢迎留言告诉笔者,笔者将进一步完善该手册。
另外,笔者在试验时发现了一个奇怪的现象,我文件上传,我后端高低得多几个文件吧,更何况这东西是爆破,可实际情况是,后端除了我手动上传的文件外,空空如也。这意味着啥?这大概率意味着,它连上传点都没找对 !!!
0x03:Fuxploider 速查手册
0x0301:Fuxploider 常见用法 — 速查表
### 检测目标是否存在文件上传漏洞,当页面中含有 "文件未知,上传失败!" 时标注上传失败
python fuxploider.py --url http://127.0.0.1/upload-labs/Pass-14/index.php --not-regex "文件未知,上传失败!"
0x0302:Fuxploider 参数说明 — 中文版
用法:
fuxploider.py [可选参数] [必选参数]
必选参数:
-u <target>, --url <target>
包含要测试的文件上传表单的网页 URL。例如: http://test.com/index.html?action=upload
--not-regex <regex>
匹配上传失败的正则表达式
--true-regex <regex>
匹配上传成功的正则表达式
可选参数:
-h, --help
显示帮助信息并退出
-d <postData>, --data <postData>
通过 POST 方法传递附加数据。例如: -d "key1=value1&key2=value2"
--proxy <proxyUrl>
代理信息。例如: --proxy "user:password@proxy.host:8080"
--proxy-creds [credentials]
在运行时提示输入代理凭证,格式为: 'user:pass'
-f <integer>, --filesize <integer>
上传文件的大小,以 kB 为单位
--cookies <cookie_string>
用于 HTTP 请求的 Cookie。例如: "PHPSESSID=aef45aef45afea5aef45&JSESSID=A"
--uploads-path <path>
服务器上文件上传的路径。例如: "/tmp/uploads"
-t <templateName>, --template <templateName>
用于检测代码执行的恶意载荷。默认使用所有已知模板。完整模板列表请参考模板部分(在后面)。
-r <regex>, --regex-override <regex>
指定一个正则表达式以检测代码执行,这将会覆盖正在使用的模板中定义的默认代码执行的检测正则表达式。
-l <listOfExtensions>, --legit-extensions <listOfExtensions>
正常文件扩展名,以逗号分割。例如: "jpg,png,bmp"。
-n <number>
要使用的常见扩展名数量。例如: -n 100
-v 启用详细模式
-vv 启用非常详细模式
-vvv 启用及其详细模式
-s, --skip-recon
跳过侦察阶段,在侦察阶段,fuxploider 将尝试确定服务器期望和过滤的扩展名单。若使用该参数跳过该阶段,则需指定 -l 参数。
-y 强制检测所有入口点,不会再找到第一个代码执行点时停止。
-T <Threads>, --threads <Threads>
并行任务数量(线程数)
-U <useragent>, --user-agent <useragent>
请求目标时使用的用户代理。
--random-user-agent
请求目标时随机使用用户代理
手动表单检测参数
-m, --manual-form-detection
禁止自动表单检测。当自动检测失败时(例如:1. 表单通过 JavaScript 加载; 2. URL 中有多个文件上传表单),此选项有用
--input-name <inputName>
文件输入的名称。例如当页面文件上传标签为 <input type="file" name="image">,时,就使用 --input-name image
--form-action <uploadPath>
表单提交的目标路径。例如当页面表单标签为 <form method="POST" action="upload.php"> 时,就可以使用 --form-action upload.php 进行指定
模板
模板是用于在远程服务器上传的恶意载荷,代码执行检测基于载荷的预期输出。默认模板包括以下几种,
通过(名称 - 描述) 的形式展示:
'phpinfo' - 一个简单的 php 文件(纯文件),调用 phpinfo()。
'nastygif' - 一个有效的 GIF 文件,在文档的注释部分包含调用 phpinfo() 的代码。
'nastyjpg' - 一个有效的 JPG 文件,在文档的注释部分包含调用 phpinfo() 的代码。
'basicjsp' - 一个简单的 JSP 文件,包含一个简单的数学表达式