Apache解析漏洞实验

news2024/11/26 9:41:27

实验目的

  1. 了解Apache解析漏洞原理
  2. 掌握Apache漏洞的利用方法

实验工具

  • 火狐:Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为FF),是一个自由及开放源代码网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。

实验内容


什么是网站(web)漏洞?

web漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞,这些漏洞一旦被恶意攻击者利用,会根据漏洞的危害程度,造成不可估量的损失。

Web常见漏洞

  • SQL注入
  • XSS跨站点脚本
  • 任意文件读取漏洞
  • 上传漏洞
  • CSRF
  • 命令注入
  • 弱口令漏洞
  • 敏感信息泄露漏洞

Apache解析漏洞

Apache解析文件格式的特点是这样的:它解析文件格式会从后向前解析,如果文件格式它不认识,他就会继续向前解析。

举一个例子,有一个文件为1.jpg.qqq,上传到Apache服务器中,因为Apache不认识qqq是什么格式。因此它就会继续向前解析,这时就解析到了jpg。因此Apache就认为这是一个jpg的文件。

在本次试验中,我们使用上传漏洞结合Apache解析漏洞,通过构造文件名来突破上传,最终成功拿到flag

白名单

服务端通过获取上传文件的扩展名来匹配预先定义的合法扩展名数组,如果未能成功匹配的话,认为上传文件不合法,返回报错信息,如果扩展名能成功匹配,则认为上传文件合法,进行文件保存操作。

拿上传图片举例,服务端定义的白名单:

$WhiteList=array("png","jpg","jpeg","gif");

可以看到,上述代码中只允许上传"png","jpg","jpeg","gif"这四种格式文件,上传文件时,服务端会检测后缀,如果所上传的文件格式后缀,没有在白名单允许的范围内,系统会拒绝上传。

黑名单

服务端通过获取上传文件的扩展名来匹配预先定义的非法扩展名数组,如果能成功匹配的话,认为上传文件不合法,返回报错信息,如果扩展名没有匹配到,则认为上传文件合法,进行文件保存操作。

拿上传图片举例,服务端定义的黑名单:

$BlackList=array("php","htaccess","asp","aspx");

根据黑名单列表可以看出,服务器不允许上传攻击中常用的php、htaccess、asp、aspx等脚本文件,也就是说这些文件都会被服务端所拦截,不能上传成功。

下面开始实验

步骤1:寻找上传漏洞,并尝试上传

我们看到下方显示了允许上传的类型,可以猜测,这应该是一个白名单验证,系统只允许列出的文件后缀进行上传。

首先在桌面创建一个php一句话木马,测试是否能上传成功。

在php文件里写入如下内容,并命名为1.php

<?php eval($_POST['123']);?>            //post会把123当做参数进行传递,eval会执行后面的语句。

eval在php中会将字符串当做代码来执行, 而post的意思是使用post的方式进行传递参数。

一句话木马,顾名思义,它的体积很小,只由一句php代码构成。

点击浏览,选择创建好的1.php,然后点击提交

可以看到提示:必须上传规定的类型,也就是只可以上传它白名单内的内容,如果上传白名单外的东西,会被系统拒绝。

因为在白名单列表中有jpg格式,因此在我们再将它的后缀名改为jpg,命名为1.jpg,查看是否能成功。

可以看到,改为jpg可以上传成功。

虽然jpg文件上传成功,但它其中的php代码并不能执行成功,使用中国菜刀也不会连接成功的。

因为jpg是图片格式,不能解析其中的php代码,要想解析php代码,后缀必须为php或者其他可以解析php代码的格式。

  • 提示:这个时候我们就需要对其进行绕过,服务器会检测我们所上传的后缀是否在白名单内,如果不在的话就禁止上传。

步骤2:利用Apache解析缺陷漏洞绕过上传检测

通过上述,我们已经知道了Apache解析漏洞的原理和它如何利用,这里我们就开始上传。

之前我们已经知道,Apache解析文件名后缀是从后向前解析,因此我们可以这样构造:

1.php.abc

因为Apache不识别abc格式的文件,这样他就会往前解析,这时他就会解析到了php。这样我们就可以执行成功了。

但是我们看到,上传失败,为什么呢?因为网站设置了白名单(这里之前已经详细的讲过,这里不再赘述),我们只能上传规定的上传类型。

因此我们尝试上传它白名单允许的格式,看是否可以成功上传:

