刚开始学习代码审计,根据法师的书本和相关资料进行慢慢开始练手,这里了一款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
原文地址:https://www.cnblogs.com/xsr7yer/p/9070934.html
时间: 2024-11-08 17:00:26