第三方应用软件提权全解析

当我们成功拿下目标服务器的 WebShell 后,如果系统内核提权、数据库提权等常规手段都无法突破权限限制,那么第三方应用软件往往会成为我们的突破口。很多运维人员在部署服务器时,往往会忽略第三方软件的权限配置,导致攻击者可以利用这些软件的漏洞或配置缺陷完成权限提升。

本文将详细讲解几种常见的第三方应用软件提权方式,包括远控软件提权、Zend 组件提权以及 DLL 动态库劫持提权,帮助你全面掌握这类提权思路。


一、远控软件提权

很多服务器管理员为了方便远程管理,会在服务器上安装各类远程控制软件,而这些软件往往存在配置不当的问题,比如密码硬编码、注册表明文存储密码、未授权访问漏洞等,这些都成为了我们提权的可乘之机。

1.1 向日葵远程控制提权

向日葵是一款面向企业和专业人员的远程 PC 管理和控制服务软件,支持远程文件传输、远程视频监控等功能,被很多管理员用于服务器的远程管理。

影响版本
  • 向日葵个人版 for Windows <= [11.0.0.33](11.0.0.33)

  • 向日葵简约版 <= V1.0.1.43315(2021.12)

如何判断目标是否安装向日葵?

在拿到 WebShell 后,我们可以通过执行命令查看目标服务器的进程和服务,来判断是否安装了向日葵:

复制代码
tasklist /svc

当查看到目标服务中存在 SunloginClient\.exe 或者 SunloginService 时,即可判断目标服务器中安装了向日葵。

漏洞利用步骤

向日葵运行状态下会自动随机开启一个大于 40000 的端口,端口范围一般在 40000-65535 之间。

  1. 端口扫描:使用 nmap 扫描目标服务器的该端口段,找到向日葵的服务端口:
复制代码
nmap -p 40000-65535 10.0.0.102
  1. 验证端口:探测到端口后,尝试通过浏览器访问这些端口,找到向日葵的对外服务端口。

  2. 工具利用:找到正确的端口后,我们可以使用 Sunlogin 漏洞利用工具进行连接:

复制代码
java -jar Sunlogin漏洞利用工具.jar

注意:连接目标地址直接输入 IP 地址和端口即可,不必带上http://

如果想要手工利用该漏洞,可以参考这篇文章:向日葵远程控制代码执行漏洞复现


1.2 VNC 远程控制提权

VNC (Virtual Network Console) 是虚拟网络控制台的缩写,是一款优秀的开源远程控制工具,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美,默认端口为 5900。

提权思路

VNC 安装后,会在注册表中保留连接密码,我们可以通过读取注册表中的密码信息,破解后即可远程连接目标服务器,从而获得管理员权限。

利用步骤
  1. 读取注册表密码 我们有两种方式读取注册表中的 VNC 密码:
  • 方式一:使用 ASP 大马 通过 WebShell 上传 ASP 大马(dama\.asp,密码:Skull\.),访问大马后即可读取注册表中的 VNC 密码。

注意:该方式需要目标服务器运行 IIS 中间件,且 IIS 用户拥有读取注册表的权限,否则可能读取失败。

  • 方式二:命令行导出注册表 如果大马无法使用,我们可以通过 WebShell 的虚拟终端执行命令,将注册表键值导出到文件:
复制代码
cmd /c "regedit /e c:\123.reg "HKEY_LOCAL_MACHINE\software\RealVNC\WinVNC4" "

该命令会将 VNC 的注册表信息导出到 C 盘的123\.reg文件中,之后我们将该文件下载到本地。

  1. 密码破译 拿到导出的注册表文件后,我们可以使用vncx4\.exe工具进行密码破译:
复制代码
vncx4.exe -W
  1. 远程连接 破译得到密码后,我们就可以使用本地的 VNC 客户端远程连接目标服务器,从而获得管理员权限。

1.3 Radmin 远程控制提权

Radmin 是一款国外非常流行的远程控制软件,拥有极高的操作速度,即使在 3G 网络下也能顺畅操控远程计算机,默认端口为 4899。

提权思路

和 VNC 类似,Radmin 的密码也会存储在注册表中,我们可以读取注册表中的密码 Hash,破解后即可远程连接目标服务器。

