说明:本文仅是用于学习测试自己搭建的SQL注入漏洞和网络安全维护,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】
一、sqlmap介绍
sqlmap是一个开源渗透测试工具,它可以自动执行检测和利用 SQL 注入漏洞来实现接管数据库服务器。它配备了一个强大的检测引擎、终极渗透测试器的许多功能,从数据库指纹识别、及数据库中获取数据,到访问底层文件系统和通过带外连接在操作系统上执行命令;功能十分强大。
1.1、sqlmap支持的sql注入类型
序号 | sql注入类型 | 说明 |
1 | 基于布尔值的盲注 | sqlmap替换或附加到 HTTP 请求中受影响的参数、包含子语句的语法有效的 SQL 语句字符串或用户希望检索其输出的任何其他 SQL 语句。对于每个 HTTP 响应,通过将 HTTP 响应标头/正文与原始请求进行比较,该工具会逐个字符推断注入的语句的输出。或者,用户可以提供字符串或正则表达式以在 True 页面上进行匹配。在 sqlmap 中实现的用于执行此技术的二分算法能够使用最多 7 个 HTTP 请求来获取输出的每个字符。当输出不在明文纯字符集内时,sqlmap 将调整具有更大范围的算法来检测输出 |
2 | 基于时间的盲注 | sqlmap 在 HTTP 请求中替换或附加一个语法有效的 SQL 语句字符串,其中包含一个查询,该查询将后端 DBMS 保留以返回一定秒数。对于每个 HTTP 响应,通过比较 HTTP 响应时间与原始请求,该工具会逐个字符推断注入语句的输出。与基于布尔的技术一样,也应用了等分算法。 |
3 | 基于错误注入 | sqlmap 将特定于数据库的错误消息触发语句替换或附加到受影响的参数,并解析 HTTP 响应标头和正文,以查找包含注入的预定义字符和其中的子查询语句输出的DBMS错误消息。【仅当Web程序已配置为显示后端数据库管理系统错误消息时,此技术才有效】 |
4 | 基于union查询注入 | sqlmap将语法上有效的SQL语句使用union关键字附加到受影响的参数中,【仅当Web程序页面在循环或类似内容中直接传递语句的输出时,以便查询输出的每一行都打印在页面内容上,此技术才起作用(条件是:根据一个较多字段的表对一个少字段的表进行偏移注入,在页面有回显点的情况下)】 |
5 | 堆叠注入 | sqlmap会测试Web程序是否支持堆叠查询;如果支持,则将堆叠注入内容附加到受影响的参数后,且用括号()括起来。【此技术对于运行数据定义语句(DDL)、数据操纵语句(DML)以外的 SQL 语句非常有用,可能会导致文件系统读写访问和操作系统命令执行,具体取决于底层后端数据库管理系统和会话用户权限。】 |
1.2、sqlmap支持的通用功能
序号 | sqlmap支持的通用功能说明 |
1 | 几乎支持市面所有的关系型数据库注入【MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、Informix、MariaDB、Percona、MemSQL、TiDB、CockroachDB、HSQLDB、H2、MonetDB、Apache Derby、AmazonRedshift, Vertica, Mckoi, Presto, ALTIBASE, MimerSQL, CrateDB, Greenplum, Drizzle, Apache Ignite, Cubrid, InterSystems Cache, IRIS, eXtremeDB, FrontBase, Raima Database Manager, YugabyteDB, Aurora, OpenGauss, ClickHouse和 Virtuoso 】 |
2 | 支持五种 SQL 注入技术【基于布尔的盲注、基于时间的盲注、基于错误的盲注、UNION 查询和堆叠查询注入】 |
3 | 可以提供单个目标 URL,从 Burp 代理或 WebScarab 代理请求日志文件中获取目标列表,从文本文件中获取整个 HTTP 请求,或者通过向 sqlmap 提供 Google dork 来获取目标列表,该 dork 查询 Google 搜索引擎并解析其结果页面。您还可以定义一个基于正则表达式的范围,用于标识要测试的已解析地址 |
4 | 提供了 GET 参数、POST 参数、HTTP Cookie 标头值、HTTP User-Agent 标头值和 HTTP Referer 标头值,以识别和利用 SQL 注入漏洞。还可以指定要测试的特定参数的逗号分隔列表。 |
5 | 用于指定并发 HTTP(S) 请求(多线程)的最大数量以加快盲目 SQL 注入技术的选项。反之亦然,也可以指定每个 HTTP(S) 请求之间要保持的秒数。还实施了其他优化开关以加快开发速度 |
6 | HTTP Cookie 标头字符串支持,当 Web 应用程序需要基于 Cookie 的身份验证并且您拥有此类数据时,或者您只想测试和利用此类标头值的 SQL 注入时,这非常有用。您还可以指定始终对 Cookie 进行 URL 编码 |
7 | 自动处理来自应用程序的 HTTP Set-Cookie 标头,如果会话过期,则重新建立会话。还支持对这些值进行测试和利用。反之亦然,您也可以强制忽略任何标头 |
8 | HTTP 协议 Basic、Digest、NTLM 和 Certificate 身份验证支持 |
9 | HTTP(S) 代理支持将请求传递到目标应用程序,该目标应用程序也适用于 HTTPS 请求和经过身份验证的代理服务器 |
10 | 用于伪造 HTTP Referer 标头值和 HTTP User-Agent 标头值的选项,该值由用户指定或从文本文件中随机选择 |
11 | 支持提高输出消息的详细级别:存在 7 个详细级别 |
12 | 支持从目标 URL 解析 HTML 表单,并针对这些页面伪造 HTTP(S) 请求,以测试表单参数是否存在漏洞 |
13 | 每个查询的估计到达时间支持,实时更新,以便用户大致了解检索查询输出需要多长时间 |
14 | 获取数据时自动将会话(查询及其输出,即使部分检索)实时保存在文本文件上,并通过解析会话文件来恢复注入 |
15 | 支持从配置 INI 文件中读取选项,而不是每次在命令行上指定所有开关。还支持根据提供的命令行开关生成配置文件 |
16 | 支持在本地 SQLite 3 数据库上复制后端数据库表结构和条目 |
17 | 支持解析 HTTP(S) 响应并向用户显示任何 DBMS 错误消息 |
18 | 与其他 IT 安全开源项目 Metasploit 和 w3af 集成 |
1.3、sqlmap支持的指纹和枚举功能
序号 | sqlmap支持的指纹和枚举功能 |
1 | 基于错误消息、横幅解析、函数输出比较和特定功能(如 MySQL 注释注入)的广泛后端数据库软件版本和底层操作系统指纹。如果您已经知道后端数据库管理系统名称,也可以强制使用它 |
2 | 基本的 Web 服务器软件和 Web 应用程序技术指纹 |
3 | 支持检索 DBMS 横幅、会话用户和当前数据库信息。该工具还可以检查会话用户是否为数据库管理员 (DBA) |
4 | 支持枚举用户、密码哈希、权限、角色、数据库、表和列 |
5 | 自动识别密码哈希格式并支持使用基于字典的攻击来破解它们 |
6</ |