ZZCMS201910审计入门和黑名单SQL注入
1.一个小白来说,代码审计的路线可能一开始不会清晰,但是多练习和多接触,了解多了其实也就这么回事。代码审计其实就是对源码白盒测试,千万先记住一点,任何产生交互的地方都完全存在漏洞;再多记住一点,看代码的时候那些被写死的字符串,输出内容真的没有必要去在意和阅读;(当然前提还是要会一些php不然搞不来)。
2.一个php项目,请务必先测试和找到它的入口,(可能是单或多); 因为按照php的风格她一定会对客户端提交的数据有一定程度的处理。了解这个是挖掘每一个php项目漏洞的先决条件。由于是入门学习,zzcms是存在一个统一入口处理提交变量的方法…/inc/stopsqlin.php。
/*首先如何寻找这个文件,我认为每个人习惯可能不一样;但是我这里发现了有好几种方式;
一、在浏览器不同网页下多尝试可能提交参数的地方,或者自己构造参数;zzcms主页下我构造了?id=<script 后,显示"无效参数";之后全局只找到一个文件存在这个字符串;
二、sexy自动审计根据爆出:存在 @extract($_GET); 可能会存在变量覆盖漏洞;熟悉extract的人一定会觉得这是必须要看一下的地方,从而找到;
三:根据项目下不同文件夹下的命名预测缩小范围,再在指定目录下搜索存在addslashes和htmlspecialchars所存在的文件,也能很快找到;
*/
3.对入口过滤方法的分析:
//stopsqlin.php
function zc_check($string){
if(!is_array($string)){
//如果不是数组进入
if(get_magic_quotes_gpc()){
//这个是本意是对'/<'这些字符进行转义,但是5.4版本后移除,所以为false,写上是为了低版本的兼容性
return htmlspecialchars(trim($string)); //经过去首位空格(trim)和防止xss注入(htmlspecialchars)过滤后返回
}else{
//上面是兼容性写法,一般都会进入这里
return addslashes(htmlspecialchars(trim($string)));
} //addslashes是防止sql注入对字符过滤
}
//如果是数组将先使用foreach将数组的键值拆分,再递归调用值进行上面的字符过滤
foreach($string as $k => $v) $string[$k] = zc_check($v);
return $string;
}
if($_REQUEST){
$_POST =zc_check($_POST); //提供该方法所传变量都将经过上面zc_check函数过滤
$_GET =zc_check($_GET);
$_COOKIE =zc_check($_COOKIE);
@