我们尝试gif格式作为后缀,构造名称:

1.php.gif

可以看到,虽然上传成功,但并没有爆出flag,这是为何?

因为gif是最常见的图片格式,Apache是识别这个格式的,就把它当成了图片来处理,而1.php就成为了它的文件名,gif是它的格式。

接下来我们依次对其进行测试。

到最后一个,7z格式,进行构造:

1.php.7z

测试:

可以看到,成功的爆出了flag,这又是为什么呢?因为Apache不识别7z格式的文件,因此它就会向前解析,解析到了php,这样就成功的上传了一句话木马。

我们成功的上传,通过上传,并结合Apache解析漏洞,最终成功的获取了FLAG。

在本次试验中,我们尝试多种方法对其进行绕过。

  • 首先我们直接上传了php文件,因为白名单中没有php后缀的格式,拒绝上传,因此失败了

  • 我们再次上传了jpg文件,虽然上传成功但并没有用处,因为Apache把它解析成图片了

  • 接下来上传了1.php.gif,这个上传成功了,但一句话木马的代码也没有执行成功,因为Apache识别了gif格式,把它当成了图片处理。

  • 最后我们上传了1.php.7z,这个成功的爆出了flag。

因此我们得出结论,需要成功的执行代码,需要两个条件:

  1. 上传文件后缀必须要在网站白名单之内,否则无法上传。
  2. 上传文件后缀必须是Apache无法识别的后缀。

只有最后一个满足了这两点,因此一句话木马才能上传成功。

因为本实验仅作为测试用,无法连接中国菜刀,在真实的环境中,我们可以将上传木马的地址复制到菜刀里连接,这样就拿到了网站的Shell

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

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

相关文章

RPC项目解析(1)

分布式通信框架&#xff1a;让远程方法调用和调用进程内方法一样简单 RPC通信原理 rpc&#xff1a;远程过程调用&#xff08;远程能够调用其他模块的方法&#xff09; 在rpc中需要发送时候&#xff0c;对发送的信息进行序列化&#xff0c;在服务端对接收到的信息进行反序列化…

【C++11新特性】function包装器

文章目录 1. function包装器1.1 function包装器介绍1.2 function包装器对类型的统一1.3 function包装器的意义 1. function包装器 1.1 function包装器介绍 function包装器是一种函数包装器&#xff0c;也叫做适配器。它可以对可调用对象进行包装&#xff0c;C中的function本质…

C++【C++学习笔记_Wang】

时间进度C是什么&#xff1f;多态什么是多态&#xff1f;生活中的多态C中的多态 赋值兼容赋值兼容规则实现安全转换 时间进度 Day101 ok Day804 ok Day805 ok C是什么&#xff1f; C大部分包含C语言。 C完全兼容C语言。 C在C语言的基础上添加&#xff1a;封装、继承、多态…

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303&#xff1f; 2、为什么要使用JSR 303&#xff1f; 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

vue基础知识九:动态给vue的data添加一个新的属性时会发生什么?怎样解决?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…

QQ 逻辑漏洞可执行文件 漏洞复现

本文由掌控安全学院- wax 投稿 首先拿到QQ的版本&#xff0c;目前可测试版本包括QQ最新版本&#xff0c;TIM最新版本 新创建一个bat文件&#xff08;这个可以随意&#xff0c;上马的也可以&#xff0c;exe也可以&#xff09; &#xff0c;本次测试内容如下首先向你的手机端发一…

一文告诉你什么是 TCP 数据粘包,该如何解决!

粘包问题概述 描述背景 采用TCP协议进行网络数据传送的软件设计中&#xff0c;普遍存在粘包问题。这主要是由于现代操作系统的网络传输机制所产生的。 我们知道&#xff0c;网络通信采用的套接字(socket)技术&#xff0c;其实现实际是由系统内核提供一片连续缓存&#xff08…

如何实现高效客户服务自助?

随着科技的不断发展&#xff0c;越来越多的企业开始意识到提供良好的客户服务对于企业的重要性。而在满足客户需求的同时&#xff0c;高效实现客户服务自助也成为了许多企业关注的焦点。客户服务自助可以帮助企业降低成本、提高效率&#xff0c;同时也能给客户带来更好的体验。…

[每周一更]-(第60期):15种MySQL索引失效场景

