Web漏洞-文件包含漏洞超详细全解(附实例)

news2024/10/7 16:27:18

目录

一、导图

二、文件包含漏洞

1.脚本代码

2.原理演示

3.漏洞成因

4.检测方法

5.类型分类

三、本地文件包含漏洞的利用

<无限制本地文件包含>

<有限制本地文件包含>

四、远程文件包含漏洞的利用

<无限制远程文件包含>

<有限制远程文件包含>

五、协议的玩法

<读取文件内容>

<执行代码>

<写入一句话后门木马>

​六、南邮杯CTF实例

​七、i春秋百度杯实例

八、某CMS文件包含漏洞实例


一、导图

二、文件包含漏洞

1.脚本代码

        文件包含各个脚本代码。

ASP,ASPX,JSP,PHP等

<!-—#include file="1.asp " -->

<!--#include file="top.aspx"-->

<c:import url="http://lthief.one/1.jsp">

<jsp:include page="head .jsp" / >

<%@ include file="head.jsp" %>

<?php Include ( 'test.php ' ) ?>

2.原理演示

        (1)创建一个名为include.php的php文件,文件内的代码如下图所示。

        (2)创建一个名为1.txt的文件,文件内的内容如下图所示。

        (3)直接访问include.php文件,添加filename的参数值为1.txt。可以看到网站成功执行了文件1.txt内的php代码。

        (4)但是如果我们直接访问1.txt文件,网站就只会将其当作一串文本进行输入。而当我们利用了文件包含漏洞进行访问时,网站就会将其当作代码进行执行。

        总结:将指定文件内的内容以网站脚本代码类型进行执行。如:如果网站是php的,就当作php代码进行执行;如果网站是jsp的,就当作jsp代码进行执行;

3.漏洞成因

        (1)可空变量:$filename。

        (2)漏洞函数:include()。

4.检测方法

        (1)白盒检测:代码审计。

        (2)黑盒检测:采用漏洞扫描工具,或者搜素公开漏洞,或者查看网址后面的参数,是否接收的是文件。

5.类型分类

        (1)本地包含:只包含本地的文件。

        (2)远程包含:包含互联网可以访问到的文件,危害更大。

        (3)无限制和有限制:两种包含类型都存在无限制和有限制的两种情况,无限制就是没有限制直接拿来用就可以,有限制是可能会存在一些干扰,需要用到一些特殊的方法进行绕过。

三、本地文件包含漏洞的利用

<无限制本地文件包含>

1.当我们要进行跨目录的文件包含时,就需要用到“../”符号来向上一级进行跳转了。

2.比如我们要对下图路径下的www.txt进行文件包含。

3.我们需要将参数的值设为如下图所示的样式。

<有限制本地文件包含>

1.这里的代码比上面无限制的代码多了“.html”。

2.当我们此时再对1.txt文件进行文件包含的时候,就相当于包含了1.txt.html。

3.那么面对这种情况我们该怎么办呢?下面介绍几种绕过的方法。

4. 第一种:%00截断:此方法要求php版本<5.3.4。

        只需在文件末尾添加“%00”来将后面的“.html”进行截断。

        可以看到下图进行%00截断后成功将文件中的代码进行了执行。 

5. 第二种:长度截断:windows,点号需要长于250;linux,点号需要长于4096。

        这种方法类似与waf绕过过程中的垃圾数据填充的方法。

        利用垃圾数据进行填充,达到对应服务器系统文件命名的最大长度,从而将“.html”挤出,让其无法添加。

        只需在文件末尾添加类似“/./././././././.·····”、“..........·····”等的垃圾数据来将后面的“.html”挤出。

        可以看到下图进行长度截断后成功将文件中的代码进行了执行。 

四、远程文件包含漏洞的利用

        如果代码里面有限制只能包含本地文件的话,就不会造成远程文件包含漏洞。

        如果代码里面没有限制,并且搭建平台上的设置里也没有设置不允许包含远程远程文件的话,就可能造成远程包含文件漏洞。

        在php里就有这样一个开关——allow_url_include。可以通过phpinfo()来查看到。

         如果这个开关是开启状态,就允许地址的远程请求。

<无限制远程文件包含>

1.首先演示无限制的远程文件包含。

