sqlmap使用手册

0x01 前言

很多人会思考个概念使用工具去入侵机器?脚本小子?不,使用工具是对技术和开发者项工具的人的尊重,而脚本小子是并不知道什么原理就去拿工具去扫描。
sqlmap——->官方网站
是由python编写的开源自动化sql检测和利用工具。本文章是sqlmap使用总结和知识回顾

工作模式

sql执行操作后:

1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,做相应的操作

特点

  • MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB 等数据库均支持
  • 支持五种不同的注入模式:

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

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

  • 支持脱库操作(用户可自行选择)
  • 支持上传下载文件和命令执行(mysql,postgresql,sql server)

sqlmap使用

sql执行包括

  • Target(目标)
  • Request(请求)
  • Optimization(优化)
  • Injection(注入)
  • Detection(检测)
  • Techniques(技巧)
  • Fingerprint(指纹)
  • Enumeration(枚举)
  • Brute force(暴力破解)
  • User-defined function injection(用户自定义函数注入)
  • File system access(访问文件系统)
  • Operating system access(操作系统访问)
  • Windows注册表访问
  • General(一般)和杂项:

Target(目标)

参数: –url -u

格式:http(s)://targeturl[:port]/[…]
例如:python sqlmap.py -u”http://www.baidu.com/?id=1"

参数: -m -l

-m获取多个扫描目标,sqlmap会一个个检测。
文件格式如:

www.baidu.com?id=1
www.sougou.com?id=2
www.xx.com?id=3、

-l从Burp或WebScarab代理的日志中解析目标(包括post,cookie)

参数:-d

直接连接数据库
使用参数“-d”直接连接数据库,该参数后跟一个表示数据库的字符串,该字符串有以下两种格式:

(1).当数据库管理系统是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等时格式为:

DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME

(2).当数据库管理系统是SQLite、Microsoft Access或Firebird等时格式为:

DBMS://DATABASE_FILEPATH

我用如下命令连接装在本机上的Mysql:

python sqlmap.py -d “mysql://root:root@127.0.0.1:3306/DISSchool”

却出现了错误,错误为:

[CRITICAL] sqlmap requires ‘python-pymysql’ third-party library in order to directly connect to the DBMS ‘MySQL’. You can download it from ‘https://github.com/petehunt/PyMySQL/'. Alternative is to use a package ‘python-sqlalchemy’ with support for dialect ‘mysql’ installed

意思是我没有安装Python连接Mysql用的第三方库python-pymysql。虽然我安装了python-mysqldb可以使Python连接Mysql,但显然Sqlmap使用的是python-pymysql而不是python-mysqldb。使用如下命令安装python-pymysql:

git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
sudo python setup.py install

安装好python-pymysql后再执行命令:

python sqlmap.py -d “mysql://root:root@127.0.0.1:3306/DISSchool”

这次没有报错,成功的连接到了数据库。只是除了检测数据库确实是Mysql版本号大于等于5.0.0之外便什么都没有做。让Sqlmap做点什么需要用其他参数指定,这些参数我们稍晚些再学习。

参数: -r

