SQLMAP使用


Sqlmap是什么

完全支持MySQLOraclePostgreSQLMicrosoft SQL ServerMicrosoft AccessIBM DB2SQLiteFirebirdSybaseSAP MaxDBHSQLDBInformix等多种数据库管理系统。

完全支持:

  1. 基于布尔的盲注:根据返回页面判断条件真假的注入

  2. 基于时间的盲注:增加注入时间延迟语句,根据页面返回时间判断注入语句是否执行

  3. 基于错误信息的注入:根据返回页面的报错信息判断注入

  4. 基于联合查询的注入:使用union联合查询注入

  5. 基于堆查询的注入:可以同时执行多条语句的注入

在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。

支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。

支持自动识别密码哈希格式并通过字典破解密码哈希。

支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。

支持在数据库管理系统中搜索指定的数据库名、表名或列名

当数据库管理系统是MySQLPostgreSQLMicrosoft SQL Server时支持下载或上传文件。

当数据库管理系统是MySQLPostgreSQLMicrosoft SQL Server时支持执行任意命令并回现标准输出。


Sqlmap全部参数

杂项

显示帮助信息并退出
1
-h,--help
显示详细的帮助信息并退出
1
-hh
显示版本信息并退出
1
--version
输出级别(默认输出级别为1)

0:只显示Pythontracebacks信息、错误信息ERROR和关键信息CRITICAL

1:同时显示普通信息INFO和警告信息WARNING

2:同时显示调试信息DEBUG

3:同时显示注入使用的攻击荷载

4:同时显示HTTP请求

5:同时显示HTTP响应头

6:同时显示HTTP响应体

1
-v VERBOSE(0-6)

目标

直连数据库
1
-d DIRECT
1
2
3
4
5
当数据库管理系统是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等时格式为:
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME

当数据库管理系统是SQLite、Microsoft Access或Firebird等时格式为:
DBMS://DATABASE_FILEPATH
指定一个URL作为目标
1
-u URL,--url=URL
从Burp或WebScarab代理日志文件中解析目标

该参数后跟一个表示日志文件的路径

1
-l LOGFILE
从远程站点地图(.xml)文件中解析目标
1
-x SITEMAPURL
扫描文本文件中给出的多个目标
1
-m BULKFILE
从文件加载HTTP请求
1
-r REQUESTFILE
将Google搜索结果作为攻击目标

Sqlmap能自动获取Google搜索的前一百个结果,对其中有GET参数的URL进行注入测试

1
-g GOOGLEDORK
从配置文件中加载选项

Sqlmap会解析该配置文件,按照该配置文件的配置执行动作。配置文件中可以指定攻击目标,实际上除了攻击目标外,配置文件还可以指定各种参数的值

1
-c CONFIGFILE

请求

强制使用给定的HTTP方法(例如PUT)
1
--method=METHOD
POST数据

该参数指定的数据会被作为POST数据提交

1
--data=DATA
指定参数分隔符

默认地以&作为分隔符

1
--param-del=PARA..
HTTP Cookie头的值
1
--cookie=COOKIE
指定用于分割cookie值的字符
1
--cookie-del=COO..
从文件中载入Netscape或wget格式的cookie
1
--load-cookies=L..
Sqlmap忽略响应头中的“Set-Cookie”
1
--drop-set-cookie
指定一个User-Agent值
1
--user-agent=AGENT
使用随机选择的HTTP User-Agent头值
1
--random-agent
指定HTTP头中的Host值
1
--host=HOST
指定HTTP头中的Referer值

Sqlmap发送的HTTP请求头部默认无Referer字段

1
--referer=REFERER
指定一个额外的头
1
-H HEADER
指定多个额外的头

若添加多个字段,用\n分隔

1
--headers=HEADERS
指定HTTP认证类型(Basic, Digest, NTLM , PKI)
1
--auth-type=AUTH..
指定HTTP身份验证凭证

格式是username:password

1
--auth-cred=AUTH..
基于证书的身份认证

Web服务器要求客户端提供证书则可以使用此参数指定一个PEM格式的证书文件

1
--auth-file=AUTH..
忽略HTTP错误代码
1
2
3
--ignore-code=IG..

