文件解析漏洞总结-Apache

Apache解析漏洞

多后缀名解析:xx.php.xxoo

Apache认为一个文件可以有多个后缀名,例如:peak.txt.jpg.xx
Apache的解析规则是从后(右)往前(左)依次判断后缀名,当Apache不认这个后缀名时,就继续往前判断后缀名,如果遇到认识的后缀名,就将这整个文件当做认识的这个后缀名来解析,如若,从右往左都没有认识的,apache就会把这整个文件直接交给浏览器自动处理,不返回给浏览器任何MIME类型
问:哪些后缀名Apache认识,哪些又不认识呢?
答:在mime.types的文件中记录着哪些后缀名apache认识
Linux环境下在/etc/mime.types
Windows环境下在apache/conf/mime.types(最好使用ubuntu搭建,复现apache不建议windows搭建)
mime.types中记录了apache认识的文件后缀和其对应的MIME类型,当客户端请求一个文件,如果该文件后缀apache认识,那么apache就会返会后缀对应的MIME类型给浏览器;如果一个后缀名apache都不认识,那么apache将会把文件直接交给目标服务器,不返回给浏览器任何MIME类型
例1:我们来访问peak.jpg.xxoo,看看是个什么情况,由下图可见,这个特性执行了,apache不认识.xxoo,但认识.jpg,所以返回jpg的MIME类型给浏览器
在这里插入图片描述
例2:我们再来访问peak.xxyy.xxoo,由下图可见,这个特性执行了,apache不认识.xxoo,也不认识xxyy,没有一个认识的后缀,最后apache把这整个文件直接交给浏览器自动处理,不返回给浏览器任何MIME类型
在这里插入图片描述
例3:我们再来访问peak.php,由下图可见,apache认识php,所以返回text/html的MIME类型给浏览器,因为mime.types中php的MIME类型为application/x-httpd-php,为什么返回text/html我也不是很清楚
在这里插入图片描述
我们一般利用这个特性一般用来绕过文件上传漏洞的黑名单,假设目标服务器过滤了.php后缀的文件,那么我们就可以利用apache这一特性,上传peak.php.xxoo,apache不认识.xxoo,就向前判断,哎,认识.php,那么Apache理论应该返回text/html给浏览器。并以php解析执行peak.php.xxoo文件,真的是这样吗?看下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根本没有以php解析执行peak.php.xxoo,也没有返回MIME类型给浏览器,而是自动交给浏览器处理为什么呢?(我这里使用的是apache-2.4.39+php-5.3.29),这里的原因是,apache向左判断,判断该后缀名它是否认识,xxoo,不认识,看到了php,它认识,于是将整个文件交给php去执行,但整个文件名为peak.php.xxoo,php不认识后缀为xxoo的文件,所以就不执行文件。那前面的peak.jpg.xxoo为什么可以执行,因为apache自右向左,认识jpg,jpg不是php文件,它就不给php解析执行,而是以图片的方式执行然后返回给浏览器

那我们就要来看看php本身是如何识别文件的了,有些规定的配置文件在apache/modules/php?.conf,我这里只是粗略的记载一下,因为我搭建环境没有找到这个文件,例如apache/module/php5.conf,它里面的内容大致是

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
      SetHandler application/x-httpd-php
</FilesMatch>

这个表达的意思是,php认为要以php解析执行的文件名的最后的后缀名要与正则表达式匹配才可以(例如需要和php3|php4|php5|pht|phtml匹配),这样php才会处理文件名,有些服务器将配置文件设置了这个,所以apache无法利用它的特性以php解析执行peak.php.xxoo,只有最右边的后缀名符合php的要求才行,因为apache为php设置了条件。这就相当于,apache是将军,php既是一个实体军官这个人也抽象代表军官这个名词,peak.php.xxoo是一个人,peak.php.xxoo来找将军,将军看到xxoo,不认识,看到php这个代表军官的抽象名词时,哦,认识了,你是peak.php.xxoo军官,此时将军是以它的方式来认人的(也就是mime.types),有一天将军让php实体军官这个人去找peak.php.xxoo军官,把他训练一下,将军是老大嘛,它之前设置一个规定,只有最后是php3|php4|php5|pht|phtml结尾的才是php军官,这时候问题就出现了,当php实体军官找到peak.php.xxoo时,按照将军的规定发现peak.php.xxoo他最后没以规定的后缀结尾,于是就无法训练他(解析执行),因为在php实体军官眼中他不是将军所说的peak.php.xxoo军官。

回归正题:如果需要让peak.php.xxoo可以被php执行,可以将上面的代码修改为

<FilesMatch ".+\.ph(p[345]?|t|tml)\.">
      AddHandler application/x-httpd-php .php
</FilesMatch>