sqlmap可以从文本获取http请求头。有的请求需要加载cookie,post数据,有些waf,阿里云会根据sql请求头(User-agent: sqlmap/1.3#stable (http://sqlmap.org))而封ip,这样加载可以通过一些检测和跳过设置cookie
如:

POST /vuln.php HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0
Cookie:BAIDUID=2FF9C5F75287AE0C94B0E3E9C8FE
id=1

参数:-g

-g 处理Google的结果作为目标URL

python sqlmap.py -g “inurl:\”.php?id=1\””

参数:-c

CONFIGFILE 从配置文件中加载选项,需指定文件如sqlmap.conf,sqlmap会自动解析该配置文件,按照配置文件配置执行动作,除了指定攻击目标还支持,指定对应目标的各种参数(格式如安装目录中有一个名为 sqlmap.conf 的文件)

Request(请求)

在http请求阶段,往往在不同网站不同位置要求携带不同参数(refer,user-agent,cookie,post),只有携带要求的参数才能发起合法的请求。所以我们要根据目标网站需要而设定请求细节。

参数:–data,–param-del

此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。

python sqlmap.py -u “http://www.baidu.com/1.php" –data=”id=1”

–param-del当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。

python sqlmap.py -u “http://www.baidu.com/1.php" –data=”query=x;id=1” –param-del=”;”

有两种情况需要cookie:

  • 注入的界面需要登录才能获取
  • cookie是否存在注入

可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。
load-cookie从文件读取cookie
如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。
当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数
post参数默认分隔符;,指定分隔符–cookie-del

python sqlmap.py -u “http://www.baidu.com/user.php" --cookie “JSESSIONID=E5D6C8C81;NAME=werner;”

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

默认sqlmap请求头为如下,这种可能会被waf检测直接封ip

User-agent: sqlmap/1.3#stable

–user-agent用户指定请求头
–random-agnet参数来随机的从./txt/user-agents.txt中获取
当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

参数:–referer

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

参数:–headers

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

参数:–delay

过于频繁地发送请求可能会被网站察觉或其他后果,严重者可能服务器崩溃。
使用参数“–delay”来指定 HTTP 请求之间的延迟,单位为秒,类型是浮点数,如“–delay 1.5”表示延迟 1.5 秒。默认是没有延迟的

参数:–timeout

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

参数:–retries

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

参数:–randomize

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

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

有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行

1、–safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。
2、–safe-post: 访问安全 URL 时携带的 POST 数据
3、–safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。
4、–safe-req: 从文件中载入安全 HTTP 请求

参数:–skip-urlencode

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

参数:–csrf-token 和–csrf-url

现在有很多网站通过在表单中添加值为随机生成的 token 的隐藏字段来防止 CSRF 攻击,Sqlmap 会自动识别出这种保护方式并绕过。但自动识别有可能失效,此时就要用到这两个参数。

  • –csrf-token 用于指定包含 token 的隐藏字段名,若这个字段名不是常见的防止 CSRF 攻击的字段名 Sqlmap 可能不能自动识别出,需要手动指定。如 Django 中该字段名为“csrfmiddlewaretoken”,明显与 CSRF 攻击有关。
  • –csrf-url 用于从任意的 URL 中回收 token 值。若最初有漏洞的目标 URL 中没有包含 token 值而又要求在其他地址提取 token 值时该参数就很有用

参数:–eval

有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求

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参数的值

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

这些参数可以用来登陆HTTP的认证保护支持三种方式:
1、Basic
2、Digest
3、NTLM
–auth-cred用于给出身份认证的凭证,格式是“username:password”。

python sqlmap.py -u “http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" –auth-type Basic –auth-cred “testuser:testpass”

参数:–proxy,–proxy-cred和–ignore-proxy

使用–proxy代理是格式为:http://url:port。
当HTTP(S)代理需要认证是可以使用–proxy-cred参数:username:password。
–ignore-proxy拒绝使用本地局域网的HTTP(S)代理

参数:–auth-cert
Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file。
key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件

参数:–ignore-401

使用该参数忽略 401 错误(未认证

参数:–tor、–tor-type、–tor-port 和–check-tor

安装类似 Privoxy 这样的软件按照Tor 的安装指导配置一个 Tor 客户端。设置好后使用参数“–tor”让 Sqlmap 自动设置使用 Tor 代理
如果想要手动指定 Tor 的类型和端口可以使用参数“–tor-type”和“–tor-port”
如果要求高度的匿名性可以使用参数“–check-tor”,加上该参数后 Sqlmap 会确保所有流量都走 Tor 代理,若 Tor 代理失效,Sqlmap 会发出警告并退出。检测方法是访问Are you using Tor?

参数:–force-ssl

强制使用 SSL

Optimization(优化)

可用于优化SqlMap的性能

参数:-o

开启所有优化开关,添加此参数相当于同时添加下列三个优化参数:
–keep-alive
–null-connection
–threads=3

参数:–keep-alive

该参数让 Sqlmap 使用 HTTP 长连接。该参数与“–proxy”矛盾

参数:–null-connection

有一种特殊的 HTTP 请求类型可以直接获得 HTTP 响应的大小而不用获得 HTTP 响应体。显然这在布尔型盲注中可以节约很大的带宽。当然这一技术是需要服务器端支持的。该参数与“–text-only”矛盾。

参数:–threads

使用该参数指定 Sqlmap 可以达到的最大并发数。从性能和网站承受能力两方面考虑最大并发数不要超过 10(默认1)

Injection(注入)

参数:-p 和–skip

默认情况下 Sqlmap 会测试所有 GET 参数和 POST 参数,当 level 大于等于 2 时会测试 cookie 参数,当 level 大于等于 3 时会测试 User-Agent 和 Referer。实际上还可以手动指定一个以逗号分隔的、要测试的参数列表,该列表中的参数不受 level 限制。这就是“-p”的作用。
但是你可以手动用-p参数设置想要测试的参数。
例如: -p “id,user-anget”
当你使用–level的值很大但是有个别参数不想测试的时候可以使用–skip参数
例如:–skip=”user-angent.referer”
有时会遇到伪静态网页。像动态网页会明目张胆地列出参数,如:

/user.php?id=1

显然参数是 id,值为 1。但若是伪静态网页则可能这样写:

/user/1/

将参数隐藏在 URL 中。通常情况下 Sqlmap 不会对这样的伪静态网页的参数做测试,因为 Sqlmap 无法判断哪个是参数。若想要对这样的伪静态进行测试,只需要加上“*”,告诉 Sqlmap 哪个是伪静态参数就行,剩下事的和 GET 参数没有什么区别。如:

1
python sqlmap.py -u "http(s)://target.cc/user/1*/"

参数:–dbms

默认情况系sqlmap会自动的探测web应用后端的数据库是什么,sqlmap支持的数据库有

  • MySQL、
  • Oracle
  • PostgreSQL
  • Microsoft SQL Server
  • Microsoft Access
  • SQLite
  • Firebird
  • Sybase
  • SAP MaxDB
  • DB2

对于 Mysql 和 Microsoft SQL Server 和要这样指定:

  • –dbms MySQL
  • –dbms Microsoft SQL Server

对于 MySQL 来说,是类似这样的:5.0。对于 Microsoft SQL Server 来说,是类似这样的:2005。
如果在添加“–dbms”参数的同时还添加了“–fingerprint”,Sqlmap 只会在指定的数据库管理系统内进行指纹识别。
只有在很确定时使用“–dbms”,否则还是让 Sqlmap 自动检测更好些

参数:–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的正常执行
代码中是这样调用数据库的:

1
$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

这时你就需要–prefix和–suffix参数了

1
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

这样执行的SQL语句变成:

1
$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1";

参数:–tamper

sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用–tamper参数对数据做修改来绕过WAF等设备。
若该 tamper 脚本位于 sqlmap 的安装目录的 tamper/目录中,就可以省略路径和后缀名,只写文件名。
多个 tamper 脚本之间用空格隔开
在 tamper/目录中有许多可用的 tamper 脚本。tamper 脚本的作用是对 payload 进行混淆。
我们还可以自己写 tamper 脚本,这属于 Sqlmap 的高级用法,一个有效的 tamper 脚本如下所示:

1
2
3
4
5
6
7
8
9
10
# 必须要导入的库
from lib.core.enums import PRIORITY
# 定义该 tamper 脚本的优先级
__priority__ = PRIORITY.NORMAL
def tamper(payload):
'''此处是 tamper 的说明'''
retVal = payload
# 此处是用于修改 payload 的代码
# 返回修改后的 payload
return retVal

参数:–no-escape

有时 Sqlmap 会使用用单引号括起来的字符串值作为 payload,如“SELECT ‘foobar’”,默认地这些值会被编码,如上例将被编码为:
SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114)) 这样做既可以混淆视听让人一时难以洞察 payload 的内容又可以在后台服务器使用类似 magic_quote 或 mysql_real_escape_string 这样的转义函数的情况下字符串不受影响。当然在某些情况下需要关闭字符串编码,如为了缩减 payload 长度,用户可以使用“–no-escape”来关闭字符串编码。