--ignore-code=401
忽略系统默认代理设置
1
--ignore-proxy
忽略重定向的尝试
1
--ignore-redirects
忽略连接超时
1
--ignore-timeouts
设置一个HTTP(S)代理连接到目标URL

格式是http(s)://url:port

1
--proxy=PROXY
指定代理身份验证凭证

格式是username:password

1
--proxy-cred=PRO..
从文件中加载代理列表
1
--proxy-file=PRO..
使用tor匿名网络
1
--tor
设置Tor代理端口而不是默认
1
--tor-port=TORPORT
设置Tor代理类型(HTTP、SOCKS4或SOCKS5)

默认SOCKS5类型

1
--tor-type=TORTYPE
检查Tor是否正确使用
1
--check-tor
每次HTTP请求之间添加延迟
1
--delay=DELAY
设置超时时间

默认30秒

1
--timeout=TIMEOUT
设置超时后最大重试次数

默认3次

1
--retries=RETRIES
随机化参数值

随机生成每次HTTP请求中参数的值,值的类型和长度依照于原始值

1
--randomize=RPARAM
避免错误请求过多而被屏蔽

有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的测试往往会产生大量错误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。

Sqlmap不会对安全URL进行任何注入测试

  1. 设置隔一会就访问一下的安全URL

    1
    --safe-url=SAFEURL
  2. 设置访问安全URL时携带的POST数据

    1
    --safe-post=SAFEURL
  3. 从文件中载入安全HTTP请求

    1
    --safe-req=SAFEURL
  4. 每次测试请求之后都会访问一下的安全URL

    1
    --safe-freq=SAFEURL
关闭URL编码

Sqlmap默认会对URL进行URL编码

1
--skip-urlencode

用于指定包含token的隐藏字段名
1
--csrf-token=CSRFURL
从任意的URL中回收token值
1
--csrf-url=CSRFURL
强制使用SSL
1
--force-ssl
使用HTTP参数污染法

HTTP参数污染是绕过WAF/IPS/IDS的一种技术

1
--hpp
在每次请求前执行特定Python代码
1
--eval=EVALCODE

优化

打开所有优化开关
1
2
3
4
5
6
-o

添加此参数相当于同时添加下列三个优化参数
-keep-alive
-null-connection
-threads=3
预测常见的查询输出
1
--predict-output
使用持久HTTP(s)连接

该参数与-proxy矛盾

1
--keep-alive
HTTP空连接

直接获得HTTP响应的大小而不用获得HTTP响应体

这在布尔型盲注中可以节约很大的带宽。当然这一技术是需要服务器端支持的

--text-only矛盾

1
--null-connection
HTTP(s)最大并发数

默认为1

1
--threads=THREADS

注入

指定一个以逗号分隔的,要测试的参数列表

该列表中的参数不受level限制

1
-p TESTPARAMETER
跳过指定的测试参数
1
--skip=SKIP
跳过那些看起来不动态的测试参数
1
--skip-static
从测试中排除参数
1
--param-exclude=..
指定数据库管理系统
1
--dbms=DBMS
指定DBMS身份验证凭据

格式:user:password

1
--dbms-cred=DBMS
指定运行数据库管理系统的操作系统
1
--os=OS
生成无效参数值时强制使用大数
1
--invalid-bignum
生成无效参数值时强制使用逻辑操作符
1
--invalid-logical
生成无效参数值时强制使用字符串
1
--invalid-string
关闭payload转换
1
--no-cast
关闭字符串编码
1
--no-escape
设置payload的前置字符串
1
--prefix=PREFIX
设置payload的后缀字符串
1
--suffix=SUFFIX
使用给定的脚本来修改注入数据

除了用CHAR()编码字符串外Sqlmap没有对payload进行任何混淆。

该参数用于对payload进行混淆以绕过IPSWAF

该参数后跟一个tamper脚本的名字。

多个tamper脚本之间用空格隔开。

1
--tamper=TAMPER

检测

指定检测级别,1-5级

默认为1级

检测级别不仅会影响payload的使用,还会影响注入点的检测,GETPOST参数是一直会被检测的,
检测级别大于等于2时会检测cookie是否有注入,检测级别大于等于3时会检测User-AgentReferer是否有注入。

1
--level=LEVEL
指定风险等级,1-3级

