用户
搜索
回帖奖励 75 魔法币 回复本帖可获得 1 魔法币奖励! 每人限 1 次
  • TA的每日心情
    慵懒
    2019-2-22 13:54
  • 签到天数: 143 天

    连续签到: 1 天

    [LV.7]常住居民III

    i春秋作家

    推荐小组成员

    Rank: 7Rank: 7Rank: 7

    120

    主题

    299

    帖子

    1527

    魔法币
    收听
    0
    粉丝
    21
    注册时间
    2017-7-24

    幽默灌水王突出贡献春秋文阁i春秋签约作者i春秋推荐小组积极活跃奖春秋游侠秦

    HAI_ i春秋作家 推荐小组成员 幽默灌水王 突出贡献 春秋文阁 i春秋签约作者 i春秋推荐小组 积极活跃奖 春秋游侠 秦 楼主
    发表于 2018-11-22 14:56:26 307568

    未经许可,禁止转载

    0x00 前言

    最近学习代码审计,找到一个小型cms审计一下,然后再尝试进行修复。
    https://blog.csdn.net/qq_36869808
    有其它需求也可以看看博客啥的~

    0x01 漏洞总结

    id 漏洞 修复
    1 文件包含漏洞
    2 越权漏洞,登录绕过
    3 资料处存储型XSS
    4 登录存在post sql注入
    5 前台的评论处存储型型xss
    6 意外发现的一枚post注入
    7 前台的一个报错get型sql注入
    8 sql注入报错伴随的反射型xss

    0x02 漏洞审计

    1.文件包含漏洞

    1.1 审计

    sublime打开文件夹。
    见面就有一个漏洞,典型的文件包含漏洞

    这里有一个addslashes对r参数进行了过滤,实际上一点用都没有,addslashes函数只有对"有用。
    然后展开利用。在当前文件上传创建一个文件

    <?php
    phpinfo();
    ?>


    我当时测试的时候是还有一个sql注入的,到时候来一个组合应用。

    1.2 修复

    这里对该漏洞进行修复,想法是进行白名单操作,将所有可能调用的都写在一个数组里。然后封装成一个函数。

    function protect($r)
    {
        $key=0;
        $cars=array("about","contact","content","download","downloads","index","list","pages","software","submit");
        for ($i=0;$i<count($cars);$i++){
            if($r==$cars[$i])
                $key=1;
        }
        return $key;
    }

    这个就是封装的函数,代码质量不高。。。大佬们可自行调整。

    if (protect($action)==1){
        include('files/'.$action.'.php'); //载入相应文件
    }else
    {
        echo "别试了,我已经被修复了";
    }

    然后就是一个简单的调用。

    我们来测试一下效果。

    修复get。

    2.越权漏洞

    2.1 审计

    之前听大佬说过,一般inc文件夹多半就会有问题。

    看到这里,发现这里有一个对cookie的判断。
    简单的分析一下就是如果user不为空的话,那么就可以进行操作。


    这里是调用的位置。

    我们来进行利用
    首先需要找到用户名。
    cookie添加user

    然后爆破一下

    这里找到admin
    然后进行绕过测试

    成功登入后台

    2.2 修复


    这里直接添加

    if(!defined('IN_SYS')) { 
    exit('不好意思,越权已经被我干掉了~'); 
    }

    就可以防止url直接访问啦。
    我们来进行一下测试

    3. 资料处存储型XSS

    3.1 审计


    我们在这里进行存储型xss的测试。

    成功

    看一下源码

    发现在存储的时候没有任何的过滤。

    emmmm

    找一下输出的地方。

    也没有过滤,那么有xss也说的过去了。

    3.2 修复

    使用htmlentities进行修复

    修复效果

    4.登录存在post sql注入

    4.1 审计


    bp转包,保存为txt

    sqlmap -r 跑一下

    成功注入。

    我们来看一下源码

    if ($login<>""){
    $query = "SELECT * FROM manage WHERE user='$user'";
    $result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $users = mysql_fetch_array($result);
    
    if (!mysql_num_rows($result)) {  
    echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
    exit;
    }else{
    $passwords=$users['password'];
    if(md5($password)<>$passwords){
    echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
    exit;   
        }
    //写入登录信息并记住30天
    if ($checkbox==1){
    setcookie('user',$user,time()+3600*24*30,'/');
    }else{
    setcookie('user',$user,0,'/');
    }
    echo "<script>this.location='?r=index'</script>";
    exit;
    }
    exit;
    ob_end_flush();
    }

    这里很清楚的看到使用的是直接拼接,所以必然存在sql注入。

    4.2 修复

    使用mysql_real_escape_string函数来进行修复

    效果:

    5. 前台的存储型xss

    5.1 审计

    这里发现了一个文章评论的地方,在内容的地方没有xss,但是在昵称的这个地方有xss

    payload:<img src=1 onerror=alert(/du/)>

    来看一下源码

    <?php
    session_start();
    require 'inc/conn.php';
    $type=addslashes($_GET['type']);
    $name=$_POST['name'];
    $mail=$_POST['mail'];
    $url=$_POST['url'];
    $content=$_POST['content'];
    $cid=$_POST['cid'];
    $ip=$_SERVER["REMOTE_ADDR"];
    $tz=$_POST['tz'];
    if ($tz==""){$tz=0;}
    $jz=$_POST['jz'];

    这里是获取到了name等字段的变量。我们的主要目的就是了解为什么昵称存在xss,内容不存在xss。

    这里直接插入了,没有进行过滤,所以有xss,也是应该的。。。。
    再看看前台页面的输入吧。

    页面打印的时候也么有进行过滤。

    然后来看一下content字段,为什么没有xss。

    5.2 修复


    这里我们使用htmlentities()来修复一下。
    也可以在页面输出的位置进行过滤。

    效果

    6. 意外发现的一枚 post 注入

    在看上面的xss的时候,突然发现这里还有一枚post注入。

    //查询用户头像数据
    $query = "SELECT * FROM interaction WHERE( mail = '$mail')";
    $result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $tx = mysql_fetch_array($result);
    if (!mysql_num_rows($result)){  
    $touxiang = mt_rand(1,100);
    }else{
    $touxiang = $tx['touxiang'];
    }

    直接使用mail进行查询,而且有没有过滤,典型的注入。

    顺手修好。

    7.前台的一个报错get型sql注入

    7.1 审计


    在文章加载这里有一个cid。
    尝试进行注入

    注入成功。
    查看一下相对应的源码吧。

    require 'inc/conn.php';
    require 'inc/time.class.php';
    $query = "SELECT * FROM settings";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $info = mysql_fetch_array($resul);
    
    $id=addslashes($_GET['cid']);
    $query = "SELECT * FROM content WHERE id='$id'";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $content = mysql_fetch_array($resul);
    
    $navid=$content['navclass'];
    $query = "SELECT * FROM navclass WHERE id='$navid'";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $navs = mysql_fetch_array($resul);
    

    这里发现cid 使用addslashes进行过滤的,不过这明显是一个字符型的注入,addslashes没什么用,所以存在sql注入。

    7.2 修复

    使用mysql_real_escape_string。

    之后发现有很多地方的cid都有这个操作,只要把所有的cid都是用mysql_real_escape_string过滤一下,就可以避免这种sql注入漏洞。

    8.sql注入报错伴随的反射xss

    8.1 审计

    当我们对sql注入的url添加单引号的时候。

    发现报错了。
    因为之前遇到过,所以这里直接使用payload。

    反射xss入手
    看一下关键代码。

    $id=mysql_real_escape_string($_GET['cid']);
    $query = "SELECT * FROM content WHERE id='$id'";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $content = mysql_fetch_array($resul);

    这里会直接报错,而且会把错误的地方放出来。

    8.2 修复

    这个cms里全部都是洞 ,大家要是感兴趣的话可以自己搭建把所有的漏洞都找出来。这里就不多说啦~
    祝大家心情愉快

    论如何教女朋友&老婆学安全&学编程,我们来聊一聊经验呀784278256
    发表于 2018-11-22 23:35:19
    初来乍到01 发表于 2018-11-22 08:12
    学习代码审计比较不错的一个案列,讲解的很详细

    感谢支持
    论如何教女朋友&老婆学安全&学编程,我们来聊一聊经验呀784278256
    使用道具 举报 回复
    发表于 2018-12-6 09:19:59

    回帖奖励 +1 魔法币

    学习代码审计比较不错的一个案列,讲解的很详细,厉害的一批 不仅能挖还能修
    小白~~~
    使用道具 举报 回复
    发表于 2018-12-19 18:15:20
    yhk2008666 发表于 2018-12-19 08:29
    这个浏览器插件是啥

    hackbar
    论如何教女朋友&老婆学安全&学编程,我们来聊一聊经验呀784278256
    使用道具 举报 回复
    发表于 2018-11-25 22:19:17
    eMhollow 发表于 2018-11-24 07:26
    图一用到的是啥工具哇??

    sublime
    论如何教女朋友&老婆学安全&学编程,我们来聊一聊经验呀784278256
    使用道具 举报 回复

    回帖奖励 +1 魔法币

    学习代码审计比较不错的一个案列,讲解的很详细
    有一天他会突然觉得累了甚至忘了初衷 放弃了梦想也许因为年纪的关系奔波于现实 然后拉黑了网络认识的所有人或者说不用了一个号码换了一个QQ 那么记得他叫大叔 这个网络他曾来过
    使用道具 举报 回复
    发表于 2018-11-23 09:44:06

    回帖奖励 +1 魔法币

    越权漏洞中cookie中的user值不为空就行了吧
    使用道具 举报 回复

    回帖奖励 +1 魔法币

    6666666666     
    使用道具 举报 回复

    回帖奖励 +1 魔法币

    666666666666666666666666666666666
    使用道具 举报 回复
    发表于 2018-11-22 18:07:54

    回帖奖励 +1 魔法币

    学习了 谢谢
    使用道具 举报 回复
    发表于 2018-11-22 19:22:11

    回帖奖励 +1 魔法币

    路过支持下
    使用道具 举报 回复
    发表于 2018-11-22 21:21:44

    回帖奖励 +1 魔法币

    学习了,不错。。
    http://www.anonymou5.com
    使用道具 举报 回复
    发表于 2018-11-23 14:34:44

    回帖奖励 +1 魔法币

    66666666666
    使用道具 举报 回复
    发表于 2018-11-23 15:43:29

    回帖奖励 +1 魔法币

    谢谢总结,学习学习
    使用道具 举报 回复
    发表于 2018-11-23 21:10:06

    回帖奖励 +1 魔法币

    6666666666666666666666666666
    使用道具 举报 回复
    发表于 2018-11-23 23:44:50

    回帖奖励 +1 魔法币

    不错,对于刚学代码审计的很有帮助
    使用道具 举报 回复
    发表于 2018-11-24 12:51:30

    回帖奖励 +1 魔法币

    路过支持下
    使用道具 举报 回复
    发表于 2018-11-24 13:48:32

    回帖奖励 +1 魔法币


    不错,对于刚学代码审计的很有帮助
    使用道具 举报 回复
    发表于 2018-11-24 13:48:52

    不错,对于刚学代码审计的很有帮助
    使用道具 举报 回复
    发表于 2018-11-24 15:14:02

    回帖奖励 +1 魔法币


    路过支持下
    使用道具 举报 回复
    123下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册