Detection(检测)

可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容
参数:–level
共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload
这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试

参数:–risk

此参数用于指定风险等级,有 1~4 共 4 级。

  • 1会测试大部分的测试语句(默认)
  • 2会增加基于事件的测试语句
  • 3会增加OR语句的SQL注入测试。
    在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险

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

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

参数:–text-only,–titles

若是用户知道代表 True 的页面 title 和代表 False 的页面 title 不同,
如代表 True 的页面 title 为“Welcome”,代表 False 的页面 title 为“Forbidden”,
–titles”让 Sqlmap 依据 title 来判断 True 或 False
若是 HTTP 响应体中有许多诸如 JavaScript 之类的活动内容,可以使用–text-only让 Sqlmap 只专注于纯文本内容

Techniques(技巧)

这些选项可用于调整具体的SQL注入测试。
B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)
可以用“–technique ES”来指定使用两种检测技术。“–technique BEUSTQ”与默认情况等效

Fingerprint(指纹):

参数 -f

–fingerprint 执行检查广泛的DBMS版本指纹

Enumeration(枚举):

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

参数:-b

–banner 检索数据库管理系统的标识
大多数的现代数据库管理系统都有一个函数或是环境变量能够返回数据库管理系统的版本号和最后的补丁级别以及底层的操作系统信息。
通常这个函数是 version()、环境变量是@@version,当然要看目标数据库管理系统了。使用参数“-b”或“–banner”来列举数据库管理系统的这一信息

