sqlmap(印尼语版 README 导读):自动检测与利用 SQL 注入漏洞的开源渗透测试工具
【免费下载链接】sqlmapAutomatic SQL injection and database takeover tool项目地址: https://gitcode.com/gh_mirrors/sq/sqlmap
导读
本文基于 sqlmap 官方 README 的印尼语翻译版(doc/translations/README-id-ID.md)展开,系统梳理 sqlmap 的项目定位、核心能力、安装方式与基础用法,并结合当前仓库源码逐层印证其底层实现。读完本文,你将掌握 sqlmap 的完整获取与安装流程、-h/-hh两级命令行帮助体系,以及其"检测 → 利用 → 数据库接管"三大核心能力在源码中的落点,能够快速上手并深入理解其工作原理。
项目简介:自动化的 SQL 注入检测与数据库接管工具
印尼语版 README 对 sqlmap 的定义是:"sqlmap adalah perangkat lunak sumber terbuka yang digunakan untuk melakukan uji penetrasi, mengotomasi proses deteksi, eksploitasi kelemahan SQL injection serta pengambil-alihan server basis data"——即 sqlmap 是一款开源渗透测试软件,用于自动化完成 SQL 注入漏洞的检测、利用以及数据库服务器的接管(takeover)。
这份印尼语翻译文档是项目主 README.md 的官方多语言版本之一,两者在结构与内容上完全对应。仓库根目录下的多语言翻译(doc/translations/)覆盖阿拉伯语、孟加拉语、保加利亚语、中文、克罗地亚语、荷兰语、法语、格鲁吉亚语、德语、希腊语、印地语、意大利语、日语、韩语、库尔德语、波斯语、波兰语、葡萄牙语、俄语、塞尔维亚语、斯洛伐克语、西班牙语、土耳其语、乌克兰语、越南语等,印尼语版(README-id-ID.md)即是其中之一。
从仓库结构看,sqlmap 的能力远不止"发一个注入请求"这么简单,其架构可以印证 README 中描述的三大核心能力:
| README 声称的能力 | 仓库实现证据 |
|---|---|
| 先进的检测引擎(pendeteksi canggih) | lib/controller/checks.py 中的checkSqlInjection()、heuristicCheckSqlInjection()、checkWaf()等检测函数 |
| 多种注入技术 | lib/techniques/ 目录下的blind/(布尔盲注与时间盲注)、error/(报错注入)、union/(联合查询注入)、dns/(DNS 外带注入)等模块 |
| 接管数据库服务器 | lib/takeover/ 目录下的udf.py、xp_cmdshell.py、metasploit.py、web.py等后渗透模块 |
具体而言,checkSqlInjection()会根据参数值类型(数字、纯字母或混合)动态选择不同的边界(boundary)组合,再依序执行排序后的注入测试载荷(tests);而heuristicCheckSqlInjection()会在正式注入测试前,向参数注入一段含引号的随机字符串,通过观察响应页面是否出现数据库报错(wasLastResponseDBMSError())来快速判断参数是否可能为注入点。这就是 README 所称"先进检测引擎"的源码级落地。
安装:下载发行包或克隆 Git 仓库
印尼语版 README 提供了两种获取方式:
方式一:直接下载发行包。从项目发布页下载最新版本的 tarball(.tar.gz)或 zipball(.zip)压缩包,解压后即可使用。
方式二:通过 Git 克隆仓库(README 原文给出的命令):
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev使用--depth 1进行浅克隆(shallow clone),只拉取最新一次提交,可显著减少下载体积,适合希望快速拿到最新版本的用户。
运行环境要求:README 明确说明 sqlmap 开箱即用("berfungsi langsung"),支持Python 2.7与3.x任意平台版本。当前仓库的入口脚本 sqlmap.py 也印证了这一点:脚本首部即通过from __future__ import print_function兼容 Python 2/3,并最先导入lib.utils.versioncheck做版本与依赖自检——若模块缺失会直接输出[!] wrong installation detected (missing modules)并退出,这正是"下载即用"体验的保障。
仓库本身是绿色免安装形态,克隆或解压后无需编译,直接以python sqlmap.py方式调用即可。
基础用法:从 -h 到 -hh 的两级帮助体系
README 的"Penggunaan"(用法)部分给出了两个入门命令:
python sqlmap.py -h-h输出基础选项列表,覆盖最常用的目标指定、请求、枚举等参数。
python sqlmap.py -hh-hh则输出全部选项与开关(包括进阶开关),供深度使用者查阅完整参数体系。
从 sqlmap.py 的启动流程看,命令行参数由cmdlineOptions.update(args.__dict__)收集后交给lib/parse/cmdline.py解析,并最终与默认配置合并。除了命令行,sqlmap 还提供等价的全量配置文件 sqlmap.conf,其中以[Target]、[Request]、[Detection]、[Techniques]、[Enumeration]等小节组织各类参数。例如[Target]小节定义了六种目标来源:
| 配置项 | 作用 | 示例/说明 |
|---|---|---|
url | 指定目标 URL | http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat=2 |
direct | 直接连接数据库 | mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME、oracle://... |
logFile | 从 Burp / WebScarab 代理日志解析目标 | Burp 请求日志文件路径或 WebScarab conversations 目录 |
bulkFile | 批量扫描文本文件中的多个目标 | 每行一个目标 URL |
requestFile | 从文件加载完整 HTTP 请求 | 含 POST 方法与请求体的原始请求文本 |
googleDork | 用 Google dork 表达式让搜索引擎返回目标主机 | 如+ext:php +inurl:"&id=" |
这些配置项与命令行开关一一对应(如-u/--url、-d/--direct、-l/--log-file、-m/--bulk-file、-r/--request-file、-g/--google-dork),因此-h与-hh展示的正是同一套参数体系的不同信息密度。
核心能力速览与仓库佐证
README 强调 sqlmap 面向终极渗透测试者("ultimate penetration tester")提供多种细分功能("banyak fitur niche"),包括:
- 数据库指纹识别(database fingerprinting):识别目标使用的 DBMS 类型。仓库 plugins/dbms/ 目录下按数据库厂商组织了完整插件,覆盖 MySQL、Oracle、PostgreSQL、MSSQL Server、SQLite、Access、DB2、Firebird、H2、HSQLDB、ClickHouse、Snowflake、Vertica 等三十余种数据库,每个插件均包含
connector.py(连接器)、fingerprint.py(指纹识别)、enumeration.py(枚举)、syntax.py(语法)、filesystem.py(文件系统)、takeover.py(接管)等模块,构成完整的"检测—枚举—提权"链路。 - 从数据库提取数据(data fetching from the database):即表、列、数据的枚举与导出,由 lib/controller/action.py 根据命令行选项调度对应枚举流程。
- 访问底层文件系统(accessing the underlying file system):在部分数据库(如 MySQL 的
LOAD_FILE/INTO OUTFILE、MSSQL 的xp_cmdshell)支持下读写目标主机文件,相关 SQL 脚本可见于 data/procs/(如 data/procs/mysql/write_file_limit.sql、data/procs/mssqlserver/enable_xp_cmdshell_2000.sql)。 - 通过 out-of-band 连接执行操作系统命令(executing commands on the operating system via out-of-band connections):在无法直接回显的场景下,借助 DNS 请求等方式外带数据。仓库在 data/procs/ 下按 DBMS 提供了统一的
dns_request.sql(覆盖 MySQL、Oracle、PostgreSQL、MSSQL、H2、ClickHouse 等),配合 lib/request/dns.py 与 lib/techniques/dns/ 实现基于 DNS 的带外数据通道;lib/takeover/ 则集中了 UDF 提权、xp_cmdshell启用、Metasploit 会话注入等接管手段。
从源码结构可以推断,上述能力统一由 lib/controller/controller.py 的start()函数编排:先做连通性与 WAF 检测(checkWaf()),再进行启发式与精确注入检测(heuristicCheckSqlInjection()→checkSqlInjection()),筛选出可用的注入向量后,再根据用户选项进入枚举、文件读写或数据库接管阶段。这条调用链正是"自动检测与利用"的完整闭环。
深入理解:从入门命令到自定义 tamper 脚本
- 示例运行(sample run):README 提到可以在线查看一次完整运行示例(asciinema 录屏),直观了解工具从检测到利用的交互式输出。本地运行时,同样的日志与结果会写入
output/<目标主机>/目录(包括 session 文件与结果文件)。 - 进阶阅读:README 建议阅读完整的用户手册(user's manual)以获取全部选项、开关的说明与示例。仓库内还提供 doc/ARCHITECTURE.md 供希望理解内部架构的读者参考。
- 自定义能力入口:若想对载荷做进一步变形,tamper/ 目录提供了上百个现成脚本(如
space2comment.py、randomcase.py、base64encode.py、between.py等),可配合--tamper参数用于绕过 WAF/IDS 过滤,这也是 README 所述"检测引擎强大、功能丰富"的延伸体现。
快速上手清单
- 获取:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev(或下载发行包); - 确认环境:本机具备 Python 2.7 或 3.x;
- 查看帮助:
python sqlmap.py -h(基础)与python sqlmap.py -hh(全部选项); - 指定目标:命令行
-u <URL>,或参考 sqlmap.conf 的[Target]小节配置其他目标来源(-d、-l、-m、-r、-g); - 按需选择检测与利用深度:指纹识别、数据枚举、文件系统读写、数据库接管,对应源码落点见 plugins/dbms/、lib/controller/、lib/takeover/;
- 进阶:结合 tamper/ 脚本自定义载荷变形,配合 WAF 绕过场景使用。
说明:本文所述命令与能力均以当前仓库(sqlmap 主线版本)实际内容为准;sqlmap 仅应用于已获授权的渗透测试与安全研究场景。
【免费下载链接】sqlmapAutomatic SQL injection and database takeover tool项目地址: https://gitcode.com/gh_mirrors/sq/sqlmap
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考