SQL 注入参数在我的页面上不起作用
SQL Injection parameters aren't working on my page
我有一个登录表单,我很困惑为什么我的 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
{
}
?>
我在用户名和密码字段中尝试了 admin'OR'1'='1 以及任何其他可能的基本注入,但它不起作用。我尝试在大多数工作站点中使用基本的 sql 注入并且它有效,我只是很困惑我的代码不接受 sql 注入。
当您的凭据不正确时,它会给我同样的回显。
我希望这是出于学术目的,因为我不知道为什么你会想要在任何生产网站上使用它。话虽如此,这可能是因为对于 return 任何结果的查询,AND 也需要为真。如果您在用户名字段中提交了 admin'OR'1'='1
,您的查询将看起来像
SELECT * FROM users WHERE username='admin'OR'1'='1' AND password='123'
这对我来说是 WHERE username equals admin OR 1 equals 1 AND password equals 123。您可能需要弄清楚如何绕过该检查,因为它仍然会尝试匹配密码字段,反之亦然场.
说起来有点奇怪,但如果你想注入一些东西,也许这会在用户名字段中起作用injection' OR 1 LIMII 1#
这会产生这样的东西
SELECT * FROM users WHERE username = 'injection' OR 1 LIMIT 1#' AND password = 'pass'
本质上您已经在注入 SQL,只是您没有以产生您想要的结果的方式进行注入。尝试回显查询并直接在 mySQL CLI 中 运行 它以查看结果集是什么以及它是否是有效查询。也许在那里尝试查询以尝试获得您想要的注射。
我有一个登录表单,我很困惑为什么我的 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
{
}
?>
我在用户名和密码字段中尝试了 admin'OR'1'='1 以及任何其他可能的基本注入,但它不起作用。我尝试在大多数工作站点中使用基本的 sql 注入并且它有效,我只是很困惑我的代码不接受 sql 注入。
当您的凭据不正确时,它会给我同样的回显。
我希望这是出于学术目的,因为我不知道为什么你会想要在任何生产网站上使用它。话虽如此,这可能是因为对于 return 任何结果的查询,AND 也需要为真。如果您在用户名字段中提交了 admin'OR'1'='1
,您的查询将看起来像
SELECT * FROM users WHERE username='admin'OR'1'='1' AND password='123'
这对我来说是 WHERE username equals admin OR 1 equals 1 AND password equals 123。您可能需要弄清楚如何绕过该检查,因为它仍然会尝试匹配密码字段,反之亦然场.
说起来有点奇怪,但如果你想注入一些东西,也许这会在用户名字段中起作用injection' OR 1 LIMII 1#
这会产生这样的东西
SELECT * FROM users WHERE username = 'injection' OR 1 LIMIT 1#' AND password = 'pass'
本质上您已经在注入 SQL,只是您没有以产生您想要的结果的方式进行注入。尝试回显查询并直接在 mySQL CLI 中 运行 它以查看结果集是什么以及它是否是有效查询。也许在那里尝试查询以尝试获得您想要的注射。