–current-user

检索数据库管理系统当前用户

–current-db

检索数据库管理系统当前数据库

–is-dba

检测DBMS当前用户是否DBA

–users

枚举数据库管理系统用户

–passwords

枚举数据库管理系统用户密码哈希

–privileges

枚举数据库管理系统用户的权限
当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的权限。通过用户权限可以判断哪些用户是管理员。

若想只枚举特定用户的权限使用参数“-U”指定用户,可用“CU”来代表当前用户。
若目标是微软的 SQL Server,这一参数会列出每个用户是否是管理员而不列出每个用户的具体权限。

–roles

枚举数据库管理系统用户的角色
当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的角色。
若想只枚举特定用户的角色使用参数“-U”指定用户,可用“CU”来代表当前用户。
官方手册上说只有目标数据库管理系统是 Oracle 时这一功能才可用,但我在 Mysql 中测试也是可用的

–dbs

枚举数据库管理系统数据库
当前用户有读取包含了数据库管理系统中可用数据库信息的系统表的权限时使用这一参数可以列举数据库管理系统中所有数据库

–tables

枚举的DBMS数据库中的表
没有用参数“-D”指定数据库,只使用参数“–tables”会列举所有数据库中所有表
使用参数“–exclude-sysdbs”可排除系统数据库。在 Oracle 中要指定 TABLESPACE_NAME 而不是数据库名

–columns

枚举DBMS数据库表列

–dump

-C、-T、-D、–start、–stop 和–where
权限允许时可以列举表中数据。用参数“-D”指定数据库,用参数“-T”指定数据表,用参数“-C”指定目标列。
若只指定了数据表而没有指定数据库则默认使用当前数据库,若没有指定列则列举表中全部列。
数据保存到 CSV 格式文件中,文件具体路径会在 Sqlmap 的输出中给出

–dump-all

使用参数“–dump-all”可列举所有数据库所有表中所有数据。同样地,可使用参数“–exclude-sysdbs”排除系统数据库。

  • 注意微软 SQL Server 的 master 数据库不属于系统数据库,因为有些管理员会在这个数据库中存储用户数据

    –search

    搜索列(S),表(S)和/或数据库名称(S)

    -D DB

    要进行枚举的数据库名

    -T TBL

    要进行枚举的数据库表

    -C COL

    要进行枚举的数据库列

    -U USER

    用来进行枚举的数据库用户

    –exclude-sysdbs

    枚举表时排除系统数据库

    –start=LIMITSTART

    第一个查询输出进入检索

    –stop=LIMITSTOP

    最后查询的输出进入检索

    –first=FIRSTCHAR

    第一个查询输出字的字符检索

    –last=LASTCHAR

    最后查询的输出字字符检索

    –sql-query=QUERY

    要执行的SQL语句

    –sql-shell

    提示交互式SQL的shell

##Brute force(蛮力):
这些选项可以被用来运行蛮力检查。

–common-tables 检查存在共同表

–common-columns 检查存在共同列

User-defined function injection(用户自定义函数注入):

这些选项可以用来创建用户自定义函数。

–udf-inject 注入用户自定义函数

–shared-lib=SHLIB 共享库的本地路径

File system access(访问文件系统):

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

–file-read=RFILE

从后端的数据库管理系统文件系统读取文件
当数据库管理系统是 MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有读取文件相关权限时读取文件是可行的

–file-write=WFILE –file-dest=DFILE

file-write编辑后端的数据库管理系统文件系统上的本地文件
file-dest后端的数据库管理系统写入文件的绝对路径
当数据库管理系统是 MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有写文件相关权限时上传文件是可行的。
上传的文件既可以是文件文件也可以是二进制文件.

###

Operating system access(操作系统访问):

这些选项可以用于访问后端数据库管理系统的底层操作系统。

