![ff29d1f4c876ae3746feccdb263570b9.png](https://img-blog.csdnimg.cn/img_convert/ff29d1f4c876ae3746feccdb263570b9.png)
在这篇文章中,我将分析CVE-2019-16278漏洞的成因,以及如何去利用它。这个漏洞存在于Nostromo web服务上(又名nhttpd),这是一个开源的web服务,在Unix系统上非常流行,例如FreeBSD, OpenBSD等等。
Nostromo由于在验证URL安全性方面存在缺陷,导致目录穿越,任何人都可以遍历系统中任何文件。因此未经过身份验证的远程攻击者可以强制服务器指向/bin/sh
这样的shell文件,借此执行任意命令。在我测试时,Nostromo的所有版本,包括最新的1.9.6版本,都存在漏洞。甚至它的开发者网站www.nazgul.ch
也有。
在以前Nostromo也出现过目录穿越漏洞,最终也可导致远程命令代码,编号为CVE-2011-0751
。漏洞原因在于当时的web服务在对URL进行检查的时机是在URL被解码前,因此攻击者只需将/
转换为%2f
就可绕过检查,最后paylaod如下:
/..%2f..%2f..%2fbin/sh
虽然Nostromo很快修正了1.9.4版本的CVE-2011-0751
漏洞,但现在我们又有了CVE-2019-16278
,同样也是目录穿越。
利用
在Shodan上进行搜索,你可以在公网上找到大约2000个Nostromo web服务:"Server: nostromo"
![89f5c345ba4a845bce97ccf1ab2aa6a8.png](https://img-blog.csdnimg.cn/img_convert/89f5c345ba4a845bce97ccf1ab2aa6a8.png)
我也用Python编写了一些PoC来抽查一些服务器。
![5bc9db8415a0408fd0e5c0ade4ab6e65.png](https://img-blog.csdnimg.cn/img_convert/5bc9db8415a0408fd0e5c0ade4ab6e65.png)
如果你查看我的脚本呢,你会发现我发送了一个包含/.%0d./.%0d./.%0d./.%0d./bin/sh
的请求。与CVE-2011-0751
相比,我仅仅只是加入了大量%0d
,Nostromo并不会对这种特殊字符进行检查。你可能想知道为什么加入了这种特殊字符就可绕过安全检查,下面我将详细说明。
让我们看一下Nostromo 1.9.6版本的源代码。
分析:
首先,服务器会验证请求然后处理它。
![cf84bd1e5286b02063ac7ac7597e22aa.png](https://img-blog.csdnimg.cn/img_convert/cf84bd1e5286b02063ac7ac7597e22aa.png)
在上图的函数http_verify()
中,请求的首行会先进行解码,然后检查/../
是否存在。注意,此时攻击请求的首行包含/.r./.r./.r./.r./bin/sh
。
![31a3363801dd474d89693b30b80ff8c5.png](https://img-blog.csdnimg.cn/img_convert/31a3363801dd474d89693b30b80ff8c5.png)
接下来,函数http_proc()
会将首行传递给函数http_header()
。
![88f438099b65a5ba1b451cbc75380279.png](https://img-blog.csdnimg.cn/img_convert/88f438099b65a5ba1b451cbc75380279.png)
漏洞根源就在这,函数http_header()
会通过函数strcutl()
解析数据。
![bd1b539f948635d532cf536958bf13e1.png](https://img-blog.csdnimg.cn/img_convert/bd1b539f948635d532cf536958bf13e1.png)
而在函数strcutl()
的内部,你可以看到它会把字符串中的r(回车)去除。
![a6fc2ca89cc9f9f86b27e14ff23ce172.png](https://img-blog.csdnimg.cn/img_convert/a6fc2ca89cc9f9f86b27e14ff23ce172.png)
最后,得到的路径是/../../../../bin/sh
。那么,目录穿越完成,命令执行如何进行呢?在函数http_proc()
中的execve()
函数(用于执行指定程序)中,它执行了rh->rq_filef
,这正是路径过滤后的结果/../../../../bin/sh
。
![6e0c9611bbee3f03ad18c47a125a3aff.png](https://img-blog.csdnimg.cn/img_convert/6e0c9611bbee3f03ad18c47a125a3aff.png)
于是,我们就得到了一个可导致RCE的目录穿越!
如果你有任何问题,请通过我的Twitter和我交流。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:CVE-2019-16278:Nostromo Web服务器的远程命令执行
原文:https://www.sudokaikan.com/2019/10/cve-2019-16278-unauthenticated-remote.htm
白帽汇从事信息安全,专注于安全大数据、企业威胁情报。
公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。
为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。