[PHP代码审计]由S-CMS5.0最新SQL注入带来的审计新思路

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PHP代码审计]由S-CMS5.0最新SQL注入带来的审计新思路相关的知识,希望对你有一定的参考价值。

写在前面

目前已交CNVD,出于其影响综合考虑,想了几天还是打算分享给大家,希望给大家带来更多的启发
前几天挖了一下S-CMS的SQL注入,这里不得不引起我的一个思考,很多时候开发者只是误认为自己的全局Waf很安全,其实并不是,接下来我们就来看看这个SQL注入,当然这个CMS还有其他注入方式这里只是因为觉得这个点好玩所以才发这篇文章,只是想告诉大家,全局waf的错误对整个CMS来说都是致命的

审计思路

在这个CMS很多请求都是通过admin/ajax.php去实现,我们来看看头部,引入了三个文件

<?php
require '../function/conn.php';
require '../function/function.php';
require '../function/mobile.php';

这里我节约时间,直接给大家看第二个,能看到这里是有一个全局参数的Waf

$_POST = array_map('check_input', $_POST);
$_GET = array_map('check_input2', $_GET);
$_COOKIE = array_map('check_input2', $_COOKIE);
$_REQUEST = array_map('check_input2', $_REQUEST);
$_SERVER = array_map('check_input2', $_SERVER);

这个check_input2还算是安全

function check_input2($value){
	if (is_array($value)){
		return $value;
	}else{
		$value=str_replace("*","__",$value);
		$value=str_replace("'","__",$value);
		$value=str_replace("\\"","__",$value);
		$value=str_replace("<","__",$value);
		$value=str_replace(">","__",$value);
		$value=str_replace(" ","__",$value);
		$value=str_replace("$","__",$value);
		$value=str_replace("\\t","__",$value);
		return addslashes(trim($value));
	}
}

可是check_input却并不是,我们能猜测到开发者是希望能够对数组形式进行过滤可是他没做到,因此不难得知这里可能存在参数注入

function check_input($value){
	if (is_array($value)){
		return $value;
	}else{
		return addslashes(trim($value));
	}
}

我们使用全局搜索一波\\$_POST\\[\\$[a-zA-Z0-9]\\]\\[,果然是有的,那我很容易对其进行注入
在这里插入图片描述
看看这里是
在这里插入图片描述

if (splitx($x, "_", 0) == "hide") {
                    mysqli_query($conn, "update " . TABLE . "menu set U_hide=" . $_POST[$x][0] . " where U_id=" . splitx($x, "_", 1));
                }

我们传参,也就构成了注入

hide_1[]=1 AND (SELECT if(1=1,sleep(5),1))

修复建议

我个人对此的修复方式

function check_input($value){
    if (is_array($value)){
        foreach ($value as $k=>$v) {
            return check_input($v);
        }
    }else{
        return addslashes(trim($value));
    }
}

以上是关于[PHP代码审计]由S-CMS5.0最新SQL注入带来的审计新思路的主要内容,如果未能解决你的问题,请参考以下文章

S-CMS企建v3二次SQL注入

ZZCMS v8.2 最新版SQL注入漏洞

19-PHP代码审计——jizhicms逻辑漏洞分析(由越权引发的sql注入)

19-PHP代码审计——jizhicms逻辑漏洞分析(由越权引发的sql注入)

PHP 代码审计之死磕 SQL 注入

php代码审计SQL 注入研究