–os-cmd=OSCMD –os-shell

执行操作系统命令(若数据库管理系统是 MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有相关权限 Sqlmap 就能利用 SQL 注入执行任意的操作系统命令)
当数据库管理系统是 MySQL 或 PostgreSQL 时,Sqlmap 会通过前面介绍过的文件上传功能上传一个包含用户自定义函数 sys_exec()和 sys_eval()的二进制共享库文件,然后创建这两个用户自定义函数,通过这两个函数之一来执行用户指定的命令。选择哪个函数取决于用户是否想要显示命令执行的标准输出
当数据库管理系统是微软的 SQL Server 时,Sqlmap 通过存储过程 xp_cmdshell 来执行任意命令。
若 xp_cmdshell 被禁用(SQL Server >= 2005 时默认禁用)Sqlmap 会启用它;
若 xp_cmdshell 不存在,Sqlmap 会创建它。

当用户想要看到命令执行的标准输出时,Sqlmap 使用可列举的注入技术(盲注、带内和基于错误的注入),而当用户不想看到命令执行的标准输出时,堆查询注入技术将被用于执行命令

–os-pwn –os-bof –os-smbrelay

os-pwn获取一个OOB shell,meterpreter或VNC
os-bof一键获取一个OOB shell,meterpreter或VNC
os-smbrelay存储过程缓冲区溢出利用

–priv-esc

数据库进程用户权限提升

–msf-path=MSFPATH

Metasploit Framework本地的安装路径

–tmp-path=TMPPATH

远程临时文件目录的绝对路径
若数据库管理系统是 MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有相关权限 Sqlmap 就有可能在攻击者的主机和数据库所在主机之间建立带外 TCP 连接。根据用户的选择,此连接可以是交互式命令 shell,Meterpreter 会话或图形用户界面(VNC)会话。

Sqlmap 要靠 Metasploit 生成 shellcode,在数据库所在主机执行 shellcode 有以下四种技术:

数据库通过 Sqlmap 创建的用户自定义函数 sys_bineval()在内存中执行 Metasploit 的 shellcode。支持 MySQL 和 PostgreSQL。参数“–os-pwn”。
通过 Sqlmap 自己的用户自定义函数(MySQL 和 PostgreSQL 中的 sys_exec(),微软 SQL Server 中的 xp_cmdshell())上传并执行 Metasploit 的“stand-alone payload stager”。参数:“–os-pwn”。
利用远程代码执行漏洞MS08-068。攻击者的机器要用 Metasploit 的 smb_relay 监听来自目标机器的连接。要求在 Linux/Unix 上以 root 权限运行 Sqlmap 且目标 DBMS 在 Windows 上以管理员权限运行。参数:“–os-smbrelay”。
在微软 SQL Server 2000 和 2005 中可通过存储过程 sp_replwritetovarbin 的堆缓冲区溢出漏洞(MS09-004)在内存中执行 Metasploit 的 shellcode。Sqlmap 有自己的数据执行保护绕过技术可以成功利用漏洞,但需要 Metasploit 生成 shellcode 以便在成功利用漏洞时执行 shellcode。参数:“–os-bof

Windows注册表访问:

这些选项可以被用来访问后端数据库管理系统Windows注册表。

–reg-read 读一个Windows注册表项值
–reg-add 写一个Windows注册表项值数据
–reg-del 删除Windows注册表键值
–reg-key=REGKEY Windows注册表键
–reg-value=REGVAL Windows注册表项值
–reg-data=REGDATA Windows注册表键值数据
–reg-type=REGTYPE Windows注册表项值类型

General(一般):

这些选项可以用来设置一些一般的工作参数。
sqlite会话文件保存位置

  • -s SESSIONFILE Load session from a stored (.sqlite) file

记录流量文件保存文件

  • -t TRAFFICFILE Log all HTTP traffic into a textual file

永远不要求用户输入,使用默认行为

  • –batch Never ask for user input, use the default behavior

具有二进制值的结果字段

  • –binary-fields=.. Result fields having binary values (e.g. “digest”)

在评估目标之前检查Internet连接

  • –check-internet Check Internet connection before assessing the target

从目标网址开始抓取网站

  • –crawl=CRAWLDEPTH Crawl the website starting from the target URL

正则表达式从抓取中排除页面(例如“logout”)

  • –crawl-exclude=.. Regexp to exclude pages from crawling (e.g. “logout”)

