一、简述
所谓登录验证绕过即在进行身份验证时,使用一些特殊的字符,绕过身份认证,从而成功登陆。
登陆验证绕过可分别从用户名和密码两处进行绕过。
二、绕过原理
万能密码绕过的原理是利用逻辑关系 and、or以及SQL语言的注释符,来达到绕过验证的目的。
尤其注意:SQL中,优先级 and > or
因此,当有语句:a > b and a > c or 1=1时,是将其从or处分成两部分,先进行两边判断,然后再判断or。
- 例如,在php代码中构造的SQL语句如下:
$sql = "SELECT passwd FROM user WHERE username = '{$_POST["username"]}' and passwd = '{$_POST["passwd"]}';";
执行该语句可在数据库中查询是否有符合用户输入的用户名密码的记录,若有则登陆成功。
- 当用户输入正常用户名:
root
、密码:admin
时,执行的SQL语句是这样的:
SELECT passwd FROM user WHERE username = 'root' and passwd = 'admin';
- 而当用户输入非法用户名:
' or 1=1 #
密码:任意
时,执行的SQL查询语句是这样的:
SELECT passwd FROM user WHERE username = '' or 1=1 #' and passwd = '111';
这样就可以绕过验证,成功登陆。
三、代码实现
HTML实现前端的输入并提交表单;php代码实现后台接收数据并查询数据库。
- HTML代码(index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head