2.访问如下图所示的url可以看到这个文件内包含这样一串内容。

3.访问这个远程的文件,可以看到网站对远程文件内的内容进行了执行。

4.我们将远程文件内的代码修改为一个后门代码。

5.再次进行访问,可以看到前面的“ni shi gej ib!”成功被执行了,而后面的后门代码却看不到,这是正常现象,此时的后门代码其实已经被执行了,执行效果就是空白的而已。 

6.使用工具“菜刀”连接后门代码。

7.打开工具后将地址以及密码进行输入并修改脚本类型为php,然后点击添加。

8.可以看到成功连接上了后门文件。

<有限制远程文件包含>

1.这里的代码比上面无限制的代码多了“.html”。

2.当我们此时再对远程文件进行文件包含的时候,就失败了。

 3.那么面对这种情况我们该怎么办呢?下面介绍几种绕过的方法。

4. 第一种:末尾加%20

 5. 第二种:末尾加%23

 6. 第三种:末尾加?

五、协议的玩法

        优秀文章:https://www.cnblogs.com/endust/p/11804767.html

<读取文件内容>

1.在参数后输入下面的内容来对1.txt文件进行读取。

2.读取到的内容是经过base64加密过的(防止乱码),经过解密后即可得到文件内容本来的样子。 

<执行代码>

1.在参数后输入下面的内容,同时在post部分写入要执行的代码。

<写入一句话后门木马>

1.在参数后输入下面的内容,同时在post部分写入要执行的代码。

2.查看网站目录,可以看到“shell.php”后门代码被成功写入了。

六、南邮杯CTF实例

        地址:asdf

1.打开网站。

2.点击表述文字。

3.首先判断其可能存在文件包含漏洞,因为最后参数部分是“file=show.php”,很明显大概率是文件参数。 

4.因为这里展示的是show.php文件,因此我们想到直接去访问show.php文件,可以看到当我们直接访问show.php时,网站返回的也是同样的内容。

 5.因此我们可以判断出show.php的内容就是text123,放在参数的后面无非就是将其进行包含之后再执行输出,到这里我们就不难判断出这里考的明显就是文件包含漏洞了。

6.我们首先来判断它的操作系统,将php改为phP然后访问,可以看到网页返回错误,因此判断其是linux操作系统

 7.因此我们在这里执行linux下的ls命令,可以看到网页返回了下面的内容。

8.我们换一条命令执行,网页依然返回同样的内容,说明网站对此存在拦截。

 9.这个方法不可行,因此我们想到协议的玩法,想到下面的方法,首先尝试读取index.php,发现读取成功了。

10.将读取到的内容进行解码。

11.将解码到的文件放入一个文本文档里进行查看,因为在上面的软件里查看格式不是很清楚。

12.成功获取到了flag值。

七、i春秋百度杯实例

1.打开靶场可以看到下面的内容。

2.阅读页面内给出的代码可以知道它的意思为:如果接收到了path变量,就用include将接收到的值进行包含,否则就执行下面的phpinfo.php。

3.进行验证一下,发现我们分析的没有问题。

4.我们首先来包含index.php文件,可以看到成功进行了读取。

 5.判断其操作系统——>linux系统。

6.采用linux的命令来读取目录。

 7.因为后面的两个文件我们已经读取过了,所以我们来读取第一个文件来查看它的内容。

 8.发现什么也没读取到。

9.查看网页的源代码,可以看到flag在这里。 

八、某CMS文件包含漏洞实例

1.打开网站可以看到下面的页面。

 2.那么我们是如何发现这个网站的漏洞的呢?

3.首先我们知道它是ekucms了,因此我们可以先直接到网上搜索这个cms的漏洞,有我们就直接拿来利用,没有我们就将原码下载下来自己进行分析。 

4.可以看到确实是存在漏洞的。

5.找到一篇文章,可以得知它的思路是: 因为这个cms不存在文件上传,所以只能访问网站内的固有文件。但是因为这个cms存在本地文件包含漏洞,所以我们可以将一句话木马写到网站的日志里,然后利用本地文件包含漏洞包含这个日志文件,然后再利用菜刀等工具进行连接即可。

6.将文章内的url进行复制,然后放到我们的浏览器内修改后进行访问 。