分隔CSV输出中使用的字符(默认为“,”)

  • –csv-del=CSVDEL Delimiting character used in CSV output (default “,”)

盲SQL注入字符集(例如“0123456789abcdef”)

  • –charset=CHARSET Blind SQL injection charset (e.g. “0123456789abcdef”)

转储数据的格式(CSV(默认),HTML或SQLITE)

  • –dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE)

用于数据检索的字符编码(例如GBK)

  • –encoding=ENCOD.. Character encoding used for data retrieval (e.g. GBK)

显示每个输出的预计到达时间

  • –eta Display for each output the estimated time of arrival

刷新当前目标的会话文件

  • –flush-session Flush session files for current target

在目标URL上解析和测试表单

  • –forms Parse and test forms on target URL

忽略存储在会话文件中的查询结果,重新进行数据查询

  • –fresh-queries Ignore query results stored in session file

将所有HTTP流量记录到HAR文件中

  • –har=HARFILE Log all HTTP traffic into a HAR file

在数据检索期间使用十六进制转,检索结束后会转换回原来数据格式.

  • –hex Use hex conversion during data retrieval

自定义输出目录路径

  • –output-dir=OUT.. Custom output directory path

分析和实现数据库内建报错信息

  • –parse-errors Parse and display DBMS error messages from responses

将命令保存成配置文件

  • –save=SAVECONFIG Save options to a configuration INI file

正则表达式从提供的代理日志中过滤目标

  • –scope=SCOPE Regexp to filter targets from provided proxy log

若只想使用包含关键词“ROW”的payload可使用参数“–test-filter=ROW”

  • –test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW)

若不想使用包含关键词“BENCHMARK”的payload可使用参数“–test-skip=BENCHMARK”

  • –test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK)

更新sqlmap

  • –update Update sqlmap

Miscellaneous(杂项):

使用短助记符(例如“flu,bat,ban,tec = EU”)

  • -z MNEMONICS Use short mnemonics (e.g. “flu,bat,ban,tec=EU”)

在找到SQL注入时运行主机OS命令

  • –alert=ALERT Run host OS command(s) when SQL injection is found

设置预定义答案(例如“quit = N,follow = N”)

  • –answers=ANSWERS Set predefined answers (e.g. “quit=N,follow=N”)

当发现SQL注入时,发出问题提示音

  • –beep Beep on question and/or when SQL injection is found

清除sqlmap注入时产生的udf与表

  • –cleanup Clean up the DBMS from sqlmap specific UDF and tables

检查缺少(可选)sqlmap依赖项

  • –dependencies Check for missing (optional) sqlmap dependencies

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

  • –disable-coloring Disable console output coloring

使用指定的Google结果页面

  • –gpage=GOOGLEPAGE Use Google dork results from specified page number

对WAF / IPS保护进行全面测试

  • –identify-waf Make a thorough testing for a WAF/IPS protection

显示可用篡改脚本的列表

  • –list-tampers Display list of available tamper scripts

通过HTTP User-Agent标头模拟智能手机

  • –mobile Imitate smartphone through HTTP User-Agent header

在离线模式下工作(仅使用会话数据)

  • –offline Work in offline mode (only use session data)

安全地从sqlmap数据目录中删除所有内容

  • –purge Safely remove all content from sqlmap data directory

跳过WAF / IPS保护的启发式检测

  • –skip-waf Skip heuristic detection of WAF/IPS protection

有时对目标非常多的URL进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入,可以使用此参数。

  • –smart Conduct thorough tests only if positive heuristic(s)

提示交互式sqlmap shell

  • –sqlmap-shell Prompt for an interactive sqlmap shell

用于存储临时文件的本地目录

  • –tmp-dir=TMPDIR Local directory for storing temporary files

Web服务器文档根目录(例如“/ var / www”),当没指定目录的情况下

  • –web-root=WEBROOT Web server document root directory (e.g. “/var/www”)

简单的向导界面,适合初学者用户

  • –wizard Simple wizard interface for beginner users

本文标题:sqlmap使用手册

文章作者:Tea_Mh

发布时间:2019年04月06日 - 16:43

最后更新:2019年05月25日 - 02:00

原始链接:blog.manhao6.cn/2019/04/06/sql注入与sqlmap实践/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Tea_Mh wechat
欢迎加我微信,交流交流
-------------    本文结束  感谢您的阅读    -------------