Access数据库——偏移注入之移位溢注

本文详细介绍了Access数据库中的偏移注入,又称移位溢注,重点讲解了其应用场景、概念、必要条件及例题。通过案例分析了如何在不知道字段名的情况下,利用移位溢注技巧获取数据,包括联合查询的字段数匹配、输出点的确定等关键步骤。
摘要由CSDN通过智能技术生成

目录

1、偏移注入使用场景

2、什么是移位溢注?

必要条件

a. 第一种情况

b. 第二种情况

原理

c. 第三种情况

3、例题讲解——利用JS设置

推测字段数

更换注入点推测字段数

推测输出点

获得数据


1、偏移注入使用场景

在做SQL注入的时候,通常我们查询数据需要知道在哪个表哪个字段,我们才能在里面提取到我们想要的数据,比如说select password from admin,从admin表里面取password字段里面的内容;

在做渗透测试会遇到一种情况,比如没有系统自带库,因为有的系统自带库可能权限不够访问不了,像Access数据库根本就没有系统自带库;如果遇到这种情况就会产生一些问题,表名、字段名就需要强行猜

需要强行猜就会造成一种情况,比如说它的字段名设置的比较奇葩的时候,例如像这样的:H5scker_Passwd,这一类的密码字典里面不存在,所以基本上来说是爆破不了;

这样的问题该如何解决?

如果不知道表名,那在Access数据库中也是无解的,它不能够通过Burp一个个地爆破,但是如果知道表名不知道字段名,那是有解的,就要用到——偏移注入(移位溢注)


2、什么是移位溢注?

偏移注入正统的叫法是移位溢注,我们现在要学的方法叫做移位溢注,它跟正统的偏移注入不一样,移位溢注是现在做偏移注入比较主流的方法;

真正的偏移注入是要用一些左连接右连接的查询,比较麻烦,而且成功率比较低;所以我们学习成功率比较高的移位溢注;

之前我们学习过:

库.表.字段 => 选中某库中的某表中的某字段

select * from admin 查询admin表里面的全部字段内容

​​

可以看到里面有id、username、password字段;

输入select * from admin就能查询到admin表里字段内容;

会发现select * from admin等价于select id,username,password from admin

*(星号)就代表着id,username,password字段;

这个时候就会产生一个问题:为什么*就代表着admin表里的内容,而不是其他表的内容?

这是因为现在所查询的是admin表,所以*代表的是admin表里的所有字段;

select * from admin => select id,username,password from admin

这个地方还可以用库.表.字段来写select admin.* from admin

select admin.* from admin

会发现得到的结果和我们前面得到的结果是相同的;

可以得出一个小结论:

select admin.* from admin 中的 admin.*代表着admin表中的所有字段;

那么现在就知道了表名.*代表着这个表里所有的字段

这里就是核心概念;

举个例子:

select * from news where id =1 union select admin.* from admin

union:要求前后两条SQL语句的字段数必须相同;

union的核心是将两个查询的结果输出到一起

比如这有一个表,里面有学号,姓名,性别3个字段,第一条数据逐一显示了3个字段内容,但第二条数据不止显示了3个字段内容并且还多出了一个21;

那么这个数据去导入的时候就会出现问题,数据库不知道21是什么情况,不知道21是对应什么的,就会出现报错或者不执行,这里就是联合查询的核心,前后的字段数必须要相同

如果我们去写一个select 1,2,3,4这1,2,3,4并不重要,重要的是位置,你也可以写其他的select 222,111111,55555,6666是一样的,都是占4个位置,无论你写的再长,都是一样的;

select 1,2,3,4=select 222,111111,55555,6666
select 1,2,3,4=select 'skjfhkjhkja',222,345,112

回到上面那条语句;

select * from news where id =1 union select admin.* from admin

必要条件

偏移注入需要满足一定的条件:

①知道表名

②注入点的字段数长度要大于你想要查询的表的字段数

a. 第一种情况

后半条语句的字段数多于前半条语句的字段数

select * from news where id =1 union select admin.* from admin

可以union前后做个分割;

select * from news where id =1      假设这里是3个字段

union

select admin.* from admin              而这里是4个字段

像这样的情况就不能写select admin.* from admin,因为已经超出了前面的字段数

b. 第二种情况

前半条语句的字段数多于后半条语

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值