7.可以看到网页返回了错误信息,但是此时url内容已经被写入到了网站的日志里。 

        解释:为什么这个后门代码代码的两侧不用加"<?php?>",因为在进行文件包含的时候,回根据网站的脚本类型来执行文件内的内容,而这里网站的脚本类型本身就是php,所以不加"<?php?>"同样也会按照php代码进行执行。

8.该日志是以时间日期命名的,首先访问下面的url来触发后门代码。

 8.添加参数来进行测试,可以看到成功将参数代码进行了执行。

 9.到这里我们基本就可以执行任意的代码了,也就成功拿下了网站的权限。

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

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

相关文章

开心档之C++ 多线程

C 多线程 目录 C 多线程 创建线程 终止线程 实例 实例 实例 向线程传递参数 实例 连接和分离线程 实例 std::thread 实例 多线程是多任务处理的一种特殊形式&#xff0c;多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下&#xff0c;两种类型的多任务…

NumPy 初学者指南中文第三版:11~14

原文&#xff1a;NumPy: Beginner’s Guide - Third Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 十一、玩转 Pygame 本章适用于希望使用 NumPy 和 Pygame 快速轻松创建游戏的开发人员。 基本的游戏开发经验会有所帮助&#xff0c;但这不是必需的。 您将学…

LinuxGUI自动化测试框架搭建(八)-安装LinuxGUI自动化测试工具Dogtail

(八)-安装LinuxGUI自动化测试工具Dogtail 1 Dogtail简介2 Dogtail技术原理3 Dogtail安装4 Dogtail的sniff组件1 Dogtail简介 官网:Dogtail官网文档; Linux平台能够支持Accessibility去获取元素控件的工具,主要有Dogtail和LDTP两个工具;dogtail 用 Python 编写,是python …

SpingBoot——SB整合MB的web项目模板

这里是我以后用到的项目都要先创建的模板 第一步 新建一个springboot项目&#xff0c;这里jdk版本和java版本根据需求选择 第二步 ——选择springboot版本和他提供的可以选择安装的依赖 这里因为是开发web项目&#xff0c;所以选择一个spring web 同时因为还要用到mysql&am…

分享4个不可或缺的 VSCode 插件,让 Tailwind CSS开发更简单

本文将为大家分享我在使用 Tailwind 进行开发时常用的四个 VSCode 扩展程序&#xff0c;这些扩展程序都包含在 VSCode 的 TailwindCSS Kit 扩展程序包中。1.Tailwind CSS IntelliSenseTailwind CSS IntelliSense 是一款功能强大的工具&#xff0c;可以帮助开发者更快、更高效地…

python-day1

第001天&#xff1a;初识python 本博客主要涉及到以下几个部分 1、配置镜像源 2、变量名及其命名规范 3、input函数和数据类型 4、指令和程序 5、运算符 6、练习 1、配置镜像源 此处我配置的是豆瓣源&#xff0c;操作步骤如下&#xff1a; 1、进入D:XXX\Scripts文件夹&#xff…

NumPy 初学者指南中文第三版:1~5

原文&#xff1a;NumPy: Beginner’s Guide - Third Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 一、NumPy 快速入门 让我们开始吧。 我们将在不同的操作系统上安装 NumPy 和相关软件&#xff0c;并看一些使用 NumPy 的简单代码。 本章简要介绍了 IPython…

数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)

目录 二叉树的定义 二叉树具体的五种基本形态 1.空树 2.只有一个节点 3.有左子树&#xff0c;但右子树为空 4.有右子树&#xff0c;但左子树为空 5.左右两子树都不为空 特殊二叉树 斜二叉树 满二叉树 完全二叉树 二叉树的几个重要性质 初识二叉树的几个操作函数 …

线性代数代码实现(七)求解线性方程组(C++)

前言&#xff1a; 上次博客&#xff0c;我写了一篇关于定义矩阵除法并且代码的文章。矩阵除法或许用处不大&#xff0c;不过在那一篇文章中&#xff0c;我认为比较好的一点是告诉了大家一种计算方法&#xff0c;即&#xff1a;若矩阵 已知且可逆&#xff0c;矩阵 已知&#x…

2021蓝桥杯真题大写 C语言/C++

