news 2026/10/14 8:52:00

PHP文件包含漏洞实战:从CTF到真实渗透测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP文件包含漏洞实战:从CTF到真实渗透测试

1. 题目背景与初步分析

这道CTF题目展现了一个典型的PHP文件包含漏洞利用场景。当我第一次打开页面时,看到的是一个简单的用户名密码登录界面,页面提示"用户名密码错误"。这种看似普通的登录表单往往隐藏着玄机,作为安全研究人员,我的第一反应就是查看页面源代码。

在源代码中发现了关键线索:md5($secret.$name)===$pass。这意味着系统验证逻辑是将一个未知的$secret字符串与用户输入的name拼接后进行MD5哈希,然后与用户提交的pass值进行比较。由于我们不知道$secret的值,直接破解这个验证机制显然不太现实。

2. 认证机制分析与绕过

2.1 Cookie哈希值观察

我尝试输入name=1并抓包,发现响应中Set-Cookie头部包含一个哈希值。当我把name改为7时,这个哈希值也随之改变。这个现象让我意识到:服务器可能在Cookie中返回了md5($secret.$name)的计算结果。

提示:在实际渗透测试中,这种将计算结果直接返回给客户端的做法非常危险,相当于暴露了部分验证逻辑的内部状态。

2.2 构造有效认证

既然Cookie中的哈希值就是pass应有的值,那么我们可以:

  1. 先提交name=1获取对应的哈希值
  2. 然后用这个哈希值作为pass,name保持为1再次提交

实际操作后发现返回404错误,看似失败了。但通过检查响应包,发现了一个重要线索:服务器在响应头中泄露了flflflflag.php文件的存在。

3. 文件包含漏洞利用

3.1 初步文件包含测试

访问flflflflag.php并抓包分析,发现这个文件存在文件包含漏洞。尝试使用常见的PHP伪协议(如php://filter)时,服务器只是返回首页面,没有显示预期内容。

3.2 目录信息收集

使用dirsearch进行目录扫描后发现了dir.php,访问它显示:

array(2) { [0]=> string(1) "." [1]=> string(2) ".." }

这是PHP的scandir()函数输出,表明当前目录为空。这种情况通常出现在/tmp目录下,提示我们可能需要利用PHP临时文件机制。

4. PHP临时文件包含攻击

4.1 攻击原理分析

PHP处理文件上传时会创建临时文件,通常在以下两种情况下这些临时文件可能被利用:

  1. 通过向phpinfo页面发送大量数据,使临时文件未被及时删除
  2. 在PHP版本<7.2时,利用PHP崩溃留下的临时文件

4.2 实际攻击实施

我编写了以下Python脚本进行攻击:

import requests from io import BytesIO payload = "<?php phpinfo()?>" file_data = { 'file': BytesIO(payload.encode()) } url = "http://target/flflflflag.php?"\ +"file=php://filter/string.strip_tags/resource=/etc/passwd" r = requests.post(url=url, files=file_data, allow_redirects=False)

这个脚本的关键点在于:

  1. 通过php://filter绕过文件包含限制
  2. 利用POST上传创建临时文件
  3. string.strip_tags过滤器会导致PHP崩溃,留下临时文件

4.3 验证攻击效果

执行脚本后再次访问dir.php,发现多出了一个随机命名的临时文件(如phpFuLK0i)。由于无法直接访问/tmp目录下的文件,需要通过路径遍历来包含这个文件:

http://target/flflflflag.php?file=../../../tmp/phpFuLK0i

成功执行后,在phpinfo页面中找到了隐藏的flag。

5. 技术细节与防御建议

5.1 漏洞成因深度分析

这道题目综合了多个安全漏洞:

  1. 敏感信息泄露(Cookie中返回哈希值)
  2. 文件包含漏洞(未对包含路径进行过滤)
  3. 临时文件竞争条件(PHP处理异常时未及时删除临时文件)

5.2 实际防御方案

对于开发人员,建议采取以下防护措施:

  1. 禁用危险函数:在php.ini中设置disable_functions = scandir,exec,passthru...
  2. 配置open_basedir限制文件访问范围
  3. 对文件包含参数进行严格白名单过滤
  4. 使用最新版PHP(>=7.4)并保持更新

6. 扩展思考与类似漏洞

这种攻击方式不仅限于CTF比赛,在真实Web应用中也存在类似风险。例如:

  • WordPress插件中的文件包含漏洞
  • 旧版PHP框架的模板注入问题
  • 文件上传功能中的竞争条件漏洞

重要提示:在实际渗透测试中,使用这种技术前必须获得明确授权,未经授权的测试可能违反法律。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 8:51:42

具身人工智能:物理世界中的智能闭环系统

1. 具身人工智能到底是什么&#xff1f;——不是“会动的AI”&#xff0c;而是重新定义智能边界的物理存在很多人第一次听到“具身人工智能”这个词&#xff0c;下意识反应是&#xff1a;“哦&#xff0c;就是机器人装了个大模型&#xff1f;”——这就像听说“量子计算”就以为…

作者头像 李华
网站建设 2026/10/14 8:50:50

PostgreSQL HOT更新:频繁更新表的索引膨胀根因与fillfactor调优

大家好&#xff0c;我是小耶&#xff0c;写功课只是为了我踩过的坑&#xff0c;你们别再踩了&#xff01;PostgreSQL有个很反直觉的现象&#xff1a;一张表的数据量没怎么涨&#xff0c;但索引文件却从几百MB膨胀到了几个GB。磁盘空间被吃掉了&#xff0c;查询反而越来越慢。这…

作者头像 李华
网站建设 2026/10/14 8:50:46

商业利益冲突的事实核验、时间线与证据链为何延迟,怎样预防?

商业利益冲突核验的周期由问题范围、来源响应、主体匹配、异常补证和复核共同决定。企业应按阶段管理起算、暂停、升级、截止时点和版本更新&#xff0c;不能用一个平均天数掩盖证据质量。商业利益冲突核验容易延迟&#xff0c;通常不是调查人员“查得慢”&#xff0c;而是核验…

作者头像 李华
网站建设 2026/10/14 8:50:26

Python+Django构建校园舆情监测系统实战

1. 项目概述 校园舆情管理系统是一个基于PythonDjango框架开发的Web应用&#xff0c;主要用于监测和分析大学生在微博平台上的言论倾向。作为一名长期从事校园信息化建设的开发者&#xff0c;我发现在当前高校管理工作中&#xff0c;如何及时掌握学生群体的舆情动态是一个亟待解…

作者头像 李华
网站建设 2026/10/14 8:50:08

CS2闪退帧跳原因与四层穿透式排查法

1. 这不是游戏问题&#xff0c;是系统级协同失配的典型症状 “CS2 更新后疯狂闪退、弹溢出错误、帧数跳水”——这句标题我上周在三个不同技术群被了十七次&#xff0c;每次点开都是同一张蓝底白字的错误截图&#xff0c;右下角还带着Windows任务栏时间戳。它根本不是一句抱怨&…

作者头像 李华