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 @   Firebasky  阅读(424)  评论(2编辑  收藏  举报
编辑推荐:
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
阅读排行:
· BotSharp + MCP 三步实现智能体开发
· BotSharp 5.0 MCP:迈向更开放的AI Agent框架
· 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
· 【ESP32】两种模拟 USB 鼠标的方法
· 设计模式脉络
点击右上角即可分享
微信分享提示