SQL注入在先验证用户名的情况下绕过题目(2017-赛客夏令营-Web-Injection V2.0)

SQL注入在先验证用户名的情况下绕过题目

前一篇文章就是介绍,在先验证用户名的情况下绕过。
现在来简单的总结一下和做一道题。

当我们登陆一个页面进行用户名和密码验证的时候,可能存在俩种方式。
方法一:

$username=$_POST['username'];
$password=$_POST['password'];
$sql='select * from user where username='$username' and password='$password'';
#查询
#登陆成功
#第一种方法就是一起验证用户名和密码

方法二:

$username=$_POST['username'];
$password=$_POST['password'];
$sql='select password from user where username='$username'';
#查询
if($row){
      if($row['password']==$password)
       {
            echo 'success';}
      else{
            echo 'fail';}
}
else{
      echo '用户不存在';
}
#第二种方法就是通过先查询用户名,如果用户存在之后验证密码是不是和数据库里面的密码一样。

总之俩种方法都可能形成SQL注入。

结合这个题目2017-赛客夏令营-Web-Injection V2.0
通过测试这道题过滤了空格和括号。
基本上我们测试SQL都需要括号来实现函数的操作。如果绕过括号,就可能是通过绕过密码相等(第二种模式)

输入用户名a密码a,提示用户不存在
输入用户名admin,密码a提示密码错误
就可以判断是通过第二种方法来验证用户信息

绕过思路:
我们就需要绕过密码,可以向数据库插入虚拟数据,前一篇文章介绍了两种方法
绕过密码相等
1.可以通过union select 1

2.使用group by 字段 with rollup

所以我们最后的payload:
user=1'union/**/select/**/1/**/%23&pass=1

参考https://www.cnblogs.com/hello-py/articles/13463629.html

posted @ 2020-08-15 19:13  Firebasky  阅读(416)  评论(2编辑  收藏  举报