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

相关推荐
Frankabcdefgh9 分钟前
前端进化论·JavaScript 篇 · 数据类型
javascript·安全·面试·数据类型·操作符·初学者·原理解析
achene_ql10 分钟前
WebRTC:去中心化网络P2P框架解析
网络·去中心化·webrtc·p2p
s_little_monster23 分钟前
【Linux】socket网络编程之TCP
linux·运维·网络·笔记·学习·tcp/ip·学习方法
森叶26 分钟前
从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节
python·php·web
智驱力人工智能36 分钟前
AI智慧公园管理方案:用科技重塑市民的“夜游体验”
人工智能·科技·安全·边缘计算·视觉分析·人工智能云计算·垂钓检测
煤灰24238 分钟前
Linux上的网络编程-初探
linux·网络
啊QQQQQ1 小时前
网络IP分片
网络·网络协议·tcp/ip
✿ ༺ ོIT技术༻1 小时前
Linux:深入理解网络层
运维·服务器·网络
myusa23 小时前
使用阿里云CLI跨地域迁移ECS实例
数据库·阿里云·php
芯盾时代3 小时前
数据出境的安全合规思考
大数据·人工智能·安全·网络安全·信息与通信