我有一个登录表单,我很困惑为什么我的SQL注入参数在这里不起作用。我没有任何防止SQL注入的功能或方法。
我创建了这个用于SQL注入测试的登录表单,它是用PHP编写的。 这是我的代码。
<?php
include("myconnection.php");
$error="";
if(isset($_POST["submit"]))
{
if($_POST["username"] == '' || $_POST["password"]== '')
{
$error='Please fill the blanks!';
}else
{
$username=$_POST['username'];
$password=$_POST['password'];
$sql="SELECT * FROM users WHERE username='$username' AND password='$password'";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
if(mysqli_num_rows($result)==1)
{
$login_user=$_POST["$username"];
header("location: myhome.php");
$error="Connected";
}
else
{
//$error="Incorrect Username/Password";
$message="Incorrect Credentials";
echo "<script='text/javascript'>$message</script>";
}
}
}
else
{
}
?>
我在用户名和密码字段以及任何其他可能的基本注入中尝试了管理员&#39; 1&#39; =&#39;但它不起作用。我尝试在大多数工作站点使用基本的sql注入并且它有效,我只是困惑我的代码不接受sql注入。
当你的凭据不正确时,它会给我相同的回音。
答案 0 :(得分:0)
我希望这是为学术目的而做的,因为我不知道为什么你想在任何制作网站上都有这个。这就是说,这可能是因为AND需要也是真的让查询返回任何结果。如果您在用户名字段中提交了admin'OR'1'='1
,那么您的查询就会像
SELECT * FROM users WHERE username='admin'OR'1'='1' AND password='123'
这对我来说就是WHERE用户名等于admin或1等于1 AND密码等于123.你可能需要弄清楚如何绕过该检查,因为它会尝试匹配密码字段,反之亦然用户名字段。
似乎很奇怪,但是如果你想注入一些东西,也许这可以在用户名字段中使用injection' OR 1 LIMII 1#
这会产生类似的东西
SELECT * FROM users WHERE username = 'injection' OR 1 LIMIT 1#' AND password = 'pass'
基本上你已经注入了SQL,你只是不是以产生你想要的结果的方式来做。尝试回显查询并直接在mySQL CLI中运行它以查看结果集是什么以及它是否是有效查询。也许可以在那里查询以尝试获得您的预期注射。