这些都是我查阅资料后所想的,因为我真的没有找到这个配置文件…
其实我认为真正限制的是httpd.conf中的AddType application/x-httpd-php .php .phtml,这表示一个文件以AddType后面其中一种后缀结尾,会当做php文件解析执行,假如有服务器管理员,打开或设置了这个配置。那么我们就可以利用前面的Apache解析漏洞
注意:这个AddType application/x-httpd-php设置后面必须跟后缀,否则apache服务起不来
也可以利用上传.htcaess,达到同样的效果,.htaccess可以作用于当前目录和其子目录
利用.htaccess前提条件:
(1)httpd.conf中要AllowOverride All,AllowOverride None不行
(2)需要加载mod_rewrite模块,LoadModule rewrite_module modules/mod_rewrite.so
之后可以上传以下三种内容的.htaccess文件:
第一种:

SetHandler application/x-httpd-php
后面什么都不加表示所有的文件都以php解析,最霸道。
如果加了后缀,例如.jpg,那么不管.jpg在文件中的哪个位置,php都能匹配到他并将它以php解析执行,例如:xx.jpg.xxoo

第二种:

AddType application/x-httpd-php .jpg
指定后缀以php文件解析执行,这个不像SetHandler那么霸道,指定的后缀必须要在文件末尾,例如xx.oo.jpg,可以解析;xx.jpg.oo,不可以解析

注意:application/x-httpd-php在mime中所对应的后缀,也以php进行解析,并且不管他们在文件名中的哪个位置,apache将文件交给php后,php都可以匹配到并解析执行
在这里插入图片描述

第三种:指定以php解析的文件,如下

<FilesMatch "xx.gif">
SetHandler application/x-httpd-php
</FilesMatch>

那么,AddType和AddHandler有什么区别吗?

AddType:在给定的文件扩展名与特定的内容类型之间建立映射,也就是mime.types
语法:AddType MIME-type extension [extension] …
说明:AddType 是与类型表相关的,描述的是扩展名与文件类型之间的关系,例如:
AddType application/x-httpd-php .jpg,表示.jpg扩展名的文件就是application/x-httpd-php类型的
AddType image/jpeg .php,表示.php扩展名的文件就是image/jpg类型的(注意:*.php除外,例如xx.php依旧可以当做php解析,xx.php.jj,先经过apache,遇到php,交给php后,php把xx.php.jj当做jpg)
例:
在这里插入图片描述

AddHandler: 在文件扩展名与特定的处理器之间建立映射
说明:什么样的扩展名使用什么样的程序来处理,描述的是扩展名与处理程序之间的关系
例如:

AddHandler application/x-httpd-php

(3)SetHandler就记住一个就行了

SetHandler application/x-httpd-php

总结

理解apache解析漏洞明原理时,只要记住apache是老大,php是小弟,什么事先经过大哥,小弟听大哥安排!就OK~
在这里插入图片描述
说到底,只有当目标服务器httpd.conf中配置了AddType application/x-httpd-php指定后缀名亦或httpd.conf中配置了SetHandler application/x-httpd-php或目标网站根目录上传了.htaccess文件,满足这些条件之一,目标服务器才代表存在apache文件解析漏洞,类似peal.php.xxoo的文件php才能得以解析执行

防御措施:这个是网上给出的,我由于没有找到他的配置,无法复现,其时我认为最好的防御就是第二种。
(1)在httpd.conf中写好正则,使得php只判断文末的后缀名他认不认识,不会判断整个文件名

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
	SetHandler application/x-httpd-php
</FilesMatch>

 或
 
<FilesMatch ".+\.phps$">
	Order Deny,Allow
	Deny from all
</FilesMatch>

(2)关闭httpd.conf中的AddType/AddHandler/SetHandler

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Apache JMeter是一个开源的负载测试工具,用于对软件和服务进行性能测试。它可以模拟多种类型的负载,并提供了丰富的功能和灵活的配置选项。 以下是关于Apache JMeter的一些介绍和演示: 1. 下载和安装Apache JMeter: - 首先,你可以从Apache JMeter官方网站(https://jmeter.apache.org/)下载最新版本的Apache JMeter。 - 解压下载的文件,并进入解压后的目录。 2. 启动Apache JMeter: - 在解压后的目录中,找到bin文件夹,并打开命令行或终端窗口。 - 运行以下命令来启动Apache JMeter: ```shell ./jmeter.sh ``` 3. 创建测试计划: - 在Apache JMeter的界面中,点击"File"菜单,然后选择"New"来创建一个新的测试计划。 - 在测试计划中,你可以添加线程组、定时器、取样器、断言等组件来模拟负载和测试目标。 4. 配置取样器: - 在线程组下,右键点击并选择"Add",然后选择合适的取样器,例如HTTP请求。 - 配置取样器的参数,例如URL、请求方法、请求头、请求体等。 5. 运行测试计划: - 点击工具栏上的"运行"按钮或使用快捷键Ctrl+R来运行测试计划。 - Apache JMeter将模拟负载并发送请求到目标服务。 6. 查看测试结果: - 在测试运行完成后,你可以查看各个取样器的响应时间、吞吐量、错误率等指标。 - 可以使用图表、表格和报告来分析和展示测试结果。 请注意,以上是Apache JMeter的基本介绍和演示。Apache JMeter还有很多高级功能和配置选项,可以根据具体需求进行进一步学习和使用。
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1stPeak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值