标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-42]   作者: mickey 发表于: [2017-07-11]  [2017-07-12]被用户:ecawen 修改过

本文共 [696] 位读者顶过

文件包含漏洞

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

常见的漏洞代码

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.包含文件上传的图片
if ($_GET[page]) {
include($_GET[page]);
} else {
include "show.php";
} //利用page=/uploads/xxx.jpg
用户控制$_GET[page]里面内容 包含一个带有恶意代码的上传图片。getshell
(其中要找到上传图片的绝得路径)
2.包含文件上传的第二种
if ($_GET[page]) {
include("./action/".$_GET[page]);
} else {
include "./action/show.php";
} //利用page=../uploads/xxx.jpg 跳出当前目录
3.第三种包含上传
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.



上传一个图片,包含文件,include函数在遇到 2.



使用跳出。包含文件
3.



我的php版本是5.5.9不能使用截断
4.



主要url栏里面回会把尖括号换成16进制。
可以通过curl请求来完成。



然后包含日志文件getshell


或是通过抓包来插入一句话




条件有点困难
远程文件包含
远程编写一个非php后缀的文件。里面的内容是php代码。
用来实现远程加载,恶意代码。getshell


防御

  • PHP中使用open_basedir限制访问区域
  • 过滤.(点)/(斜杠)\(反斜杠)
  • 禁止服务器远程文件包含。

评论

暂无
发表评论
 返回顶部 
热度(696)
 关注微信