本文目录导读:

- 第一阶段:黑盒探测(建立攻击面地图)
- 第二阶段:白盒静态审计(核心定位)
- 第三阶段:动态验证与触发(确认存在性)
- 第四阶段:辅助工具与全局配置排查
- 第五阶段:业务逻辑漏洞(特殊定位法)
- 总结:最快的定位路径(套路)
针对PHP项目的防守漏洞识别与定位,需要一套系统化、层次化的排查思路,单纯的代码审计容易遗漏业务逻辑漏洞,而单纯依赖扫描工具又会产生大量误报。
以下是一套从黑盒(外部视角)到白盒(源码视角)、从静态到动态的完整漏洞定位实战指南:
第一阶段:黑盒探测(建立攻击面地图)
在动手看代码之前,先用工具确定“哪里可能有漏洞”,这能帮你快速缩小范围。
-
资产指纹与路径扫描
- 工具:
Dirsearch、ffuf、Nuclei。 - 定位:扫描出隐藏的备份文件(
.bak)、源码泄露(.git)、未授权访问的admin目录、旧的接口(/api/v1/old/)。 - 识别技巧:如果扫出
.git,直接用git-dumper拉取源码——这是最高效的定位方式。
- 工具:
-
参数污染与输入点收集
- 方法:利用Burp Suite爬虫,或者通过查看前端JS文件,找出所有接收用户输入的地方(GET参数、POST表单、JSON体、Header头)。
- 重点标记:
id、uid、page、file、url、path、order、sort等常见高风险参数名,后续重点看这些。
-
入口点探针测试(触发报错)
- 方法:输入单引号或,观察返回结果。
- 定位:如果页面返回SQL语法错误或原生的PHP警告(如
Warning: mysql_fetch_array()),说明此处存在原生写法的SQL查询,且错误报告未关闭,这种地方的漏洞往往比较低级但可直接利用。
第二阶段:白盒静态审计(核心定位)
结合黑盒结果和业务逻辑,深入源码定位问题,使用RIPS、Fortify或PHPStan(配合安全规则)可以输出危险函数列表,但关键是结合业务上下文判断是否可利用。
高危函数特征追踪法(寻找触发点)
追踪以下关键字一旦被用户输入污染,即为漏洞点:
- SQL注入:搜索
mysqli_query、PDO->query、where+ 变量拼接。重点看变量是否被单引号包裹('$id')即可判断。 - 文件包含:搜索
include、require、file_get_contents。重点看变量是否拼接后缀(.php)以及是否可控路径(如/uploads/)。 - 命令执行:搜索
exec、system、shell_exec、passthru、proc_open。只要参数拼接了用户输入且无白名单过滤,大概率RCE。 - 文件上传:搜索
move_uploaded_file。重点看后缀校验(是校验扩展名还是MIME类型,是否在服务端用getimagesize校验)。 - 反序列化:搜索
unserialize、__destruct、__wakeup。重点看unserialize的数据是否来自$_COOKIE或$_POST,且是否存在魔法函数。
数据流追踪法(确认污点可达)
找到危险函数后,反向追踪其参数来源。
- 正向追踪:
$_GET->trim()->addslashes()->sql query。- 如果经过了
addslashes和单引号包裹,闭合难度增大,判定为低危或误报。 - 如果直接
$_GET->sql query,则高危。
- 如果经过了
- 反向追踪:看到
$db->query(sql),向上看sql从哪里组装来的。 - 特别关注:全局过滤机制,查看
common.php或init.php中是否有addslashes或htmlspecialchars的全局魔法引号处理,这决定了所有漏洞的利用难度。
框架与原生代码差异识别
如果是ThinkPHP、Laravel等框架,漏洞定位逻辑不同:
- ThinkPHP:重点看控制器(Controller)中的
input()函数,如果使用手动拼接(如Db::query("select * from user where id=" . input('id'))),漏洞极大,框架自带ORM通常安全。 - Laravel:重点看
Request::get()和DB查询构造器,重点看是否使用了whereRaw或DB::raw()。
第三阶段:动态验证与触发(确认存在性)
静态发现后,必须动态验证,避免误报。
-
SQL注入触发定位
- 使用Burp发送
id=1 and 1=2(返回空)与id=1 and 1=1(返回正常)对比,确认数字型注入。 - 发送
id=1',看是否报错,报错信息中是否包含SQL片段。 - 如果过滤了空格和
union,尝试用或十六进制绕过,验证过滤强度。
- 使用Burp发送
-
文件上传绕过验证
- 直接上传
.php被拦截,改为上传.php3、.phtml、.php.(末尾加点)、.php%00.jpg。 - 上传图片马后,尝试包含该文件(
/index.php?page=uploads/1.jpg),验证是否GETSHELL。
- 直接上传
-
重定向与越权验证
- 修改Cookie中的
user_id为其他数值,或者修改JWT中的签名(若无签名验证),查看是否可访问其他用户数据。
- 修改Cookie中的
第四阶段:辅助工具与全局配置排查
很多漏洞的根源不在具体业务代码,而在配置。
-
敏感信息泄露(高危信息)
- 定位:扫描全项目,寻找
config.php中的数据库明文密码、Redis密码、云厂商密钥(AccessKey),登录云平台,直接接管服务器。 - 检查
phpinfo()页面是否暴露,且FastCGI端口是否对外开放。
- 定位:扫描全项目,寻找
-
错误处理逻辑(Debug模式)
- 如果
display_errors = On,所有SQL报错、文件路径报错会暴露物理路径,大大降低利用门槛(这就是为什么很多SQL注入是报错注入的原因)。
- 如果
-
日志审计(事后回溯)
- 如果你的目标是寻找已存在的攻击痕迹,直接查看
/var/log/apache2/access.log或error.log。 - 定位特征:搜索包含
select、union、../../../../etc/passwd、/proc/self/environ等关键字的访问记录,这些日志指向的请求参数位置,就是被攻击的漏洞点。
- 如果你的目标是寻找已存在的攻击痕迹,直接查看
第五阶段:业务逻辑漏洞(特殊定位法)
这是纯工具测不出来的,需要人工逻辑分析:
- 支付/订单逻辑:找接口(如
/api/pay.php),重点看金额参数(money、price)是否从客户端传入,是否校验了签名或服务端重算价格。 - 验证码/密码重置:定位
send_code函数,看验证码是否存储在Session中(安全)还是直接存储在Cookie或前端返回的JSON中(危险)。 - 越权:定位所有涉及查询详情的接口(如
user.php?id=100),尝试将ID改为101,如果返回了新用户数据,则存在水平越权(IDOR)。
最快的定位路径(套路)
- 先看报错 -> 触发报错,看物理路径和源码上下文。
- 先看上传 -> 搜
move_uploaded_file,找上传点,一般最容易getshell。 - 先看登录 -> 搜
select * from user对应代码,看是否存在万能密码或SQL注入。 - 先看入口 -> 查看
index.php或router.php(路由核心),看它如何解析URL,这里经常有文件包含漏洞。 - 后门查找 -> 在
uploads目录、public目录搜索.php后缀文件,查看是否有eval($_POST['x']),很多项目被植入过Webshell,这就是防守方最容易忽略的漏洞。
一句话核心:找用户可控变量,追踪到危险函数(SQL/文件/命令),结合全局过滤器绕过,即可完成从识别到定位的全过程。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播