【发布时间】:2019-05-05 13:42:56
【问题描述】:
我会简短地说,直奔主题。
我正在测试我在下面编写的 PHP 代码的 SQLI 登录绕过。
if(isset($_POST["login"]) && isset($_POST["password"])){
$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";
$result=mysqli_query($conn, $sql);
if(mysqli_num_rows($result) != 0)
echo "<h1>Login Success!</h1>";
else
echo "<h1>Invalid Login!</h1>";
}
我使用 admin' -- 作为登录字段,以便在不输入密码的情况下成功绕过登录。
但问题是它不起作用,但是当我尝试使用这个 admin' -- ' -- 时,它却起作用了。
所以问题是那个特定的备忘单如何以及为什么会起作用,而不是第一个?
这个 admin' -- ' -- 可以工作,但这个 admin' 不行 --
当我输入这 2 个备忘单时,这些是服务器端代码。
无效的旁路。
$sql="select * from users where login='admin' --' and password='{$_POST["password"]}'";
有效的旁路。
$sql="select * from users where login='admin' -- ' --' and password='{$_POST["password"]}'";
只需要澄清或解释第一个备忘单如何以及为什么不起作用,但第二个备忘单起作用。谢谢!
【问题讨论】:
-
语法高亮显示有明显的语法错误
-
Topicstarter 检查重复链接,我已经非常详细(教程风格)解释了如何为 MySQL 和 MariaDB 进行 SQL 注入。
-
我在输入 admin 时遇到了这个错误——在登录字段中 警告:mysqli_num_rows() 期望参数 1 是 mysqli_result,布尔值在
-
该消息意味着您在 SQL 查询中输入了错误的内容,例如您尝试选择一个实际上不存在的列。
-
为了便于阅读,请全部大写mysql关键字。另外,
isset()可以接收多个参数——你只需要在isset()调用。
标签: php mysql sql code-injection