目录

SQLMap概述

SQLMap参数使用

输出详细程度参数 -v

目标参数

请求参数

注入参数

检测参数

技术参数

枚举参数

系统交互式shell


SQLMap概述

  • SQLMap是一款开源的渗透测试工具,可用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器 的权限等操作 SQLMap支持的数据库有:MySQL、Oracle、Microsoft SQL Server、Microsoft Access,IBM DB2、 SQLite等主流数据库 检测类型:union联合查询注入、布尔盲注、时间盲注、报错注入、堆叠注入

SQLMap参数使用

输出详细程度参数 -v

  • -v参数用来指定输出数据的详细程度,一共有七个等级(0--6)
  • 默认为1,可使用-vv代替-v 2

等级

说明

0

只输出Python出错回溯信息、错误和关键信息

1

增加输出普通信息和警告信息

2

增加输出调试信息

3

增加输出已注入的payloads

4

增加输出HTTP请求

5

增加输出HTTP响应头

6

增加输出HTTP响应内容

目标参数

等级

说明

-d

直连数据库

-u

URL,指定需要检测的目标URL

-l

从Burp代理日志文件中解析目标地址

-m

从文本文件中批量获取目标

-r

从文件中读取HTTP请求

--purge

清除历史缓存

--flush-session

清除上次扫描缓存

请求参数

  • 指定连接目标的方式,有以下几种参数

参数        

说明

--method=METHOD

强制使用提供的HTTP方法,如:GET、POST、PUT等

--data=DATA

使用POST方法发送数据,如:--data="id=1&user=admin"

--cookie=COOKIE

指定HTTP cookie

--drop-set-cookie

忽略HTTP响应中的Set-Cookie参数

--user-agent=AGENT

指定HTTP User-Agent

--random-agent

使用随机的HTTP User Agent

--referer=REFERER

指定HTTP Referer

-H HEADER

设置额外的HTTP 头参数,如:-H "X-Forwarded-For:127.0.0.1"

--headers=HEADERS

设置额外的HTTP头参数,必须以换行符分隔

--delay=10

设置每个HTTP请求的延迟秒数

--safe-freq=SAFE

每访问两次给定的合法URL才发送一次测试请求

--batch

会自动选择默认项(Y)

注入参数

  • 用于指定要测试的参数

参数

说明

-p

指定需要测试的参数

--skip=SKIP

指定要跳过的参数

--dbms=DBMS

指定DBMS类型,如:--dbms=MySQL

--os=OS

指定DBMS服务器的操作系统类型

--prefix=PREFIX

注入payload的前缀字符串

--suffix=SUFFIX

注入payload的后缀字符串

--tamper-TAMPER

用给定脚本参数注入数据

检测参数

  • 用于指定检测的等级以及风险参数
  • --level:指定检测级别,共有五个等级,等级越高,检测范围越大(默认为1)
  • level >= 2时会检测cookie是否有注入
  • level >= 3时会检测User-Agent和Referer是否有注入
  • level >= 5时会检测Host是否存在注入漏洞
  • 不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值

参数

说明

--level 1

检测GET和POST

--level 2

增加检测HTTP Cookie

--level 3

增加检测User-Agent和Referer

--level 4

增加检测host

--level 5

增加检测host

        --risk:风险程度,有三个等级(默认为1)

参数

说明

--risk 1

测试大部分的测试语句        

--risk 2

增加基于事件性的测试语句

--risk 3

增加OR语句的sql注入测试

技术参数

  • 以下参数用于调整特定的SQL注入技术的测试方法

参数

说明

--technique=

后面跟使用的SQL注入技术

B

布尔型盲注

T

时间型盲注

U

联合查询注入

S

堆查询注入

E

报错型注入

Q

内联查询注入

--time-sec=TIMESEC

设置延迟注入的时间,默认为5s

--second-order=

设置二阶响应的结果显示页面的URL,该选项用于二阶SQL注入

枚举参数

参数 

说明

-a、--all

获取所有信息、数据

-b、--banner

获取banner,返回数据库的版本号

--current-user

获取当前用户

--current-db

获取当前数据库名

--hostname

获取服务器的主机名

--is-dba

探测当前用户是否为数据库管理员

--users

枚举出所有用户

--passwords

枚举出所有用户的密码哈希

--privileges

枚举出所有用户特权级

--roles

枚举出所有用户角色

--dbs

枚举出所有数据库名

--tables

枚举出数据库中的所有表名

--columns

枚举出指定表中的所有列

--schema

枚举出所有模式

--count

获取数据表的数目

--dump

导出数据表项

--stop 10

只取前10行数据

-D 数据库名

指定要枚举的数据库

-T 数据表名

指定要枚举的数据表

-C 字段名

指定要枚举的字段

--sql-query=QUERY

指定要执行的SQL语句

--sql-shell

调出交互式 SQL shell

系统交互式shell

  • 参数: --os-shell 使用该参数后,就可执行相应的系统命令
  • 使用条件
  • 攻击者需要知道网站的绝对路径(sqlmap中可爆破路径)
  • 用户账号权限为管理员(网站必须是root权限或者为Administrator)
  • GPC为off,php主动转义的功能关闭
  • secure_file_priv为空
  • 原理
  • 通过into outfile 导出文件,利用SQL语句拿到shell权限
  • --os-shell本质是利用into outfile函数将一个可以上传文件的网页(tmpulcjf.php)写入到网站根目录 下,然后利用tmpulcjf.php上传了一个tmpbtrnt.php文件,可以执行系统命令,连接密码为cmd
  • 补充
  • 导入导出的权限在MySQL数据库中是由secure_file_priv参数控制,当这个参数后面为null时,表示不允 许导入导出;如果为具体的文件夹时,表示只允许在这个文件夹下导入导出;如果secure_file_priv参数 后面没有值(为空)时,表示可以在任何文件夹下导入导出
  • 当MySQL版本在5.7以上时,secure_file_priv参数的值默认为null,如果管理员没有修改过该参数,则无 法使用--os-shell