背景 工作中都会踩到Mysql数据库不走索引的坑。常见的现象就是&#xff1a;明明在字段上添加了索引&#xff0c;但却并未生效。 另外&#xff0c;无论是面试或是日常&#xff0c;Mysql索引失效的通常情况都应该了解和学习。 为了方便学习和记忆&#xff0c;这篇文件将常见的15种…

人大女王金融硕士项目——当你觉得迷茫的时候,就去学习来充实自己

不要总以为自己的努力会付之东流&#xff0c;不要因为现在的生活或工作还是依旧没有起色&#xff0c;而想太多。继续努力就好&#xff0c;哪怕明天没有惊喜&#xff0c;但最终的你&#xff0c;却在慢慢的变好。对于从业多年的在职人员来说&#xff0c;职业瓶颈期是非常普遍的。…

JDK多版本切换

为什么切换 因为可能不同项目要求JDK的版本不同&#xff0c;比如你上次装的jdk1.8&#xff0c;现在的项目要求JDK9&#xff0c;这时候卸载8再换9有点费劲&#xff0c;而且操作不当可能遇到非常离奇的bug&#xff0c;影响开发进度。如果我们能灵活切换各种jdk版本&#xff0c;将…

揭秘策划行业就业前景怎么样?

策划这个行业总的来说就是&#xff1a;门槛低&#xff0c;上限高&#xff01;&#xff01; 咱们一般说的策划也分很多类型&#xff0c;这里选取身边朋友做的最多的4种类型简单说说。 1、前端品牌策划&#xff0c;转型容易出路广 品牌策划以品牌思维为核心去分析公司的经营发…

蓝桥杯官网练习题(五星填数)

类似题目&#xff1a;https://blog.csdn.net/s44Sc21/article/details/132758982?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132758982%22%2C%22source%22%3A%22s44Sc21%22%7Dhttps://blog.csdn.net/s44Sc21/article/detail…

【python】代码学习过程问题总结

目录 1. 使用 conda 创建并进入虚拟环境 2. pycharm 选择 interpreter 的时候&#xff0c;在虚拟环境中找不到 python.exe 3.&#xff08;py & python&#xff09;ModuleNotFoundError: No module named XXX 4. AttributeError: module ‘tensorflow‘ has no attribu…

【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

文章目录 一、爬取目标二、展示爬取结果三、爬虫代码四、同步视频五、附完整源码 您好&#xff0c;我是 马哥python说&#xff0c;一枚10年程序猿。 一、爬取目标 之前&#xff0c;我分享过一些B站的爬虫&#xff1a; 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Pyt…

使用TortoiseGit拉取GitLab代码仓库中某一项目的某一分支的代码

使用TortoiseGit拉取GitLab代码仓库中某一项目的某一分支的代码 写在前面&#xff0c;需要补充一点&#xff1a;方式一&#xff1a;使用TortoiseGit图像界面工具&#xff0c;进行直接操作方式二&#xff1a;使用git命令进行操作 写在前面&#xff0c;需要补充一点&#xff1a; …

flask项目请求与响应

项目名&#xff1a; static (静态) js css templates (模板) app.py (运行) web项目 mvc&#xff1a; model 模型 view 视图 controller 控制器 mtv model (模型) templates (模板) --> html view 视图 (python代码) 起控制作用 b/s browser server 浏览器服务器 c…

pcl--第一节 Filters

官方例子在这里&#xff0c;本人使用的pcl1.12.1版本&#xff0c;win11&#xff0c;直接从github下载编译好的版本&#xff0c;使用vs打开cmake&#xff0c;之所以使用cmake&#xff0c;原因是环境配置方便&#xff0c;vs本身配置环境比较麻烦&#xff0c;所以为了方便使用cmak…

FPGA----VCU128的SCUI(上位机软件)无法使用问题

1、第一次使用VCU128&#xff0c;发现很坑&#xff0c;记录一下使用方法。 ①首先需要在购买的包装盒子中找到密匙去官网下载个license ②在Vivado 2019.1版本中将2019.2的板卡数据导入&#xff0c;很奇怪把哈哈哈哈。下面是下载链接 https://github.com/Xilinx/XilinxBoard…

C++中extern的使用

目录 什么是extern&#xff1f;如何使用extern&#xff1f;声明一个全局变量或函数在当前文件中引用其他文件中定义的全局变量或函数 应用场景拓展结论 在C中&#xff0c;extern是一个非常重要的关键字&#xff0c;它用于声明一个变量或函数是在其他文件中定义的。在本文中&…