SQLMAP

SQLMAP 简介

sqlmap支持五种不同的注入模式:

  • 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

  • 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

  • 联合查询注入,可以使用union的情况下的注入。

  • 堆查询注入,可以同时执行多条语句的执行时的注入。

SQLMAP支持的数据库

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

参数

1. 指定目标

2. 请求

COOKIE :

参数:–cookie,–load-cookies,–drop-set-cookie 这个参数在以下两个方面很有用:

  1. web应用需要登陆的时候。

  2. 你想要在这些头参数中测试SQL注入时。

可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。 在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。 如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。 当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。

3. 注入

4. 探测

5. 注入技术

6. 列数据

7. 爆破

8. 文件&命令操作

9. 对 Windows 注册表操作

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前web应用支持堆查询。 当然,当前连接数据库的用户也需要有权限操作注册表。

10. 常规参数

11. 其他参数

  1. -v 参数:

  2. 只显示python错误以及严重的信息

  3. 同时显示基本信息和警告信息。(默认)

  4. 同时显示debug信息

  5. 同时显示注入的payload

  6. 同时显示HTTP请求

  7. 同时显示HTTP响应头

  8. 同时显示HTTP响应页面

Tamper 脚本

tamper 脚本可以用来对 sqlmap 的 sql 查询语句进行一次处理,让其绕过过滤,tamper 脚本在 sqlmap 安装目录的 tamper 目录下

1. tamper 适用的数据库类型 & 版本

TAMPER
MySQL
MSSQL
Oracle
PostgreSQL

apostrophemask

*

*

*

*

apostrophenullencode

-

-

-

-

appendnullbyte

*

*

*

*

base64encode

4,5,5.5

2005

10g

-

between

5.1

-

-

-

bluecoat

*

*

*

*

apostrophemask

9.0.3

20002005

-

9.3

charunicodeencode

4,5.0 and 5.5

2005

10g

8.3,8.4,9.0

charencode

*

-

-

-

commalessmid

*

-

-

-

concat2concatws

*

*

*

*

equaltolike

*

*

*

*

greatest

< 5.1

-

-

-

halfversionedmorekeywords

5.0 and 5.5

-

-

-

ifnull2ifisnull

*

*

*

*

informationschemacomment

4,5.0,5.5

2005

10g

8.3,8.4,9.0

lowercase

5

-

-

-

modsecurityversioned

5

-

-

-

modsecurityzeroversioned

*

*

*

*

multiplespaces

*

*

*

*

nonrecursivereplacement

*

*

*

*

overlongutf8

5.1.56,5.5.11

2000, 2005

N/A

9

percentage

4, 5.0,5.5

2005

10g

8.3,8.4,9.0

randomcase

*

*

*

*

randomcomments

*

*

*

*

securesphere

4,5.0,5.5

2005

10g

8.3,8.4,9.0

space2comment

-

-

-

-

space2dash

4.0,5.0

-

-

-

space2hash

>= 5.1.13

-

-

-

space2morehash

-

2000, 2005

-

-

space2mssqlblank

*

*

-

-

space2mssqlhash

*

*

*

*

space2plus

4,5.0,5.5

2005

10g

8.3,8.4,9.0

space2randomblank

-

*

-

-

sp_password

*

*

*

*

symboliclogical

*

*

*

*

unionalltounion

*

*

*

*

unmagicquotes

4, 5.0,5.5

2005

10g

8.3,8.4,9.0

uppercase

*

*

*

*

varnish

*

-

-

-

versionedkeywords

>=5.1.13

-

-

-

versionedmorekeywords

*

*

*

*

xforwardedfor

*

*

*

*

2. 自带tamper介绍

3. 编写tamper

先来看一个简单的 tamper:apostrophemask.py

这个 tamper 非常的简单,写的话参考这个就可以了,先来分析这里边有什么元素

  • import部分

  • __priority__ 属性

  • dependencies函数

  • tamper函数以及用户自定义的函数

1. import 部分

可以导入sqlmap的内部库,sqlmap 为我们提供了很多封装好的函数和数据类型,比如上面的的PRIORITY就来源于sqlmap/lib/core/enums.py

2. priority

定义当前 tamper 的优先级,用于有多个tamper脚本的情况,有以下参数

3. dependencies

函数声明该脚本适用/不适用的范围,可以为空,比如以下代码

数据库有以下名称,在lib\core\enums.py可以看到全部

4. tamper函数

主要功能实现的函数,其中 payload 参数就是原始的 sqlmap的原始注入payload,我们要实现绕过,一般就是针对这个 payload 的修改

比如双写绕过的 payload

第二个参数:**kwargs中包含了 http 头的数据,可以从kwargs中取出headers数组在进行更改

比如将 http 头中的 xff 头变为随机 ip

最后更新于

这有帮助吗?