首先还是把我之前发的ecmall的那两个先确认了来下撒?
刚在bbs下的20140618的补丁
0x01 能引入单引号或者转义符的地方
首先来看看my_goods.app.php中的 这函数
省略一点
主要来看这里的
$spec_2 = trim($_POST['spec_2'][$key]);
'sku' => html_script(trim($_POST['sku'][$key])),
这里$key带入到了后面 而且$key是post来的 所以是可控的。
如果这时候我们提交的是字符串 就成了截取字符的了。
因为' 会被ecmall的全局addslashes转义成\'
如果这时候截取第一个字符就成了\
截取第二个字符就是'
引入了转义符 如果 有两个连着的可控的话可以这样
'\','user()#' 之类的就能注入了 可惜这里只有一个可控。
这里spec_2 可以截取 无奈price被过滤了。
stock也可以截取 可是被intval了 sku 也可以截取可是已经是最后一个了。。
然后在edit中调用了这函数。

这里截取第2个字符 成功引入单引号。

截取第一个字符 成功引入转义符。
0x02 能成功的注入。。
首先来看一下ecmall的全局文件
判断gpc是否开启 如果关闭 就调用addslashes_deep来对get post cookie进行转义
这里可以看到对数组中的value进行了addslashes 没有对key进行addslashes。
在my_goods.app.php中
看这函数
对post的foreach 出来后 直接把post里的key 带入到了查询当中。
结合刚才说的数组中的key是不会被addslashes的 所以造成了注入。
调用这函数的地方随便找一处把。
