zoukankan      html  css  js  c++  java
  • [php审计实战篇]BlueCms v1.6 Union注入

    非常基础的代码审计练习,适合有php基础的审计新手练习

    本文作者:Aedoo

    来源:i春秋社区

    0×01 代码跟踪

    首先,进入首页代码 :index.php

    1.png

    包含了php文件:/include/common.inc.php

    跟踪这个php文件,这些文件都是包含的全局文件。

    2.jpg

    这个php文件还是先包含了几个全局文件。

    最主要的是上图最下方的if判断:

    if(!get_magic_quotes_gpc())

    {

       $_POST = deep_addslashes($_POST);

       $_GET = deep_addslashes($_GET);

       $_COOKIES = deep_addslashes($_COOKIES);

       $_REQUEST = deep_addslashes($_REQUEST);

    }

    如果未开启magic_quotes_gpc,则对以各种请求的数据使用deep_addslashes()进行过滤,跟踪一下这个函数:

    3.jpg

    对传入的的$str,无论是数组还是字符串,使用addslashes()进行过滤。

    PS:magic_quotes_gpc=On的情况下,如果输入的数据有,单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。

    0×02 注入分析

    在phpstorm使用CTRL+SHIFT+F全局搜索:$_GET

    寻找以GET方式传入的参数:

    4.jpg

    使用红框圈起来的这条有异常。

    ad_id明显是文章或者广告的id,并没有使用intval强制转化为整数型而是使用了trim()函数来去除了前后的空格,有点看不懂。

    此时还不能完全确定存在注入,跟踪到这行代码看一下:

    5.jpg

    这次确定,对传入的ad_id只判断了是否为空,去除了前后的空格,此外也就多了一个全局的addslashes()转义了一下特殊字符,直接进行了SQL查询。

    将SQL语句传入了getone()函数,很明显getone是进行SQL查询的函数,跟进。

    getone()函数:

    function getone($sql, $type=MYSQL_ASSOC){

       $query = $this->query($sql,$this->linkid);

       $row = mysql_fetch_array($query, $type);

       return $row;

    }

    query()函数:

    function query($sql){

        if(!$query=@mysql_query($sql, $this->linkid)){

            $this->dbshow("Query error:$sql");

        }else{

            return $query;

        }

    }

      

    第一个if,如果执行发生错误,将错误信息"Query errorsql"传入dbshow()函数。

    dbshow()函数:

    function dbshow($msg){

        if($msg){

            echo &quot;Error:&quot;.$msg.&quot;<br><br>&quot;;

        }else{

            echo &quot;Errno:&quot;.$this->errno().&quot;<br>Error:&quot;.$this->error();

        }

        exit;

    }

    作用是输出错误信息。

    之后回到ad_js.php文件:

    6.jpg

    $ad_content输出查询信息。

    输出形式:

    <!–

    document.write(&quot;test&quot;);

    –>

     

    0×03 构造Payload

    正常的SQL查询语句为:

    select * from blue_ad where ad_id=1

    因为直接回显查询内容,所以直接union注入咯。

    看一下数据库结构:
    7.jpg

    我们需要的数据列名为admin_name和pwd,构造PayLoad:

    执行后查看源码:

    8.jpg

     

    0×04 源码下载及工具说明

    回到文下载工具

  • 相关阅读:
    教你用纯Java实现一个网页版的Xshell(附源码)
    Learn Terraform--Getting Started--Installing Terraform
    Install Terraform on Windows, Linux and Mac OS
    Installing kubectl
    Creating a Cron Job in K8S
    Patch multi versions of windows via Power shell
    Bash to check SSL cert expired
    K8S dashboard 创建只读账户
    K8S Link
    Kubernetes
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/8023838.html
Copyright © 2011-2022 走看看