工具学习-SQLMAP

一、介绍

Sqlmap 是一款使用 Python 语言开发的开源工具。它有着极其强大的特性:跨平台;支持多种数据库(涵盖了所有主流数据库);可以检测并利用 sql 漏洞,可以手动或自动化地进行SQL 注入,甚至可以访问底层文件系统。

特点:

Sqlmap支持采用五种独特的 SQL 注入技术,分别是:
基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入,可以使用 union 的情况下的注入。
堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap 支持多种数据库:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access,IBM DB2, SQLite, Firebird, Sybase 和 SAP MaxDB等。

二、使用教程

目标选择-Target

Sqlmap支持多种导入目标的方式:

-d

直接连接到数据库,目前仅支持MySQL和Access数据库。MySQL数据库连接需要安装 pip install pymysql模块。可以测试远程数据库是否可以外链或者配合其他参数一起使用。

-u

常用选项:指定URL,不带其他参数一般用于GET型参数注入,会自动检测当前GET请求里的全部参数是否存在注入。

-m

从文本文件中读取目标,进行批量扫描。

-r

从文件中加载HTTP请求,一般用于非GET型注入。如果不指定参数,默认检测GET和POST参数。

请求选项-Request

这些选项可以用来指定如何连接到目标 URL。

--data

通过POST方式发送数据,一般用于检测POST注入。

--cookie

指定Cookie数据。可用于COOKIE注入或者是需要cookie才能访问的。

--user-agent

指定HTTP的user-agent头信息,有些站点比如具有手机浏览器标识才能访问的,这时就可以指定。

sqlmap.py -u "127.0.0.1/index.php" --data="id=1" --user-agent="Android / Firefox 29: Mozilla/5.0 (Android; Mobile; rv:29.0) Gecko/29.0 Firefox/29.0"

--random-agent

使用随机选定的 HTTP User-Agent 头,使用随机的浏览器头有可能能绕过某些限制。

--proxy

使用代理连接目标 URL,可用于IP限制或者是配合Burp一起使用。

以上是常用的指定发送请求选项,还有其他如指定HOST、指定header、指定referer等,如果参数太多,推荐使用-r选项,从文本中加载HTTP请求数据。

注入选项-Injection

这些选项可以用来指定对哪些参数测试,提供一般的注入方式和可选可修改的脚本注入。

-p

指定要测试的参数,这样就不用检测全部参数了,节约时间。

sqlmap.py -u "127.0.0.1/index.php?id=1" --data="name=root&age=3" -p "id"

--skip

跳过指定的参数,如果参数过多,能明确排除某些参数。

sqlmap.py -u "127.0.0.1/index.php?id=1" --data="name=root&age=3" -skip="id,name"

--dbms

强制指定后端的 DBMS,指定数据库后,可节约时间排除其他数据库测试语句。

sqlmap.py -u "127.0.0.1/index.php" --data="id=1" --dbms="mysql"

--prefix

注入有效载荷前缀字符,可用于闭合SQL语句。

sqlmap.py -u "127.0.0.1/index.php" --data="id=1" --prefix=")'" -p "id"

--suffix

注入有效负载后缀字符串,可用于闭合SQL语句。

--tamper

使用给定的脚本修改注入的数据,Sqlmap内置了几十个插件。插件的使用后期再介绍使用。

