zoukankan      html  css  js  c++  java
  • 文件包含漏洞

    文件包含漏洞

    产生的原因:通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶意代码注入
    当包含文件在服务器本地上,就形成本地文件包含,当包含的文件在第三方服务器是,就形成可远程文件包含。

    常见的漏洞代码

    if (isset($_GET[page])) {
    include $_GET[page];
    } else {
    include "home.PHP";
    }
    其中$_GET[page]使用户可以控制变量。如果没有严格的过滤就导致漏洞的出现
    

    包含文件的函数

    1.include()

    2.include_once()

    3.require()

    4.require_once()

    代码审计的时候,是否是变量,不过滤,过滤不严格,函数include/require

    远程文件包含和本地文件包含的配置区别

    本地文件包含php.ini配置文件中开启allow_url_include
    远程文件包含与本地文件包含的区别(开启allow_url_include和allow_url——ftp on)
    远程文件(包括本地文件包含)包含比本地文件包含的危害大

    本地文件包含利用

    • 上传图片GETshell
    • 读取文件,读取php文件
    • 包含日志文件获取webshell
     1.首先找到文件存放位置
     有权限读取apache配置文件或是/etc/init.d/httpd
     默认位置/var/log/httpd/access_log
    
    2.让日志文件插入php代码
    发送url请求时后插入php代码,一般使用burp抓包修改
    curl发包
    插入到get请求,或是user-agent部分
    3.包含日志文件(必须要权限包含)
    
    • 包含/proc/self/environ 文件webshell
    • phpinfo.php 可以包含临时文件(显示临时文件路径)写工具发包上传文件。查看返回信息路径。在使用include包含文件(速度要求快)
    • 包含data//或是php://input协议(伪协议,需要allow_url_include=On)
    1.包含文件上传的图片
    <?php
    if ($_GET[page]) {
    include($_GET[page]);
    } else {
    include "show.php";
    } //利用page=/uploads/xxx.jpg
    用户控制$_GET[page]里面内容 包含一个带有恶意代码的上传图片。getshell
    (其中要找到上传图片的绝得路径)
    2.包含文件上传的第二种
    <?php
    if ($_GET[page]) {
    include("./action/".$_GET[page]);
    } else {
    include "./action/show.php";
    } //利用page=../uploads/xxx.jpg 跳出当前目录
    3.第三种包含上传
    <?php
    if ($_GET[page]) {
    include("./action/".$_GET[page].".php");
    } else {
    include "./action/show.php";
    } // 可以看出会在后面追加一个.php后缀 ../uploads/xxx.jpg%00截断后面的.php
    需要开启(magic_quotes_gpc=off,php小于5.3.4)
    

    windows环境下

    IIS配置文件,查找日志路径

    apache/nginx
    集成环境
    包含日志文件,查看是与否有权限读取文件(可以解析正常)。

    事例

    1.## 文件包含漏洞
    产生的原因:通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶意代码注入
    当包含文件在服务器本地上,就形成本地文件包含,当包含的文件在第三方服务器是,就形成可远程文件包含。

    常见的漏洞代码

    if (isset($_GET[page])) {
    include $_GET[page];
    } else {
    include "home.PHP";
    }
    其中$_GET[page]使用户可以控制变量。如果没有严格的过滤就导致漏洞的出现
    

    包含文件的函数

    1.include()

    2.include_once()

    3.require()

    4.require_once()

    代码审计的时候,是否是变量,不过滤,过滤不严格,函数include/require

    > 远程文件包含和本地文件包含的配置区别
    
    本地文件包含php.ini配置文件中开启allow_url_include
    远程文件包含与本地文件包含的区别(开启allow_url_include和allow_url——ftp on)
    远程文件(包括本地文件包含)包含比本地文件包含的危害大
    
    #### windows环境下
    IIS配置文件,查找日志路径
    
    apache/nginx
    集成环境
    包含日志文件,查看是与否有权限读取文件(可以解析正常)。
    
    #### 事例
    1.
    ![](http://upload-images.jianshu.io/upload_images/2495234-669882c3b1b47585.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    上传一个图片,包含文件,include函数在遇到<?会按php解析
    2.
    ![](http://upload-images.jianshu.io/upload_images/2495234-8c200d9fd7e58efa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    使用跳出。包含文件
    3.
    ![](http://upload-images.jianshu.io/upload_images/2495234-40338cee7529f751.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    我的php版本是5.5.9不能使用截断
    4.
    ![](http://upload-images.jianshu.io/upload_images/2495234-361c8dbd0e7e4ba6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    主要url栏里面回会把尖括号换成16进制。
    可以通过curl请求来完成。
    
    ![](http://upload-images.jianshu.io/upload_images/2495234-08a3fcdbd6a98ab9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    然后包含日志文件getshell
    ![](http://upload-images.jianshu.io/upload_images/2495234-d5e780b613581f78.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    或是通过抓包来插入一句话
    
    ![](http://upload-images.jianshu.io/upload_images/2495234-3305e5c95124c808.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    
    ![](http://upload-images.jianshu.io/upload_images/2495234-be030cfa44955a06.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    条件有点困难
    **远程文件包含**
    远程编写一个非php后缀的文件。里面的内容是php代码。
    用来实现远程加载,恶意代码。getshell
    
    ![](http://upload-images.jianshu.io/upload_images/2495234-304f940df57b2c16.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    ### 防御
    * PHP中使用open_basedir限制访问区域
    * 过滤.(点)/(斜杠)(反斜杠)
    * 禁止服务器远程文件包含。

    文章来源于转载



  • 相关阅读:
    java枚举
    [bzoj3436]小K的农场【差分约束系统】【判负环】
    [bzoj1085][SCOI2005]骑士精神【暴力】
    [bzoj1034][ZJOI2008]泡泡堂BNB【贪心】
    [bzoj1046][HAOI2007]上升序列【dp】
    [bzoj1050][HAOI2006]旅行comf【MST】
    [bzoj1047][HAOI2007]理想的正方形【单调队列】
    [bzoj1004][HNOI2008]Cards【群论】
    [bzoj1045][HAOI2008] 糖果传递【构造】
    [bzoj4589]Hard Nim【FWT】
  • 原文地址:https://www.cnblogs.com/iors/p/9776233.html
Copyright © 2011-2022 走看看