在进行SQL注入中常常会有着对登录框的注入,这时我们常常通过万能密码的方式进行绕过登录框进行SQL注入
注:在现在的应用程序已经很难用万能密码进行绕过了,本篇文章仅仅讨论万能密码绕过的原理
一.我们以ctfshow中的一道题来讲解:
ctfshow-wbe2:
可以发现需要登录用户名和密码来进行登录。
我们直接使用万能密码:admin’ or 1=1 #进行绕过,密码随便输
顺利登录成功。
由于本次只讲解万能密码的原理,后面的步骤就不具体演示了。
二.原理讲解
1.要知道具体如何绕过我们就需要知道后台的源代码
一个简单的php+mysql识别前端登录框的代码如下:
<?php
//从前端获取用户输入的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];
//执行SQL查询
$query = "SELECT * FROM users WHERE username = '$username' AND password='$password'";
$result = mysqli_query($con, $query)
//验证查询结果
if (mysqli_num_rows($result) > 0)
{
//验证通过,登录成功
echo 'Login success';
}
else
{
//验证失败,登录失败
echo 'Login failed';
}
1.用户通过表单输入用户名和密码,并且该表单通过POST方法提交到服务器
2.php接受到用户名和密码并把它存储到$username和$password中
3.构造sql查询语句,在数据库中查找相关数据
4.进行if…else判断
在我们这行代码中可以做些手脚,当我们把万能密码输入进去后就能发现原因
$query = "SELECT * FROM users WHERE username = 'admin' or 1=1 #'AND password='$password'";
是不是一下就明白了
1.通过or 1=1使得条件永为真
2.然后再通过#将后面的password注释掉,这样整个查询条件为真,相当于where条件没了,查询整个字段的数据
具体的原理知道了,你也来构造一个万能密码把!!