HGAME 2022 Week2 writeup by ek1ng
WEB
Apache!
题目考察的是Apache在2021年9月爆出的httpd mod_proxy SSRF漏洞,CVE-2021-40438
我们首先需要了解漏洞的原理,以下内容也是参考了网上的博客自己总结的。
漏洞产生于使用了mod_proxy,mod_proxy是Apache服务器中用于反代后端服务的一个模块,Apache在配置反代的后端服务器时,有两种情况:
- 直接使用某个协议反代到某个IP和端口,比如
ProxyPass / "http://localhost:8080"
- 使用某个协议反代到unix套接字,比如
ProxyPass / "unix:/var/run/www.sock|http://localhost:8080/"
第一种情况比较好理解,第二种情况相当于让用户可以使用一个Apache自创的写法来配置后端地址。那么这时候就会涉及到parse的过程,需要将这种自创的语法转换成能兼容正常socket连接的结构,而fix_uds_filename函数就是做这个事情的,问题也就是出在filename上,那么我们来看一下filename这个函数写了什么
代码语言:javascript复制static void fix_uds_filename(request_rec *r, char **url)
{
char *ptr, *ptr2;
if (!r || !r->filename) return;
if (!strncmp(r->filename, "proxy:", 6) && //!!!!!!!!!!!问题在这
(ptr2 = ap_strcasestr(r->filename, "unix:")) && //!!!!!!!!!!!问题在这
(ptr = ap_strchr(ptr2, '|'))) { //!!!!!!!!!!!问题在这
apr_uri_t urisock;
apr_status_t rv;
*ptr = '