PHP 7.1 网站是否存在目录遍历漏洞,核心取决于用户输入是否直接拼入路径及服务端是否执行有效路径规范化与边界校验,而非版本本身;需重点检测文件下载、模板加载、日志查看等接口,结合URL编码、Unicode、双斜线等载荷手工验证响应差异。

PHP 7.1 网站是否存在目录遍历漏洞,核心看两点:用户输入是否直接拼入文件路径、服务端是否做了有效路径规范化与边界校验。检测不依赖版本号本身,而是聚焦具体功能点的行为逻辑。
重点检测功能入口
目录遍历通常出现在以下几类接口中,需逐个验证:
-
文件下载功能:如
/download.php?file=report.pdf或/api/file?name=logo.png -
模板/静态资源加载:如
/template?name=home.tpl、/theme?file=css/style.css -
日志查看或配置读取页面:如
/admin/log?date=2021-10-17、/config?file=database -
ThinkPHP 类框架的调试/路由参数:如含
_method=__construct、filter[]=、get[]=的请求,可能间接触发路径解析
手工验证常用载荷
对疑似参数(如 file、name、filename、path)依次尝试以下请求,观察响应差异:
-
?file=../../../../etc/passwd(Linux 系统敏感文件) -
?file=..%2f..%2f..%2f..%2fetc%2fpasswd(URL 编码绕过) -
?file=....//....//....//etc/passwd(双斜线混淆,部分解析器会归一化) -
?file=%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd(Unicode 编码绕过,适用于某些 PHP + Apache 组合) -
?file=php://filter/convert.base64-encode/resource=/etc/passwd(若支持伪协议,可绕过文件存在性检查)
成功标志不是一定返回完整文件内容,而是出现:HTTP 200 + 非空响应体、报错信息中暴露系统路径、返回内容含 root:x:0:0 或类似系统特征字符串。
注意 PHP 7.1 下的特殊表现
PHP 7.1 对部分编码和路径处理更严格,但不代表安全:
- 原生
realpath()在遇到不存在路径时返回false,若代码未做判空就继续拼接,仍可能被绕过 - 使用
basename()提取文件名只能防单层遍历,无法拦截../../../etc/passwd这类多级跳转 - ThinkPHP 5.x 在 PHP 7.1 下仍存在
think\__include_file等可控类路径包含风险,需结合日志或 session 路径探测 - 若目标用
open_basedir限制,但配置为/var/www/html/:/tmp/,攻击者可尝试读取/tmp/下的 session 或日志文件
辅助判断线索
无需登录或高权限,也能通过以下方式快速缩小范围:
- 抓包看响应头中是否有
X-Powered-By: PHP/7.1.x或错误页显示PHP 7.1字样 - 访问
/phpinfo.php或触发报错,确认 PHP 版本及关键配置(如disable_functions、open_basedir、allow_url_include) - 对疑似路径参数加
?file=空值,观察是否报Warning: file_get_contents(): Filename cannot be empty—— 说明后端确实调用了文件读取函数 - 用
scandir()或glob()类 payload 测试(如?file[]=.),看是否返回目录结构
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