利用步骤
  1. 读取注册表密码 同样,我们可以通过两种方式读取 Radmin 的密码:
  • 方式一:ASP 大马 上传 ASP 大马后,直接读取 Radmin 的密码 Hash 值。

  • 方式二:命令行导出注册表 通过 WebShell 执行命令,导出 Radmin 的注册表信息:

复制代码
cmd /c "regedit /e c:\456.reg "HKEY_LOCAL_MACHINE\system\RAdmin\v2.0\Server\"

将导出的456\.reg文件下载到本地。

  1. 密码破解 Radmin 的密码是经过 MD5 加密的,我们可以通过在线 MD5 解密网站(比如cmd5.com)进行解密,得到明文密码。 当然,我们也可以直接使用支持 Hash 登录的 Radmin 客户端直接连接,无需解密。

  2. 远程连接 得到密码后,使用本地的 Radmin 客户端连接目标服务器,即可获得管理员权限。


1.4 ToDesk 远程控制漏洞

除了以上三款远控软件,ToDesk 作为近年来流行的国产远控软件,也曾曝出过安全漏洞,攻击者可以利用该漏洞实现未授权访问,从而提权控制服务器。 相关漏洞详情可以参考:


二、Zend 组件提权

Zend 是 PHP 的脚本引擎,是 PHP 的核心组件,它的作用是将 PHP 代码转换成可执行的机器码,同时 Zend Optimizer 还可以为 PHP 网站提供加速优化,很多使用 phpstudy 搭建的服务器都会默认安装该组件。

漏洞成因

Zend 组件存在一个权限配置缺陷:当服务器单独安装 Zend 组件后,Zend 会自动将其安装目录的权限设置为Everyone完全控制,这就意味着即使是低权限的 Web 用户,也可以对该目录下的文件进行修改、替换操作。

提权思路

我们可以利用该权限缺陷,替换 Zend 的动态库文件,当 Apache 服务重启时,就会加载我们的恶意动态库,从而执行任意代码,获得管理员权限。

利用步骤

phpstudy 环境下,Zend 组件的默认路径为:C:\\phpStudy\\php\\php\-5\.2\.17\\ZendOptimizer\\

  1. 上传工具 通过 WebShell 将nc\.exe(网络连接工具)上传到目标服务器的 Zend 目录下。

  2. 替换动态库 将原有的ZendExtensionManager\.dll重命名备份,然后使用 Zend 工具包生成一个带有后门的恶意ZendExtensionManager\.dll,上传到该目录下,该恶意 dll 会在加载时自动调用 nc.exe,反弹一个 Shell 到我们的主机。

  3. 等待服务重启 接下来只需要等待目标服务器重启 Apache 服务,Apache 就会加载我们的恶意 dll,从而触发后门。

  4. 连接 Shell 当服务重启后,我们就可以在本地使用 telnet 连接目标服务器的指定端口,获得管理员权限的 Shell:

复制代码
telnet 10.0.0.129 1234
原理说明

所有的 dll 文件(动态库文件)在运行时,都需要依靠属主文件(exe)去运行。Zend 的 dll 文件是被 Apache 进程加载的,而 Apache 是以系统权限运行的,所以当我们替换了 dll 文件后,Apache 加载它的时候,就会以系统权限执行我们的恶意代码。

而且这种方式非常隐蔽:正常的任务管理器只能看到 Apache 的 exe 进程,而我们的恶意 dll 是运行在 Apache 进程内部的,普通用户很难发现。只有使用专业的 ARK 工具,比如 PCHunter 或者火绒剑,才能分析进程加载的模块,发现异常的 dll。

作为安全工程师,在分析进程模块时,需要重点关注蓝色的第三方模块,尤其是不带数字签名的;如果是红色的危险文件,就更需要提高警惕了。

Zend 提权的详细操作可以参考:第三方组件提权 - zend nc 提权


三、DLL 动态库劫持提权

什么是 DLL 文件?

DLL 文件,全称 Dynamic Link Library,是 Windows 操作系统中的动态链接库,用于为应用程序提供共享的功能和服务。它包含了一系列供多个应用程序共同使用的代码、数据和资源,当应用程序启动时,会加载对应的 DLL 文件来获取所需的功能。

什么是 DLL 劫持?

DLL 劫持,就是当应用程序加载 DLL 文件时,我们通过伪造一个同名的恶意 DLL 文件,放到应用程序的搜索路径中,让应用程序加载我们的恶意 DLL,从而执行任意代码。

