SQLMap工具分析
结构
📁 目录(Folders)
1. data/ - 数据文件目录
- 作用:存放各种静态数据文件,为检测过程提供支持。
- 包含内容:
- payloads(攻击载荷)
- 关键字字典(如
keywords.txt) - 用户代理字符串(
user-agents.txt) - 错误消息模式库
- 等等
2. doc/ - 文档目录
- 作用:存放项目文档、使用手册、Wiki 内容等。
- 包含内容:
- 使用说明
- 技术文档
- 翻译文件
3. extra/ - 额外工具和脚本
- 作用:存放一些有用的附加工具,但不是核心功能。
- 包含内容:
sh.py- 运行时命令行工具beep/- 操作完成提示音dns/- DNS 相关工具icmpsh/- ICMP 隧道工具misc/- 杂项工具
4. lib/ - 核心库文件 ★★★
- 作用:SQLMap 的核心代码库,所有主要功能都在这里。
- 重要子目录:
core/- 核心组件(配置、数据、异常、补丁等)controller/- 主控制器parse/- 解析器(命令行、目标等)request/- HTTP 请求处理techniques/- 各种注入技术实现utils/- 工具函数
5. plugins/ - 插件目录
- 作用:存放数据库、语言等特定插件。
- 包含内容:
dbms/- 各种数据库管理系统插件(MySQL, Oracle, MSSQL等)generic/- 通用插件languages/- 编程语言相关插件
6. tamper/ - 混淆脚本目录 ★
- 作用:存放用于绕过 WAF/IDS 的混淆脚本。
- 重要性:这是 SQLMap 最强大的特性之一,可以自动修改 payload 以逃避检测。
- 示例:
base64encode.py,charencode.py,space2comment.py等
7. thirdparty/ - 第三方库
- 作用:存放 SQLMap 依赖的第三方 Python 库。
- 包含内容:
colorama/- 跨平台彩色终端输出magic/- 文件类型检测chardet/- 字符编码检测- 等等
📄 文件(Files)
8. .gitattributes - Git 属性配置
- 作用:定义 Git 版本控制的行为,如文件合并策略、diff 方式等。
9. .gitignore - Git 忽略文件
- 作用:指定哪些文件/文件夹不应该被提交到 Git 仓库。
- 通常忽略:临时文件、日志、缓存、系统文件等。
10. .pylintrc - Python 代码检查配置
- 作用:Pylint 工具的配置文件,用于保持代码质量和风格统一。
11. .travis.yml - 持续集成配置
- 作用:Travis CI 的配置文件,用于自动化测试和构建。
12. COMMITMENT - 承诺文件
- 作用:通常包含开发者的承诺或行为准则。
13. LICENSE - 许可证文件
- 作用:GNU 通用公共许可证 v2.0,定义软件的使用、修改和分发条款。
14. README.md - 项目说明文件
- 作用:项目的主要说明文档,包含:
- 简介和特性
- 安装说明
- 基本使用方法
- 截图和演示
🎯 核心可执行文件
15. sqlmap.conf - 主配置文件
- 作用:SQLMap 的默认配置文件,包含所有可配置选项。
- 重要配置项:
- HTTP 请求设置
- 注入检测参数
- 性能优化选项
- 输出格式设置
16. sqlmap.py - 主程序入口 ★★★
作用:SQLMap 的主要启动脚本,命令行工具的主入口。
使用方法:
1
python sqlmap.py -u "http://example.com/page.php?id=1"
17. sqlmapapi.py - RESTful API 服务
作用:提供 HTTP API 接口,允许通过 RESTful 调用使用 SQLMap。
使用场景:
- 集成到其他应用中
- 远程控制 SQLMap
- 自动化测试流程
启动方式:
1
python sqlmapapi.py -s # 服务端
🏗️ 架构总结
这个文件结构体现了 SQLMap 的模块化设计:
lib/- 核心引擎plugins/- 数据库扩展支持tamper/- 绕过检测能力data/- 知识库和资源sqlmap.py- 用户界面(CLI)sqlmapapi.py- 程序接口(API)
这种结构使得 SQLMap 功能强大且易于维护和扩展。
sqlmap.py分析
这是一个 SQLMap 主程序入口文件的完整代码分析。SQLMap 是一个开源的 SQL 注入自动化检测和利用工具。
代码结构概览
1. 文件头与版权信息
1 | #!/usr/bin/env python |
- 指定 Python 解释器
- 版权声明和许可证信息
2. 模块导入与初始化
1 | try: |
关键设计:
- 优先进行版本检查,确保环境正确
- 使用
dont_write_bytecode提高性能和减少磁盘占用
3. 导入核心模块
1 | import bdb, distutils, glob, inspect, json, logging, os, re, shutil, sys, tempfile, threading, time, traceback, warnings |
安全特性:
- 过滤不必要的警告信息
- 特别处理 Python 2 过期的警告
4. 导入 SQLMap 核心模块
1 | from lib.core.data import logger |
架构设计:
lib.core.data:全局数据存储(配置、知识库、命令行选项)lib.core.common:通用工具函数lib.core.option:选项初始化和管理lib.core.patch: Monkey-patch 和交叉引用解析
5. modulePath() 函数
1 | def modulePath(): |
跨平台兼容性:
- 处理普通运行和打包后运行两种情况
- 统一 Unicode 编码处理
6. checkEnvironment() 函数
1 | def checkEnvironment(): |
环境验证:
- 路径编码兼容性检查
- 版本冲突检测
7. main() 函数 - 核心逻辑
7.1 初始化和配置
1 | def main(): |
7.2 命令行处理
1 | # 解析命令行参数 |
7.3 API 模式支持
1 | if conf.get("api"): |
7.4 功能分发逻辑
1 | if not conf.updateAll: |
7.5 爬虫模式支持
1 | if conf.crawlDepth and conf.bulkFile: |
8. 异常处理体系
SQLMap 实现了精细的异常分类:
python
1 | except SqlmapUserQuitException: # 用户主动退出 |
9. 错误诊断和恢复
代码包含大量的特定错误模式识别:
python
1 | # 内存错误 |
10. 资源清理和退出处理
python
1 | finally: |
架构特点总结
- 模块化设计:清晰的模块职责分离
- 错误恢复:完善的异常处理和错误诊断
- 资源管理:自动化的资源清理机制
- 多模式支持:支持 CLI、API、测试等多种运行模式
- 跨平台兼容:处理不同操作系统的特性差异
- 安全考虑:代码完整性检查和安全警告处理
这个入口文件体现了 SQLMap 作为一个成熟安全工具的专业性设计,具备良好的可维护性和用户体验。