【问题标题】:SQL Injection parameters aren't working on my pageSQL 注入参数在我的页面上不起作用
【发布时间】:2018-10-29 11:27:01
【问题描述】:

我有一个登录表单,但我很困惑为什么我的 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 注入。

当您的凭据不正确时,它会给我同样的回声。

【问题讨论】:

  • 能否让它也回显生成的sql?您应该能够手动运行它并看到预期的结果。
  • 我的猜测是 if(mysqli_num_rows($result)==1) 返回 false,因为 1=1 导致返回 所有 行,而不仅仅是 1。

标签: php sql sql-injection


【解决方案1】:

我希望这样做是出于学术目的,因为我不知道您为什么希望在任何生产网站中使用它。话虽这么说,这可能是因为查询返回任何结果时 AND 也需要为真。好像您在用户名字段中提交了admin'OR'1'='1,您的查询看起来像

SELECT * FROM users WHERE username='admin'OR'1'='1' AND password='123'

这对我来说是 WHERE 用户名等于 admin 或 1 等于 1 并且密码等于 123。您可能需要弄清楚如何绕过该检查,因为它仍然会尝试匹配密码字段,反之亦然。用户名字段。

说起来似乎很奇怪,但如果你想注入一些东西,也许这可以在用户名字段injection' OR 1 LIMII 1# 中工作,这样会产生这样的结果

SELECT * FROM users WHERE username = 'injection' OR 1 LIMIT 1#' AND password = 'pass'

本质上,您已经在注入 SQL,只是没有以产生您想要的结果的方式进行。尝试回显查询并直接在 mySQL CLI 中运行它,以查看结果集是什么以及它是否是有效查询。也许在那里玩弄查询以尝试获得您想要的注入。

【讨论】:

  • 对于实时站点,我希望所有用户密码都经过哈希处理
猜你喜欢
  • 2014-01-21
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多