特性

译自:Features

sqlmap 实现的功能特性包括:

通用特性

  • 完全支持 MySQLOraclePostgreSQLMicrosoft SQL ServerMicrosoft AccessIBM DB2SQLiteFirebirdSybaseSAP MaxDBInformixMariaDBPerconaMemSQLTiDBCockroachDBHSQLDBH2MonetDBApache DerbyVerticaMckoiPrestoAltibase 等 DBMS(Database Management System,数据库管理系统)。
  • 完全支持五种 SQL 注入技术:布尔型盲注(Boolean-based blind)时间型盲注(Time-based blind)报错型注入(Error-based)联合查询注入(UNION query-based)堆叠查询(Stacked queries)注入
  • 支持通过提供 DBMS 凭证,IP 地址,端口和数据库名而非 SQL 注入直接连接数据库
  • 支持用户提供单个目标 URL,通过 Burp proxyWebScarab proxy 的请求日志文件批量获取目标地址列表,从文本文件获得完整的 HTTP 请求报文或使用 Google dork——使用 Google 查询并解析结果页面获取批量目标。也可以自定义正则表达式进行验证解析。
  • 可以测试并利用 GETPOST 参数,HTTP 头中的 CookieUser-AgentReferer 这些地方出现的 SQL 注入漏洞。也可以指定一个用英文逗号隔开的参数列表进行测试。
  • 支持自定义**最大 HTTP(S) 并发请求数(多线程)**以提高盲注的速度。同时,还可以设置每个 HTTP(S) 请求的间隔时间(秒)。当然,还有其他用来提高测试速度的相关优化选项。
  • 支持设置 HTTP 头中的 Cookie,当你需要为基于 cookies 身份验证的目标 Web 应用提供验证凭证,或者是你想要对 cookies 这个头部参数进行测试和利用 SQL 注入时,这个功能是非常有用的。你还可以指定对 Cookie 进行 URL 编码。
  • 自动处理来自 Web 应用的 HTTP Set-Cookie 消息,并重建超时过期会话。这个参数也可以被测试和利用。反之亦然,你可以强制忽略任何 Set-Cookie 消息头信息。
  • 支持 HTTP Basic,Digest,NTLM 和 Certificate authentications 协议。
  • HTTP(S) 代理支持通过使用验证代理服务器对目标应用发起请求,同时支持 HTTPS 请求。
  • 支持伪造 HTTP RefererHTTP User-Agent,可通过用户或者从一个文本文件中随机指定。
  • 支持设置输出信息的详细级别:共有七个级别的详细程度。
  • 支持从目标 URL 中解析 HTML 表单并伪造 HTTP(S) 请求以测试这些表单参数是否存在漏洞。
  • 通过用户设置选项调整粒度和灵活性
  • 对每一次查询实时评估完成时间,使用户能知道输出结果需要的大概时长。
  • 在抓取数据时能实时自动保存会话(对应查询和输出结果,支持部分获取保存)到一个文本文件中,并通过解析会话文件继续当前进行的注入检测
  • 支持从 INI 配置文件中读取相关配置选项而不是每次都要在命令行中指定。支持从命令行中生成对应的配置文件。
  • 支持复制后端数据库表结构和数据项到本地的 SQLite 3 数据库中。
  • 支持从 SVN 仓库中将 sqlmap 升级到最新的开发版本。
  • 支持解析 HTTP(S) 请求响应并显示相关的 DBMS 错误信息。
  • 集成其他 IT 安全开源项目,Metasploitw3af

指纹识别和枚举功能

  • 基于错误信息banner 解析函数输出对比特定特征(如 MySQL 注释注入)等方式,收集大量的数据库版本和底层操作系统指纹信息。如果你已经知道数据库系统的版本,则可以手动指定它。
  • 支持基本 Web 服务器和 Web 应用技术的指纹信息识别技术。
  • 支持获取 DBMS banner会话用户当前数据库等信息。sqlmap 还能检查当前会话用户是否为数据库管理员(DBA)帐号。
  • 支持枚举用户,密码散列,权限,角色,数据库,数据表和数据列
  • 支持自动识别密码散列格式并使用用字典攻击尝试破解
  • 支持暴力猜解表名和列名。当会话用户没有读取系统表的权限或数据库没有存储表结构信息(例如 MySQL < 5.0)时,这项功能会非常有用。
  • 支持完整地导出数据表,或用户指定的部分数据项、数据列。用户甚至可以只导出部分数据项中的部分字符串。
  • 支持自动导出数据库所有的数据表和数据实体。在导出时,可以剔除部分指定数据表。
  • 支持搜索指定的数据库名,在数据库中搜索表,或在所有表中搜索列名。这是一项很有用的功能,例如,可以通过搜索列名中包含像 namepass 的表来确定哪些表包含用户敏感信息。
  • 支持交互式 SQL 客户端功能,用于连接后端数据库并执行 SQL 语句。sqlmap 会自动分析用户所提供的 SQL 语句,以此决定用最合适的技术去注入并打包相应的 SQL payload。

接管功能

以下的相关技术详细信息可在白皮书通过高级 SQL 注入完全控制操作系统和幻灯片通过数据库进一步控制操作系统中找到。

  • 支持用户自定义函数注入:用户可以编译生成共享代码库并通过 sqlmap 在数据库中创建共享库中没有的用户自定义函数。可以通过 sqlmap 执行或者移除这些 UDFs。这些功能当前只支持 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 自带的用户自定义 sys_bineval() 函数,在内存中执行 Metasploit shellcode。当前支持 MySQL 和 PostgreSQL。
    • 对于 MySQL 和 PostgreSQL,通过 sqlmap 自带的用户自定义 sys_exec() 函数上传并执行一个 Metasploit 独立运行的 payload,对于 Microsoft SQL Server 则使用 xp_cmdshell()
    • 通过 SMB 反射攻击MS08-068)执行 Metasploit shellcode,这需要目标数据库服务器向已被 Metasploit smb_relay 监听的攻击者机器发出一个 UNC 路径请求。当 sqlmap 以 Linux/Unix 高权限(uid=0)运行,并且目标 DMBS 在 Windows 中以管理员身份运行时支持该功能。
    • 通过利用 Microsoft SQL Server 2000 和 2005 中存在的 sp_replwritetovarbin 存储过程堆缓冲区溢出MS09-004)在内存中执行 Metasploit shellcode。sqlmap 有内置脚本可以自动绕过 DEP 内存保护去触发目标系统漏洞,该脚本依赖 Metasploit ,用于生成 shellcode 以执行攻击。
  • 支持通过 Metasploit 的 getsystem 命令进行数据库进程用户提权,这个命令使用了包括 kitrap0d 在内等技术(MS10-015)。
  • 支持访问(读取/添加/删除)Windows 注册表配置单元。

演示

你可以在 BernardoMiroslav 的 YouTube 主页中观看演示。还可以在 这里 找到大量含有公开可用漏洞的 Web 应用,用于合法的 Web 应用安全评估。