漏洞分析
在/phpcms/modules/content/down.php中,约莫第11行:
首先,通过GET方法得到参数$a_k
。在经过sys_auth
解密(里面有个DECODE)后,对$a_k
进行了一次parse_str($a_k),parse_str()会把字符串解析到对ing的变量中。在经过解析后,通过语句$rs = $this->db->get_one(array('id'=>$id));
将变量id带入查询。所以目标是寻找一个能加密的地方,并且能够回显给我们,这样就能构造参数$a_k,并造成注入。
在 /phpcms/modules/attachment/attachments.php 中,约莫第239行
通过GET方法得到参数$arr[‘src’],先经过safe_replace()
过滤。我们先看一下safe_replace()
函数。
将%27
等关键字过滤。但是利用“*”会被直接过滤为空这点,假设传入的$string为%2*7
,则在替换后,会变成%27
,从而获得单引号,其余可类似绕过。
接下来继续运行。若不满足条件,会进入set_cookie()函数,具体如下:
其中,会将传入的参数进行一次加密sys_auth($value, ‘ENCODE’),这正好满足我们前面的需求。
为了能访问到swfupload_json(),我们需要一个cookie。这样在访问时才不会直接跳转到登陆也main。接下来就是寻找能够给我们提供这次setcookie机会的接口。比如说wap模块。
在 /phpcms/modules/wap/index.php 中,约莫第6行
通过GET方法得到$siteid,然后传到了set_cookie()函数中,满足条件。
利用
利用步骤
- 访问 /index.php?m=wap&a=index&siteid=1 。获取响应头的set-Cookie字段。
- 将前一步获取到的字段赋值给userid_flash,作为POST参数。访问 /index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=【payload】
- 获取返回头的set—Cookie字段,此即为加密后的payload
- 访问 /index.php?m=content&c=down&a_k=【加密后的payload】,注入成功。
cmsPoc
开源CMS渗透测试框架 cmsPoc中已集成了利用脚本 v960_sqlinject_getpasswd.py。
|
|
本文收录于:【gitbook:Vuln-Time】