【问题标题】:SQL injection is not working correctlySQL 注入无法正常工作
【发布时间】:2013-01-06 14:01:44
【问题描述】:

我正在尝试在我的本地主机上为安全测试项目创建的虚拟网站上执行 SQL 注入。

我尝试在用户名和密码字段中输入字符串" OR "=',因此它应该绕过它并显示登录正确 - 但它显示登录失败

任何有助于理解为什么 SQL 注入不起作用

<?php
    mysql_connect('localhost', 'root', '');
    mysql_select_db('test');

    if(isset($_POST['username'])&&isset($_POST['password'])){
       $username =$_POST['username'];
       $password = $_POST['password'];
       echo $username;
       echo $password;

       if(!empty($username)&&!empty($password)){
          $query ="SELECT id FROM users WHERE username = '$username' AND password = '$password'";
          $query_run = mysql_query($query);

          if(mysql_num_rows($query_run)>=1){
              echo 'Login Correct';
          }else{
              echo 'Login Failed';
          }
       }
    }
?>
<form action="test.php" method="POST">
   Username: <input type="text" name="username">
   Password: <input type="text" name="password">
   <input type="submit" value="Submit">
</form>

【问题讨论】:

  • 可能是魔术引号问题

标签: php mysql sql sql-injection


【解决方案1】:

你的注入字符串应该是这样的:
用户名和密码:

' or '1' = '1

用户名(通常)或密码:(取决于查询中哪个先出现)
# cmets 查询的其余部分。

' or '1'='1' #

有关SQL注入的更多信息,您可以查看这个完美的网址:
The SQL Injection Knowledge Base

【讨论】:

  • ...这是正确的。 # 很重要。否则注入必须在password 字段中。
【解决方案2】:

尝试注入这个:' or '1' = '1' --

'1' = '1' 始终为真,-- 表示-- 之后的所有内容都是评论,不会被检查。

【讨论】:

  • 我发现在某些 db 实现中(尤其是 mysql),您需要在 -- 之前有一个空格,否则它不会被视为注释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多