首页 » 代码审计 » 正文

文件包含漏洞

0x00:前言 

记录一下文件包含漏洞,并没有什么新姿势。

0x01:漏洞成因

PHP文件包含分2种,一种是本地文件包含,一种是远程文件包含。 PHP函数去包含任意文件,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件。

 

0x02:相关函数

  1. include()   包含并运行指定文件,当包含外部文件发生错误时,系 统给出警告,但整个 php 文件继续执行。
  2. include_once()   这个函数跟 include 函数作用几乎相同,只是他 在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么 就不重复执行了。
  3. require()   跟 include 唯一不同的是,当产生错误时候,include 下面继续运行而 require 停止运行了。
  4. require_once()   这个函数跟 require 的区别 跟上面我所讲的 include 和 include_once 是一样的。所以我就不重复了
  5. fope()   函数打开文件或者 URL。 如果打开失败,本函数返回 FALSE。
  6. readfile()   该函数读入一个文件并写入到输出缓冲。若成功,则返回从文件中读入的字节数。

0x03:系统文件

windows:

C:\Windows\System32\drivers\etc\hosts  dns解析

C:\WINDOWS\system.ini 系统配置文件

Linux:

/etc/passwd  密码

var/log  日志

etc/httpd/conf/http.conf  阿帕奇配置文件

var/lib/flag.txt 目录遍历

0x04:案例

WordPress Site Editor 1.1.1文件包含漏洞(分析)

漏洞连接https://www.exploit-db.com/exploits/44340/

漏洞文件地址:

editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php

<?php

if( isset( $_REQUEST['ajax_path'] ) && is_file( $_REQUEST['ajax_path'] ) && file_exists( $_REQUEST['ajax_path'] ) ){

    require_once $_REQUEST['ajax_path'];

判断是否存在ajax_path(可控)是否存在,如果存在包含ajax_path在用REQUEST方法请求

 

包含本地文件:

C:\Windows\System32\drivers\etc\hosts

exp如下:

http://192.168.90.177/wordpress//wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=C:\Windows\System32\drivers\etc\hosts

 

 

远程文件包含,wordpress系统上并没有成功,网上的基本上都是搭建讲解实例中很少成功因为allow_url_fopen和allow_url_include 默认是Off 需要修改成on才可以远程执行。

可以参考:

http://www.bugsafe.cn/archives/167.html

 

发表评论

You must enable javascript to see captcha here!