一般来说,我们会选择第三方软件的目录来放置恶意 DLL,比如输入法、杀毒软件等,这些软件往往有自动升级、自动启动的功能,而且目录权限较低,容易写入。而系统软件的 DLL 一般带有数字签名,很容易被系统检测到,不建议使用。

利用步骤

  1. 生成恶意 DLL 我们可以使用 T00ls Lpk Sethc 工具来生成劫持用的恶意 DLL,该工具可以生成一个粘滞键后门的 DLL,方便我们后续远程登录。

在工具中,我们可以设置触发后门的热键,以及登录密码,然后生成恶意的LPK\.dll文件。

  1. 上传恶意 DLL 通过 WebShell 将生成的LPK\.dll上传到目标服务器的第三方软件目录下,比如输入法的安装目录、中间件的目录等,这些软件在启动或者自动升级的时候,就会加载我们的恶意 DLL。

演示中如果上传到桌面,那么桌面上的任何程序启动时,都会被劫持。

  1. 触发后门 当 DLL 被加载后,我们就可以触发后门了:

  2. 首先,确保目标服务器开启了 3389 远程桌面服务。

  3. 本地打开远程桌面连接,连接目标服务器。

  4. 在登录界面,按五下 Shift 键,调出粘滞键设置。

  5. 鼠标放在粘滞键弹窗的最后一个句号位置,同时按下我们之前设置的热键,然后点击句号。

  6. 输入我们设置的密码,就可以无需账号密码,直接登录目标服务器,获得管理员权限。

注意:DLL 劫持有时候会有错误提示,如果运维人员不懂安全,很可能会忽略这个提示,从而让我们成功利用。


四、安全防护建议

看完了这些提权手段,我们也能发现,这些漏洞的根源,其实都是权限配置不当。想要防护这类攻击,最根本的就是做好权限配置:

  1. 文件目录权限:普通的文件目录,只配置读取和执行权限,不要给写入权限,避免攻击者替换文件。

  2. 网站目录权限:网站目录只给读取和写入权限,不要给执行权限,防止攻击者上传的木马被执行。

  3. 用户权限管理:不要给普通用户、Web 用户过高的权限,避免低权限用户可以修改系统目录、第三方软件目录的文件。

  4. 软件安全:及时更新第三方软件,修复已知的安全漏洞,同时不要随意给第三方软件的目录开放过高的权限。


五、总结

第三方应用软件提权,本质上都是利用了第三方软件的配置缺陷或者已知漏洞,总结下来无非就是两类:

  1. 远控类软件:这类软件的密码往往会保存在注册表键值或者配置文件中,我们只需要读取这些信息,破解密码后就可以远程连接,获得管理员权限;而对于存在未授权访问漏洞的远控软件,我们可以直接利用漏洞一键提权。

  2. 其他第三方软件:利用软件的目录权限缺陷,要么替换原有的合法文件,植入后门,等待软件启动时加载;要么通过 DLL 劫持的方式,伪造恶意 DLL,让软件启动时加载我们的后门,从而执行任意代码。

在渗透测试中,当常规提权手段失效时,不妨多关注一下目标服务器上安装的第三方软件,往往会有意外的收获。

相关推荐
x***r1513 小时前
dotnet-hosting-2.2.8-win安装步骤详解(附IIS部署与AspNetCoreModule配置)
windows
JOJO___4 小时前
【2026】记录在windows编译llama.cpp步骤,AMD CPU本地部署千问3.5本地大模型,内存占用低
windows·cpu·amd·llama.cpp·llama.cpp编译·千问3.5·本地大语言模型
X7x55 小时前
网络流量分析(NTA):企业安全运营的“数字听诊器“
网络安全·网络攻击模型·安全威胁分析·安全架构·nta
神奇椰子5 小时前
Windows 系统 MC 服务器搭建保姆级教程
运维·服务器·windows
csdn小瓯6 小时前
Pydantic V2 模型校验与配置管理最佳实践
运维·数据库·windows
元Y亨H6 小时前
彻底掌控你的电脑:Windows 自动更新关闭全攻略
windows
芊&星6 小时前
靶机应急 | 知攻善防----Windows
运维·windows·安全
Chockmans6 小时前
春秋云境CVE-2022-28512(手工注入和sqlmap自动)保姆级教学
安全·web安全·网络安全·网络攻击模型·安全威胁分析·春秋云境·cve-2022-28512
likerhood7 小时前
Java final 关键字:从“不能改”到“安全发布”的深入理解
java·windows·安全