题目描述 给定一个只包含大写字母和小写字母的字符串&#xff0c;请将其中所有的小写字母转换成大写字母后将字符串输出。 输入描述 输入一行包含一个字符串。 输出描述 输出转换成大写后的字符串。 输入输出样例 示例 输入 LanQiao 输出 LANQIAO 评测用例规模与约定 对于…

[架构之路-158]-《软考-系统分析师》-10-系统分析-1-5-逻辑设计、逻辑模型(系统分析师的主要职责之一)

目录 前言&#xff1a;什么是系统 科学内涵 常见的系统 第 10章 现有系 统 分 析 1 0 . 1 系统分析概述 1 . 系统分析的任务 2 . 系统分析的难点 3 . 对系统分析师的要求 1 0 . 2 详细调查 10.2.1 详细调查的原则 10.2.2 详细调査的内容 》对企业的实际运营和业务进…

async/await 函数到底要不要加 try catch ?

前言 写异步函数的时候&#xff0c;promise 和 async 两种方案都非常常见&#xff0c;甚至同一个项目里&#xff0c;不同的开发人员都使用不同的习惯, 不过关于两者的比较不是本文关注的重点&#xff0c;只总结为一句话&#xff1a;“async 是异步编程的终极解决方案”。 当使…

匿名管道与命名管道

匿名管道与命名管道一&#xff0c;进程间通信什么是进程间通信进程间通信的目的管道的概念二&#xff0c;匿名管道匿名管道的创建匿名管道使用匿名管道的特性以及四种场景匿名管道的原理通过匿名管道实现简易进程池。三&#xff0c;命名管道命名管道的创建命名管道的使用命名管…

vue3+vite+ts 接入QQ登录

说明 前提资料准备 在QQ互联中心注册成为开发者 站点&#xff1a;https://connect.qq.com/创建应用&#xff0c;如图 js sdk方式 下载对应的sdk包 sdk下载&#xff1a;https://wiki.connect.qq.com/sdk%e4%b8%8b%e8%bd%bd 使用 下载离线js sdk 打开&#xff1a;https:…

jQuery核心

目录 一、引入jQuery 二、jQuery的内涵 1、jQuery挂载在window对象上 2、jQuery是一个函数对象 三、jQuery函数的四种参数形式 1、参数是一个函数function 2、参数是一个选择器 3、参数是一个DOM对象 4、参数是一个HTML元素标签&#xff08;HTML代码&#xff09; 简介…

【Linux】八、Linux进程信号详解(完结)

目录 三、阻塞信号 3.1 信号其他相关常见概念 3.2 信号在内核中的表示 3.3 sigset_t 3.4 信号集操作函数 3.5 sigprocmask函数 3.6 sigpending函数 3.7 信号集实验 四、深入理解捕捉信号 4.1 进程地址空间二次理解&#xff08;内核空间与用户空间&#xff09; 4.2 用…

黑马的redis实战篇-短信登录

目录 四、实战篇-短信登录 4.1 导入黑马点评项目 1、后端&#xff1a; 2、前端 4.2 基于Session实现登录 1、发送验证码 2、短信验证码登录注册 3、校验登录状态 4.3 集群的session共享问题 4.4 基于Redis实现共享session登录 1、发送验证码 2、短信验证码登录注册 …

NumPy 秘籍中文第二版:六、特殊数组和通用函数

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍以下秘籍&#xff1a; 创建通用函数查找勾股三元组用chararray执行字符串操作创建一个遮罩数组忽略负值和极值使用recarray函数创建一…

蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)

文章目录零、吐槽一、关于自创模板&#xff0c;和自写模板库的问题二、关于 详解A/D、D/A、PCF8591 这篇文章一些小错误三、模板最终版本main.cds1302,hds1302.conewire.honewire.ciic.hiic.c附、第十四届蓝桥杯单片机赛题零、吐槽 今年是矩阵键盘三个协议一起调用啊。真是一年…

“AI+机器人”持续为多领域增“智”添“质”,开启效益增长飞轮

近期&#xff0c;工信部等17部门联合推出《“机器人”应用行动实施方案》&#xff0c;全面加快机器人领域应用拓展。据方案提出&#xff0c;至2025年&#xff0c;制造业机器人密度较2020年将实现翻番&#xff0c;服务机器人及特种机器人行业应用深度与广度显著提升。机器人融合…