序号 脚本名称 注释
1 0x2char 将每个编码后的字符转换为等价表达
2 apostrophemask 单引号替换为Utf8字符
3 apostrophenullencode 替换双引号为%00%27
4 appendnullbyte 有效代码后添加%00
5 base64encode 使用base64编码
6 between 比较符替换为between
7 bluecoat 空格替换为随机空白字符,等号替换为like
8 chardoubleencode 双url编码
9 charencode 将url编码
10 charunicodeencode 使用unicode编码
11 charunicodeescape 以指定的payload反向编码未编码的字符
12 commalesslimit 改变limit语句的写法
13 commalessmid 改变mid语句的写法
14 commentbeforeparentheses 在括号前加内联注释
15 concat2concatws 替换CONCAT为CONCAT_WS
16 equaltolike 等号替换为like
17 escapequotes 双引号替换为\\\\
18 greatest 大于号替换为greatest
19 halfversionedmorekeywords 在每个关键字前加注释
20 htmlencode html编码所有非字母和数字的字符
21 ifnull2casewhenisnull 改变ifnull语句的写法
22 ifnull2ifisnull 替换ifnull为if(isnull(A))
23 informationschemacomment 标示符后添加注释
24 least 替换大于号为least
25 lowercase 全部替换为小写值
26 modsecurityversioned 空格替换为查询版本的注释
27 modsecurityzeroversioned 添加完整的查询版本的注释
28 multiplespaces 添加多个空格
29 nonrecursivereplacement 替换预定义的关键字
30 overlongutf8 将所有字符转义为utf8
31 overlongutf8more 以指定的payload转换所有字符
32 percentage 每个字符前添加%
33 plus2concat 将加号替换为concat函数
34 plus2fnconcat 将加号替换为ODBC函数{fn CONCAT()}
35 randomcase 字符大小写随机替换
36 randomcomments /**/分割关键字
37 securesphere 添加某字符串
38 sp_password 追加sp_password字符串
39 space2comment 空格替换为/**/
40 space2dash 空格替换为–加随机字符
41 space2hash 空格替换为#加随机字符
42 space2morecomment 空格替换为/**_**/
43 space2morehash 空格替换为#加随机字符及换行符
44 space2mssqlblank 空格替换为其他空符号
45 space2mssqlhash 空格替换为%23%0A
46 space2mysqlblank 空格替换为其他空白符号
47 space2mysqldash 空格替换为–%0A
48 space2plus 空格替换为加号
49 space2randomblank 空格替换为备选字符集中的随机字符
50 symboliclogical AND和OR替换为&&和||
51 unionalltounion union all select替换为union select
52 unmagicquotes 宽字符绕过GPC
53 uppercase 全部替换为大写值
54 varnish 添加HTTP头
55 versionedkeywords 用注释封装每个非函数的关键字
56 versionedmorekeywords 使用注释绕过
57 xforwardedfor 添加伪造的HTTP头

探测选项-Detection

这些选项可用于自定义检测阶段

--level

测试等级(1-5, default 1)。

枚举-Enumeration

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的 SQL 语句。

-b

获取 DBMS 标识。

--current-user

获取 DBMS 当前用户

--current-db

获取 DBMS 当前数据库

--hostname

获取 DBMS 当前主机名

--is-dba

检测当前用户是否是 DBA

--users

枚举 DBMS 用户

--passwords

枚举 DBMS 用户密码 hash

--dbs

枚举 DBMS 数据库

--tables

枚举 DBMS 数据库中的表

--columns

枚举 DBMS 数据库表的列

--count

检索表的项目数。如果只想获取表中的数据个数而不是具体的内容可以使用这个参数。

--dump

转储 DBMS 数据库表

--dump-all

转储 DBMS 所有数据库表

-D

指定要枚举的 DBMS 数据库名

-T

指定要枚举的 DBMS 表

-C

指定要枚举的 DBMS 列

--sql-query=QUERY

要执行的 SQL 语句

--sql-shell

交互式 SQL shell

访问文件系统

这些选项可以被用来访问后端数据库管理系统的底层文件系统

--file-read=RFILE

从后端的 DBMS 文件系统读取文件

--file-write=WFILE

编辑后端 DBMS 文件系统中的文件

--file-dest=DFILE

后端 DBMS 写入文件的绝对路径

操作系统访问

--os-cmd=OSCMD

执行操作系统命令

--os-shell

提示使用交互式操作系统 shell

其他详情命令可参考此思维导图:

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82813177