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
他们的坚强他们的梦
他们的苦只有自己懂