SQLMap 不挖 PHP 漏洞,只检测利用 SQL 注入;能否使用取决于 URL 是否存在可控数据库查询参数,与是否为 PHP 无关;需先手动验证注入迹象,再合理配置 sqlmap 参数绕过 WAF 或适配响应格式。

SQLMap 本身不“挖 PHP 漏洞”,它只检测和利用 SQL 注入——而 PHP 只是常见承载注入点的后端语言之一。能不能用 sqlmap,关键看目标 URL 是否存在可被控制的数据库查询参数,跟是不是 PHP 关系不大。
怎么确认一个 PHP 页面有 SQL 注入点?
别急着上 sqlmap,先手动验证是否存在注入迹象:
- 在参数值末尾加单引号(如
?id=1'),看是否报错(MySQL syntax error、Unclosed quotation mark等) - 用布尔盲注试探:
?id=1 AND 1=1和?id=1 AND 1=2,观察页面响应是否不同(内容变化、响应时间差异) - 注意:很多现代 PHP 应用用 PDO 预处理或 ORM,即使参数拼接也不一定可注入;反之,老式
mysql_query($_GET['id'])类代码大概率可打
sqlmap 怎么跑带参数的 PHP URL?
最基础命令就是指定 URL 和参数,sqlmap 会自动识别并测试:
sqlmap -u "http://target.com/page.php?id=1" --batch
常见补充选项:
立即学习“PHP免费学习笔记(深入)”;
-
--level=3 --risk=3:提高检测深度(默认 level=1,不测 Cookie/UA 等位置) -
-p "id,user":显式指定要测试的参数名(避免误测无关参数) -
--dbms="mysql":若已知后端数据库类型,能跳过 DBMS 指纹环节,提速 - 如果页面需要登录,用
--cookie="PHPSESSID=abc123"或--auth-type=basic --auth-cred="user:pass"
为什么 sqlmap 在 PHP 页面上跑不动或报错?
不是 PHP 的问题,而是环境或交互逻辑卡住了:
- 目标用了 WAF(如 Cloudflare、ModSecurity):
sqlmap默认请求特征明显,容易被拦截;可加--random-agent、--delay=1或用--tamper=space2comment绕过 - PHP 页面返回 JSON 或 JS 跳转:默认
sqlmap依赖 HTML 响应体判断,需加--skip-heuristics或用--technique=B(仅布尔盲注) - 参数被二次编码(如
%2527是%27的再编码):用--url-encode或手动解码后再喂给sqlmap - Kali 自带的
sqlmap版本太旧(如 1.3.x):某些 PHP 8+ + PDO 场景识别不准,建议git clone官方最新版
真正麻烦的从来不是“PHP 还是 Python”,而是你没看清那个 ?id=1 后面到底有没有拼进 query(),以及服务器有没有在你发第 3 个 payload 时就把你的 IP 加进 iptables。











