初窥php中的文件包含漏洞

2018-03-30  本文已影响0人  EVANIMARIA

0x00 前言


php作为一门常用的脚本语言,本身带有不少能用于文件包含的预设函数。它们既给文件操作与多文件系统的架构组织带来便利,也会因为使用不当而埋下相当大的隐患。其中,比较常用的有

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

只要修改一下file的值,就可以利用include的运行、跳转功能来运行我们上传的恶意文件或是读取本应对访问者不可见的文件(.htacess、各类配置文件等等)。而在实际攻击时,对方的部署往往没有那么简单,而是经过了各类过滤、拼接、权限控制,这时候就要用到截断等方式进行绕过了。

0x01 利用截断进行的攻击


由于截止本文发布,笔者对此的了解都不深,故只作简单叙述,之后会更新或是在下一篇中详述
截断往往用于绕过

<?php
include($_GET['file'].".html");
 ?> 

等拼接,其中最著名的就是利用%00进行的截断,php会无视%00后的内容从而实现截断,但是据说在5.3.4的版本后就已经修复了这个漏洞。除此之外,还有利用路径长度的截断,例如

?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

linux系统下需要大于4096,windows下需要大于256
又如利用点号长度的截断,当路径中包含超过256个点号时windows下就会忽略后面的内容


截断1.PNG 截断.PNG

0x02 利用内置协议的攻击


PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()copy()file_exists()filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议
引自官方手册

首先上图,一图流解析常见的伪协议攻击方法,图引自Freebuf专栏

图一.png
下面将对其进行解释
1. php.ini中的设置

php的设置文件中有如下几项设置,它们的开关与否直接决定了我们能使用哪些攻击方法、攻击效果如何


ini.PNG

其中最重要的就是前面两项,allow_url_fopen和allow_url_include的设置,其具体释义在上方英文里有,大意就是远程文件打开和远程文件包含。这两项的开关与内置协议的关系如图一。因此,在有条件的情况下先试图读取这两项的配置能帮助我们快速找到思路

未完待续,等待更新

上一篇下一篇

猜你喜欢

热点阅读