第六关的验证码我刷新不出来!!!!先做第七关
这里让你输入你的超级英雄和密码,账号的话我就猜是不是钢铁侠密码我随便输了一个123发现无效
打开bp后发现为POST方式传输,于是构造万能密码
成功登录,这里看一下源码为什么会成功?
<?php
if(isset($_POST["form"]))
{
$login = $_POST["login"];
$login = sqli($login);
$password = $_POST["password"];
$password = sqli($password);
$sql = "SELECT * FROM heroes WHERE login = '" . $login . "' AND password = '" . $password . "'";
// echo $sql;
$recordset = mysql_query($sql, $link);
if(!$recordset)
{
die("Error: " . mysql_error());
}
else
{
$row = mysql_fetch_array($recordset);
if($row["login"])
{
// $message = "<font color=\"green\">Welcome " . ucwords($row["login"]) . "...</font>";
$message = "<p>Welcome <b>" . ucwords($row["login"]) . "</b>, how are you today?</p><p>Your secret: <b>" . ucwords($row["secret"]) . "</b></p>";
// $message = $row["login"];
}
else
{
$message = "<font color=\"red\">Invalid credentials!</font>";
}
}
mysql_close($link);
}
echo $message;
?>
我们可以发现这里的关键句是这样的:
$sql = "SELECT * FROM heroes WHERE login = '" . $login . "' AND password = '" . $password . "'";
发现需要前后都为真才可登录,那是不是第一个也可以构造成和密码一样的格式呢?
发现确实如此,这里第一个单引号和前面闭合,最后一个单引号和后面的闭合,之后相当于查的是select * from heroes where login = ture and password= ture,我理解为条件恒真。