微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试 SQL 注入绕过登录

如何解决尝试 SQL 注入绕过登录

我正在尝试 sql 注入,然后再向它添加准备好的语句(我目前正在研究),我只是想测试一下。

登录

<form action="login_auth.PHP" method="post">
                <div class="form-group first">
                  <label for="username">Username</label>
                  <input type="text" class="form-control" placeholder="Username" id="username" name="username">
                </div>

                <div class="form-group last mb-3">
                  <label for="password">Password</label>
                  <input type="password" class="form-control" placeholder="Your Password" id="password" name="password">
                </div>
                

                <input type="submit" value="Log In" class="btn btn-block btn-primary" name="login">

              </form>

login_auth.PHP

<?PHP
session_start();
$connection=MysqLi_connect("localhost","root","","upang_hub");
if (isset($_POST['login'])) {
    $username=$_POST['username'];
    $password=$_POST['password'];

     $sql_query = "SELECT * FROM tbl_account WHERE username = '$username' AND password = '$password' ";
     $result = MysqLi_query($connection,$sql_query);

    $row=MysqLi_fetch_array($result);

    if ($row['username'] == $username && $row['password'] == $password) {
        $_SESSION['username'] = $username;
        echo "<script>alert('Login Success!');document.location='user.PHP'</script>";
        
    }
    else{
         print_r($sql_query);
    }
}

?>

我无法绕过这个, 我尝试在用户名和密码输入中使用 'OR'1' = '1。 但它向我抛出了 $sql_query,它位于 login_auth.PHP 中的 else 语句中 SELECT * FROM tbl_account WHERE username = ''OR'1'='1' AND password = ''OR'1'='1'

那么结果应该是正确的,因为它是 1=1

解决方法

SQL 注入有效,查询返回表中的所有行。

但是 PHP 会根据获取的第一行检查用户名和密码:

if ($row['username'] == $username && $row['password'] == $password)

由于用户名和密码不匹配,您无法登录。

SQL 注入通常会绕过用户名和密码检查,因为代码假设如果查询返回某些内容,它必须与表单中输入的内容匹配,因此它不会进行额外的检查。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。