Loading

zzcms注入审计

zzCMS201910版本存在cookie注入漏洞

一、漏洞定位

在admin\ask.php文件的213行

<?php
if ($_COOKIE["askbigclassid"]!=""){
$sql="select * from zzcms_askclass where parentid=" .$_COOKIE["askbigclassid"]." order by xuhao asc";
$rs=query($sql);
while($row = fetch_array($rs)){
?>
<option value="<?php echo $row["classid"]?>" <?php if ($row["classid"]==@$_COOKIE["asksmallclassid"]) { echo "selected";}?>><?php echo $row["classname"]?></option>
<?php
}
}
?>

这里只验证了传入的askbigclassid值不为0,导致了我们可以利用sql变量中的_COOKIE["askbigclassid"]值,来构造我们的恶意参数。

二、验证流程

1、要到达该漏洞位置,需要进入function add()方法内,在ask.php的55行会验证传入参数是否包含add关键字,55行执行了三元运算符进行判断是否传入了GET参数do值,我们需要在这里给它传入一个"add",用来跳转到function add()方法内。
image-20210726174045371
2、进入该方法,执行到判断if ($_COOKIE["askbigclassid"]!="")时,需要传入我们构造的注入参数,让它带入到代码流程中。
image-20210726174654086
3、由于该cms在\inc\stopsqlin.php的62行将传入的cookie变量带入到了stopsqlin方法中,并过滤了特殊字符,导致我们传入的cookie变量无法进行。只能考虑绕过该方法。
image-20210726183722397
4、我们发现在\inc\stopsqlin.php的59行做了一个if判断,用strpos函数匹配$r_url中是否存在siteconfig.php关键字,存在的话返回值为具体位数,并判断该位数是否与0相等,相等的话会进入该方法体,我们只要确保我们传入的uri参数中包含"siteconfig.php"关键字即可绕过判断,也就无法进入stopsqlin方法中,达到了绕过的目的。
image-20210727095952251
5、接下来我们把我们构造好的参数通过burp发包验证猜想

sql语句中的表zzcms_askclass,为11列,我们构造1 union select user(),2,3,4,5,6,7,8,9,10,11
image-20210727100610283
成功回显root@localhost,证明我们成功的绕过了stopsqlin方法,参数直接被数据库执行并返回到前端。

posted @ 2021-07-27 14:47  你头发乱了喔、  阅读(232)  评论(0)    收藏  举报