默认为1级

风险等级2添加了基于时间的注入测试,等级3添加了OR测试

1
--risk=RISK
页面对比

默认情况下在布尔型注入中Sqlmap通过比较返回页面内容来判断TrueFalse

  1. 指定代表True的页面会包含而代表False的页面不会包含的字符串以供Sqlmap判断TrueFalse

    1
    --string=STRING
  2. 指定一个正则表达式去匹配这样的字符串

    1
    --regexp=REGEXP
  3. 指出代表False的页面会包含而代表True的页面不会包含的字符串以供Sqlmap判断TrueFalse

    1
    --not-string=NOTSTRING
  4. 指定被认为是True时的HTTP代码

    1
    --code=CODE
  5. 若是HTTP响应体中有许多诸如JavaScript之类的活动内容,可以使用此参数让Sqlmap只专注于纯文本内容。

    1
    --text-only
  6. 就可以使用此参数让Sqlmap依据title来判断TrueFalse

    1
    --titles

技术

指定检测注入时所用技术

默认情况下Sqlmap会使用自己支持的全部技术进行检测(BEUSTQ

此参数后跟表示检测技术的大写字母,其值为B、E、U、S、T或Q

  1. B:Boolean-based blind(布尔型注入)
  2. E:Error-based(报错型注入)
  3. U:Union query-based(可联合查询注入)
  4. S:Stacked queries(可多语句查询注入)
  5. T:Time-based blind(基于时间延迟注入)
  6. Q:Inline queries(嵌套查询注入)
1
--technique=TECH
基于时间延迟注入中延时设置

默认为5秒

1
--time-sec=TIMESEC
联合查询注入中列数设置

在进行联合查询注入时,Sqlmap会自动检测列数,范围是1到10。

level值较高时列数检测范围的上限会扩大到50。

1
--union-cols=UCOLS
联合查询注入中字符设置

默认情况下Sqlmap进行联合查询注入时使用空字符(NULL)。

level值较高时Sqlmap会生成随机数用于联合查询注入。因为有时使用空字符注入会失败而使用随机数会成功。

1
--union-char=UCHAR
联合查询注入中表名设置
1
--union-from=UFROM
DNS泄露攻击
1
--dns-domain=DNS..
二阶注入攻击

有时注入结果显示在别的页面,此时需要用此参数指明显示注入结果的页面,该参数后跟一个URL

1
--second-order=S..

指纹

默认Sqlmap会自动对注入目标进行数据库管理系统指纹识别。

执行更广泛的数据库管理系统指纹识别可以添加此参数

1
-f, --fingerprint

枚举

列举所有可访问的数据
1
-a, --all
列举数据库管理系统信息
1
-b, --banner
列举当前数据库用户
1
--current-user
列举当前数据库
1
--current-db
列举服务器主机名
1
--hostname
检测当前管理员用户是否是管理员

若是管理员则返回True,否则返回False

1
--is-dba
列举数据库管理系统中的用户
1
--users
列举并破解数据库管理系统用户密码Hash值
1
--passwords
列举数据库管理系统的用户权限
1
--privileges
列举数据库管理系统的用户角色
1
--roles
列举数据库管理系统中的所有数据库
1
--dbs
列举-D指定数据库的所有表
1
--tables
列举-D指定数据库-T指定表的所有列
1
--columns
列举数据库管理系统的模式
1
--schema
列举表中数据条数
1
--count
列举表中数据

用参数-D指定数据库,用参数-T指定数据表,用参数-C指定目标列

1
--dump
列举所有数据库所有表中所有数据
1
--dump-all
在数据库、表、列中搜索
1
2
3
4
5
6
--search

参数“–search”要和下列参数之一配合使用:
-C:后跟以逗号分隔的列名,在整个数据库管理系统中搜索
-T:后跟以逗号分隔的表名,在整个数据库管理系统中搜索
-D:后跟以逗号分隔的库名,在整个数据库管理系统中搜索
列举数据库管理系统中的注释
1
--comments
在列举表时排除数据库管理系统中的系统数据库
1
--exclude-sysdbs
主列名称
1
--pivot-column=P..
限制列举的数据

此参数会被Sqlmap转换成WHERE子句

1
--where=DUMPWHERE
列举指定开始位置后的数据(不包含指定位置)
1
--start=LIMITSTART
列举指定结束位置前的数据(包含指定位置)
1
--stop=LIMITSTOP
第一个查询输出字字符
1
--first=FIRSTCHAR
最后一个查询输出字字符
1
--last=LASTCHAR
指定要执行的SQL语句
1
--sql-query=QUERY
提供一个交互式的SQL语句执行环境

支持Tab键补全和命令历史记录

1
--sql-shell
从给定文件执行SQL语句
1
--sql-file=SQLFILE

用参数-D指定数据库,用参数-T指定数据表,用参数-C指定目标列,用参数-U指定数据库用户


暴力破解

检查公共表的存在
1
--common-tables
检查公共列的存在
1
--common-columns

用户定义函数注入(UDF注入)

注入自定义用户定义函数
1
--udf-inject
指定共享库的本地路径
1
--shared-lib=SHLIB

文件系统访问

读取文件
1
--file-read=RFILE
写入文件
1
--file-write=WFILE
写入文件至绝对路径
1
--file-dest=DFILE

操作系统访问

执行操作系统命令
1
--os-cmd=OSCMD
模拟一个可以执行任意命令的系统shell

可以用Tab键补全,支持历史记录

1
--os-shell
模拟一个OOB shell,Meterpreter或VNC
1
--os-pwn
一次点击提示用于OOB shell,Meterpreter或VNC
1
--os-smbrelay
存储过程缓冲区溢出
1
--os-bof
数据库过程用户权限升级
1
--priv-esc
指定安装Metasploit框架的本地路径
1
--msf-path=MSFPATH
指定临时文件目录的远程绝对路径
1
--tmp-path=TMPPATH

Windows注册表访问

阅读Windows注册表的键值
1
--reg-read
写入一个Windows注册表键值数据
1
--reg-add
删除一个Windows注册表的键值
1
--reg-del
指定Windows注册表键值的路径
1
--reg-key=REGKEY
指定Windows注册表键值的键
1
--reg-value=REGVAL
指定Windows注册表键值的值
1
--reg-data=REGDATA
指定Windows注册表键值的值的数据类型
1
--reg-type=REGTYPE

通用选项

从SQLite文件中载入Sqlmap会话

Sqlmap会自动地为每一个目标创建长久保存的会话SQLite文件,该文件统一存储在特定目录中,其中保存着恢复会话所需的所有数据。

1
-s SESSIONFILE
将HTTP(S)流量记录到日志文件中
1
-t TRAFFICFILE
非交互模式

使用该参数可以让Sqlmap以非交互模式运行,所有要求的输入都会取默认值。

1
--batch
指定结果字段具有二进制值
1
--binary-fields=..
在评估目标之前检查互联网连接
1
--check-internet
从目标URL开始爬取目标站点
1
--crawl=CRAWLDEPTH
排除不想爬取的URL

支持正则

1
--crawl-exclude=..
设置输出CSV文件中的分隔符

默认以,分隔

1
--csv-del=CSVDEL
设置字符编码
1
--charset=CHARSET
设置数据输出格式

支持CSV (默认), HTMLSQLITE

1
--dump-format=DU..
设置用于数据检索的字符编码
1
--encoding=ENCOD..
显示估计的完成时间
1
--eta
为当前目标刷新会话文件

以避免Sqlmap默认的缓存机制可能造成的一些问题

1
--flush-session
测试表单数据是否存在注入点
1
--forms
忽略会话文件中的查询结果重新执行查询
1
--fresh-queries
将所有HTTP流量记录到一个HAR文件中
1
--har=HARFILE
对返回结果以十六进制返回
1
--hex
指定输出目录路径
1
--output-dir=OUT..
从响应中解析DBMS的错误信息
1
--parse-errors
保存选项到配置文件中

该文件可编辑并且可以使用参数-c加载

配置文件是INI格式的

1
--save=SAVECONFIG
从提供的代理日志中过滤目标
1
--scope=SCOPE
通过关键词选择使用的payload或titles
1
--test-filter=TE..
通过某关键词不使用某些payload或titles
1
--test-skip=TEST..
升级sqlmap
1
--update

杂项

使用简写
1
-z MNEMONICS
在成功检测到注入点时报警

后跟一个用于发出警报的命令

1
--alert=ALERT
设置问题的回答

使用–batch以非交互模式运行时所有问题都以按默认值作为回答。有时不想以默认值为答案又想使用非交互模式,此时可以使用此参数对特定问题进行回答,若回答多个问题,以逗号分隔。

1
--answers=ANSWERS
在成功检测到注入点时发出“嘟”声
1
--beep
清除Sqlmap创建的临时表和自定义函数
1
--cleanup
检查依赖

用此参数可以检查依赖的第三方库是否安装

1
--dependencies
关闭彩色输出
1
--disable-coloring
指定使用Google dork结果的某页
1
--gpage=GOOGLEPAGE
彻底检测WAF/IPS/IDS
1
--identify-waf
模仿智能手机
1
--mobile
离线模式(仅仅使用会话数据)

Sqlmap将仅仅使用以前存储的会话数据做测试而不向目标发送任何数据包

1
--offline
从输出目录中安全移除所有内容
1
--purge-output
对waf/ip/ids保护,跳过启发式检测

默认地Sqlmap会发送虚假的SQL注入playload以试探目标是否有保护措施

1
--skip-waf
快速扫描

目的是尽快找出其中存在的某些注入点而有所遗漏也没有关系时可以使用此参数进行正向启发式扫描。此时只有让数据库管理系统报错的参数才会做进一步测试,其余URL均被跳过。

1
--smart
交互式Sqlmap Shell

打开一个交互式的Sqlmap Shell,支持历史记录

1
--sqlmap-shell
指定用于存储临时文件的本地目录
1
--tmp-dir=TMPDIR
指定Web服务器文档根目录
1
--web-root=WEBROOT
为初学者准备的简单向导
1
--wizard

Sqlmap常用脚本

apostrophemask.py

将引号替换为UTF-8,用于过滤单引号的情况

base64encode.py

替换为base64编码

multiplespaces.py

围绕SQL关键字添加多个空格

space2plus.py

+替换空格

nonrecursivereplacement.py

用双重叠写语句替换预定义的SQL关键字

space2randomblank.py

将空格替换为其他有效字符

unionalltounion.py

union all select替换为union select

securesphere.py

追加特制的字符串

space2hash.py

将空格替换为#,并添加一个随机字符串和换行符

space2mssqlblank.py

针对mssql数据库,将空格替换为其他空符号

space2mssqlhash.py

针对mssql数据库,将空格替换为#,并添加一个换行符

between.py

not between 0 and 替换>,用between and替换=

percentage.py

ASP中,允许在每个字符前添加一个%

sp_password.py

DBMS日志的自动模糊处理的payload中追加sp_password

charencode.py

对给定的payload全部字符使用URL编码(不处理已经编码的字符)

randomcase.py

随机大小写

charunicodeencode.py

字符串unicode编码

space2comment.py

将空格替换为/**/

equaltolike.py

=替换为like

greatest.py

用于绕过对>的过滤,用greatest替换>

ifnull2ifisnull.py

用于绕过对ifnull的过滤,替换类似ifnull(A,B)if(isnull(A),B,A)

modsecurityversioned.py

过滤空格,使用mysql内联注释的方式进行注入

space2mysqlblank.py

针对mysql,将空格替换为其他空白符号

modsecurityzeroversioned.py

使用mysql内联注释的方式注入

space2mysqldash.py

将空格替换为--,并添加一个换行符

bluecoat.py

SQL语句之后用有效的随机空白符替换空格符,随后用like替换=

versionedkeywords.py

注释绕过

halfversionedmorekeywords.py

用于数据库为mysql时绕过防火墙,在每个关键字之前添加mysql版本的注释

space2morehash.py

将空格替换为#,并添加一个随机字符串和换行符

apostrophenullencode.py

用非法双字节unicode字符替换单引号

appendnullbyte.py

在有效payload的结束位置加载零字节字符编码

chardoubleencode.py

对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)

unmagicquotes.py

用一个多字节组合(%bf%27)和末尾通用注释一起替换空格

randomcomments.py

/**/分割SQL关键字


参考连接

https://blog.csdn.net/wn314/article/details/78872828

---------------The End---------------
0%