cmseasy最新版补丁绕过sql注入(绕过360waf)

$tmp1与$tmp[1]开辟人员一时犯糊涂,没看清,导致无效过滤。并且这里get参数进行了重组,大年夜$_SERVER["REQUEST_URI"]瓜分获取,画蛇添足,还导致之前的过滤全部无效,这边过滤又掉效。

经由过程front::$get['code'] 可以控制须要加载的pay文件,

再看文件: alipay.php:

archive_act.php(611行)

控制参数trade_status=WAIT_SELLER_SEND_GOODS, 进入pay::changeorders($order_sn,$_GET);

在这里 $id 就是之前$order_sn,可以直接由get参数控制。

进入这个办法:$update=orders::getInstance()->rec_update($where,$id);

这里法度榜样员又犯糊涂了, rec_update的办法 where变量明显是第二个参数,传入的时刻居然$where放到了第一个参数(这个法度榜样员开了吧!),如许$id值就被当做sql语句的前提了。

好吧 开端绕waf:

起首是360的waf: 检测了很多多少危险函数,更可恶的全局过滤单引号,看到就杀。然则$order_sn 直接被带入到了where后面 根本不须要单引号,不起感化, 在之前的办法中有一个:

$order_sn = str_WordStr($_GET['subject'],'',$_GET['out_trade_no']);
如许应用调换功能,在危险函数中心都插入^, 再把subject设置成^,就可以成功绕过360waf。

接下来在sql语句履行的时刻又有一个过滤器:

因为是update注入,又不克不及显示缺点,sleep被过滤,只能用BENCHMARK。
又过滤了if,只能用or。

get参数又是大年夜querystring中直接以前,空格会被调换成 ,所有只能用/**/调换:

最终的POC:(延时盲注法,稍微修改下)

解决筹划:

加强过滤