官网:https://sqlmap.org/
官网介绍:https://github.com/sqlmapproject/sqlmap/wiki/Usage
github: https://github.com/sqlmapproject/sqlmap
sqlmap 介绍
Sqlmap 是一个自动化的 SQL 注入工具,主要功能是扫描、发现并利用指定的 Url 的 Sql 注入漏洞。
sqlmap提供的功能
通用功能
- 支持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、Amazon Redshift、Vertica、Mckoi、Presto、Altibase、MimerSQL、CrateDB、Greenplum、 Drizzle、Apache Ignite、Cubrid、InterSystems Cache、IRIS、eXtremeDB、FrontBase、Raima数据库管理器、YugabyteDB和Virtuoso数据库管理系统。
- 完全支持五种 SQL 注入技术:基于布尔值的盲注、基于时间的盲注、基于错误的、联合查询和堆叠查询。
- 通过提供 DBMS 凭据、IP 地址、端口和数据库名称,支持无需通过 SQL 注入直接连接到数据库。
- 可以提供单个目标 URL,从Burp 代理或WebScarab 代理请求日志文件中获取目标列表,从文本文件中获取整个 HTTP 请求,或者通过向 sqlmap 提供查询Google的 Google dork 来获取目标列表搜索引擎并解析其结果页面。您还可以定义基于正则表达式的范围,用于标识要测试的解析地址。
- 测试提供了GET参数、POST参数、HTTP Cookie标头值、HTTP User-Agent标头值和 HTTP Referer标头值,以识别和利用 SQL 注入漏洞。还可以指定要测试的特定参数的逗号分隔列表。
- 指定并发 HTTP(S) 请求(多线程)的最大数量的选项,以加速盲 SQL 注入技术。反之亦然,也可以指定每个 HTTP(S) 请求之间要保持的秒数。其他优化开关也实现了加速利用。
- HTTP
Cookie标头字符串支持,当 Web 应用程序需要基于 cookie 的身份验证并且您拥有此类数据时,或者您只想测试和利用此类标头值上的 SQL 注入时,这很有用。您还可以指定始终对 Cookie 进行 URL 编码。 - 自动处理来自应用程序的HTTP
Set-Cookie标头,如果会话过期,则重新建立会话。也支持对这些值进行测试和利用。反之亦然,您也可以强制忽略任何Set-Cookie标题。 - HTTP 协议基本、摘要、NTLM 和证书身份验证支持。
- HTTP(S) 代理支持将请求传递给目标应用程序,该应用程序也适用于 HTTPS 请求和经过身份验证的代理服务器。
- 用于伪造HTTP
Referer标头值和用户指定的或从文本文件中随机选择的HTTPUser-Agent标头值的选项。 - 支持增加输出消息的详细级别:有七个级别的详细信息。
- 支持从目标 URL解析 HTML 表单并针对这些页面伪造 HTTP(S) 请求以测试表单参数是否存在漏洞。
- 用户开关和功能方面的粒度和灵活性。
- 每个查询的预计到达时间支持,实时更新,为用户提供检索查询输出需要多长时间的概览。
- 在获取数据的同时自动将会话(查询及其输出,即使部分检索)实时保存在文本文件中,并通过解析会话文件恢复注入。
- 支持从配置 INI 文件中读取选项,而不是每次都指定命令行上的所有开关。还支持根据提供的命令行开关生成配置文件。
- 支持在本地 SQLite 3 数据库上复制后端数据库表结构和条目。
- 从 subversion 存储库将 sqlmap 更新到最新开发版本的选项。
- 支持解析 HTTP(S) 响应并向用户显示任何 DBMS 错误消息。
- 与其他 IT 安全开源项目Metasploit和w3af 集成。
指纹和枚举功能
- 丰富的后端数据库软件版本和底层操作系统指纹,基于 错误信息、 横幅解析、 函数输出比较和MySQL注释注入等特定功能。如果您已经知道,也可以强制使用后端数据库管理系统名称。
- 基本的网络服务器软件和网络应用技术指纹。
- 支持检索 DBMS横幅、会话用户和当前数据库信息。该工具还可以检查会话用户是否是数据库管理员(DBA)。
- 支持枚举用户、密码哈希、权限、角色、数据库、表和列。
- 自动识别密码哈希格式并支持使用基于字典的攻击来破解它们。
- 支持蛮力表和列 name。当会话用户对包含模式信息的系统表没有读访问权限或数据库管理系统没有在任何地方存储此信息时(例如 MySQL < 5.0),这很有用。
- 支持根据用户的选择完全转储数据库表、一系列条目或特定列。用户还可以选择仅从每列条目中转储一定范围的字符。
- 支持自动转储所有数据库的模式和条目。可以从转储中排除系统数据库。
- 支持搜索特定数据库名称、所有数据库中的特定表或所有数据库表中的特定列。例如,这对于识别包含自定义应用程序凭据的表很有用,其中相关列的名称包含类似name和pass 的字符串。
- 支持在连接到后端数据库的交互式 SQL 客户端中运行自定义 SQL 语句。sqlmap 自动剖析提供的语句,确定最适合注入它的技术以及如何相应地打包 SQL 负载。
接管功能
- 支持注入自定义用户定义函数:用户可以编译一个共享库,然后使用sqlmap在后端DBMS内从编译的共享库文件中创建用户定义函数。然后可以通过 sqlmap 执行这些 UDF,也可以选择删除这些 UDF。数据库软件为 MySQL 或 PostgreSQL 时支持。
- 当数据库软件为 MySQL、PostgreSQL 或 Microsoft SQL Server 时,支持从数据库服务器底层文件系统下载和上传任意文件。
- 当数据库软件为 MySQL、PostgreSQL 或 Microsoft SQL Server 时,支持在数据库服务器底层操作系统上执行任意命令并检索其标准输出。
- 在 MySQL 和 PostgreSQL 上通过用户定义的函数注入和执行。
- 在 Microsoft SQL Server 上通过
xp_cmdshell()存储过程。此外,如果被 DBA 删除或从头开始创建,则会重新启用存储过程。 - 支持在攻击者机器和底层操作系统的数据库服务器之间建立带外有状态TCP连接。根据用户的选择,该通道可以是交互式命令提示符、Meterpreter 会话或图形用户界面 (VNC) 会话。sqlmap 依赖 Metasploit 来创建 shellcode,并实现了四种不同的技术来在数据库服务器上执行它。这些技术是:
- 通过 sqlmap 自己的用户定义函数在数据库内存中执行 Metasploit 的 shellcode
sys_bineval()。在 MySQL 和 PostgreSQL 上支持。 - 通过MySQL 和 PostgreSQL 上的sqlmap 自己的用户定义函数或通过Microsoft SQL Server上传和执行 Metasploit 的独立有效负载分段器。
sys_exec()xp_cmdshell() - 通过执行SMB 反射攻击(MS08-068,带有从数据库服务器到 Metasploit
smb_relay服务器漏洞侦听的攻击者机器的 UNC 路径请求)来执行 Metasploit 的 shellcode 。uid=0在 Linux/Unix 和目标上以高权限 ( )运行 sqlmap 时支持DBMS 在 Windows 上以管理员身份运行。 - 通过利用Microsoft SQL Server 2000 和 2005
sp_replwritetovarbin存储过程基于堆的缓冲区溢出( MS09-004 )在数据库内存中执行 Metasploit 的 shellcode 。sqlmap 有自己的漏洞利用来触发自动 DEP 内存保护绕过漏洞,但它依赖于 Metasploit 生成 shellcode 以在成功利用后执行。 - 通过 Metasploit 的命令支持数据库进程的用户权限提升,
getsystem其中包括 kitrap0d技术 ( MS10-015 )。 - 支持访问(读取/添加/删除)Windows 注册表配置单元。
sqlmap 支持的物种SQL注入类型
基于布尔值的盲注
sqlmap 替换或附加到 HTTP 请求中受影响的参数、包含SELECT子语句的语法有效的 SQL 语句字符串,或用户想要检索其输出的任何其他 SQL 语句。对于每个 HTTP 响应,通过将 HTTP 响应标头/正文与原始请求进行比较,该工具会逐字推断注入语句的输出。或者,用户可以提供字符串或正则表达式以匹配 True 页面。在 sqlmap 中实现的用于执行此技术的二分算法能够以最多七个 HTTP 请求获取输出的每个字符。如果输出不在明文纯字符集内,sqlmap 将采用更大范围的算法来检测输出。基于时间的盲注
sqlmap 替换或附加到 HTTP 请求中受影响的参数,这是一个语法有效的 SQL 语句字符串,其中包含一个查询,该查询将后端 DBMS 搁置一段时间以返回特定秒数。对于每个 HTTP 响应,通过将 HTTP 响应时间与原始请求进行比较,该工具会逐字推断注入语句的输出。与基于布尔值的技术一样,应用了二分算法。基于错误主语
sqlmap 替换或附加到受影响的参数一个特定于数据库的错误消息引发语句,并解析 HTTP 响应标头和正文以搜索包含注入的预定义字符链和子查询语句输出的 DBMS 错误消息。此技术仅在 Web 应用程序已配置为公开后端数据库管理系统错误消息时才有效。基于UNION 联合查询注入
sqlmap 将一个语法上有效的 SQL 语句附加到受影响的参数,以UNION ALL SELECT. 当 Web 应用程序页面SELECT在for循环或类似情况下直接传递语句的输出时,此技术会起作用,以便查询输出的每一行都打印在页面内容上。sqlmap 还能够利用部分(单个条目)UNION 查询 SQL 注入漏洞,当语句的输出不在for构造中循环时发生,而只显示查询输出的第一个条目。堆查询注入
也称为堆叠注入:sqlmap 测试 Web 应用程序是否支持堆叠查询,如果支持,则将分号 ( ;) 后跟 SQL 语句附加到 HTTP 请求中的受影响参数后被执行。此技术可用于运行 SQL 语句以外的其他 SQL 语句SELECT,例如数据定义或数据操作语句,可能导致文件系统读写访问和操作系统命令执行取决于底层后端数据库管理系统和会话用户原理介绍:
在SQL中,分号(;)是用来表示一条sql语句的结束。如果我们在结束一个sql语句后继续构造下一条语句,会不会一起执行?
这个想法也就造就了堆叠注入。
局限性:
堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API、权限不足、数据库引擎不支持的限制。 union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?
区别就在于 union 或者union all执行的语句类型是有限的,可以用来执行的是查询语句,而堆叠注入可以执行的是任意的语句。
例如下面这个例子:
用户输入:1; DELETE FROM user;如果没有对输入的参数进行过滤服务器端生成的sql语句为:
Select * from userwhere id=1;DELETE FROM user;当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。sqlmap安装
通过git下载sqlmap
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
#跟新到最新版本
git pull
通过pip安装sqlmap
pip install --upgrade sqlmap
#更新到最新版本
python sqlmap.py --updatesqlmap用法
官方教程:https://github.com/sqlmapproject/sqlmap/wiki/Usage
一下介绍了如何使用sqlmap连接数据库,和扫描url漏洞。其他用法可到官网查看
直接连接到数据库
选项: -d
针对单个数据库实例运行 sqlmap。此选项接受以下形式之一的连接字符串:
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME (MySQL、Oracle、Microsoft SQL Server、PostgreSQL 等)
DBMS://DATABASE_FILEPATH (SQLite、Microsoft Access、Firebird 等)示例:
python sqlmap.py -d "mysql://admin:admin@127.0.0.1:3306/testdb" -f --bann\
er --dbs --users目标网址
选项:-u或--url
针对单个目标 URL 运行 sqlmap。此选项需要以下格式的目标 URL:
http(s)://targeturl[:port]/[...]示例
python sqlmap.py -u "http://www.jiangmingtao.com/page?id=1" -f --banner --dbs -\
-users

