1988's Studio.

Sqlmap payload修改姿势(一)

2018/02/02

首先来讲讲sqlmap6种探测注入类型:

1, UNION query SQL injection(可联合查询注入)

联合查询简单来说就是通过union关键字将多条查询语句拼接在一起,并且把查询结果作为一个结果以一个表格的形式输出到页面,需要注意的是查询语句要符合1.相同列数2.相似的数据类型3.相同的编码。示例语句:-1’ union select 1,(select user()),(select version())–+,如果 查询结果无法返回到页面,则就需要考虑盲注。

2, Error-based SQL injection(报错型注入)

报错注入的核心思想是通过数据库的“人性化的报错定位机制”将我们要查询的数据通过报错的方式直接回显到页面上来,示例语句:’ and (extractvalue(1,concat(0x7e,(select user()),0x7e)))–+,当然如果报错的数据不能回显到页面上来,就无法使用报错注入,这时候我们就可以考虑是否存在盲注。

3, Boolean-based blind SQL injection(布尔型注入)

布尔盲注的核心思想就是通过判断两种不同的页面状态来进一步推断注入语句是否被执行以及数据是否存在。示例语句:1’ and database() regexp ‘^1’ –+,当我们输入的注入语句无法通过回显以及报错的方式来获取数据,这时候就可能存在盲注,通过判断有跟没有、对或错来判断regexp 是否匹配到数据了。

4, Time-based blind SQL injection(基于时间延迟注入)

如果在测试的时候发现都不存在前面三种所说的注入,那就有可能是时间盲注,时间盲注的特点是无回显,无报错,也没有多种页面状态。这时候就需要通过增加sleep()函数来判断注入语句的执行,而布尔则是根据页面的对错来判断。示例语句:1’ and sleep(5)–+ 如果sleep则说明存在时间盲注

5, Stacked queries SQL injection(可多语句查询注入)

多语句查询注入也叫做堆叠查询,与联合查询有点相似,都可以多条语句查询,堆叠查询的关键是分号(;)比较直观的就是如果分号被过滤或者无法绕过就无法注入,当然还有一些数据库引擎不支持,权限不足等限制。

6, Inline queries(内联查询注入)

一般较少遇到这种情况。

sqlmap根据6大类型探测技术生成的payload就放在sqlmap源码中\xml\payloads文件中,根据探测技术分为6个后缀为.xml的文件,每个xml文件分别存放每种注入技术的payload。

到这里突然发现目前用的notepad++里插件的markdown,不支持图片插入,尴尬==我之后再改吧。。

xml就是可扩展标记语言,标准通用标记语言的子集,简单来说就是sqlmap用xml语言来定义多个不同的标签组成一个payload的模板,每个标签有设置不同的等级,通过这样的方式可以实现灵活组合和调用payload。所以我们就必须先了解sqlmap定义的每个标签的意思和作用。

以下是从别处帖子po来的:
标签的意思和作用可以直接通过在sqlmap源码的\xml文件夹中的boundaries.xml文件以及\xml\payloads文件夹下的.xml文件的注释中查看,通过查询xml文件中的注释,我们知道sqlmap上的boundaries.xml定义的以及payload文件下的xml定义的标签均与sqlmap的payload有密切关系。
< boundary >定义了sqlmap注入语句的边界问题,包括注入的发包数量等级,使用的查询从句,注入的位置,使用的特殊字符,前缀,后缀等。为我们清晰地划分了sqlmap注入时的所需要的各个模块等级。
而< test >则定义了比较细致完整的测试实例,俗称payload。

由上面的相结合我们可以得到如下测试语句。

最终的payload = where + boundary.prefix+test.payload+boundary.suffix,影响最终payload的生成主要由,标签决定的,当且仅当某个boundary元素的where节点的值包含test元素的子节点where的值,clause节点的值包含test元素的子节点的clause的值时候,该boundary才能和当前的test匹配生成最终的payload。经过测试发现除了这两个文件决定最终payload的生成,还包括sqlmap使用的注入方式以及payload使用的查询语句有关。如果把这两个文件比作两个集合,生成的payload比作两个集合的映射,则这两个集合之间的映射关系是多对多的关系。

之后等我继续学习这篇文章再来写写收获吧。

CATALOG
  1. 1. 1, UNION query SQL injection(可联合查询注入)
  2. 2. 2, Error-based SQL injection(报错型注入)
  3. 3. 3, Boolean-based blind SQL injection(布尔型注入)
  4. 4. 4, Time-based blind SQL injection(基于时间延迟注入)
  5. 5. 5, Stacked queries SQL injection(可多语句查询注入)
  6. 6. 6, Inline queries(内联查询注入)
  7. 7. sqlmap根据6大类型探测技术生成的payload就放在sqlmap源码中\xml\payloads文件中,根据探测技术分为6个后缀为.xml的文件,每个xml文件分别存放每种注入技术的payload。