LNK 钓鱼方法是许多网络钓鱼活动中一种经久不衰的手段,攻击者通过滥用 LNK 文件的独特属性来欺骗用户并规避检测和预防对策,使其成为危害系统和网络的有力工具。很多APT组织也是用LNK文件作为投递的主要载荷。
当然关于LNK 钓鱼方法网上资料数不胜数,但鉴于读者水平参差不齐,这里大概讲一下,算是科普吧,了解它,然后更好的防御这种攻击手段(当然,最好的办法就是别人发的东西不要瞎几把点)
简介
lnk文件是用于指向其他文件的一种文件。这些文件通常称为快捷方式文件,通常它以快捷方式放在硬盘上,以方便使用者快速的调用。lnk钓鱼主要将图标伪装成正常图标,在属性目标选项用LOLBIN执行命令
Windows GUI 会隐藏lnk
文件的扩展名(以及其他 15 种文件类型)
.accountpicture-ms
.appcontent-ms
.appref-ms
.DeskLink
.library-ms
.lnk
.MAPIMail
.mydocs
.pif
.scf
.searchConnector-ms
.search-ms
.settingcontent-ms
.url
.website
.ZFSendToTarget
即使“启用显示扩展名”,文件扩展名也会被隐藏
LNK文件格式
在计算机科学的世界中,可以这样说,计算机里的一切东西==数据结构+算法,和我们熟知的PE结构一样,.lnk结构如下所示:
https://formats.kaitai.io/windows_lnk_file/windows_lnk_file.svg
从这张图可以看出主要由几个结构组成:
SHELL_LINK_HEADER
[LINKTARGET_IDLIST]
[LINKINFO]
[STRING_DATA]
*EXTRA_DATA
ShellLinkHeader
Shell Link Header 是 .lnk 文件的结构部分,用于访问其他组件。此标头为用户提供目标文件的位置、执行参数、图标路径等。Shell Link Header 向操作系统和用户传达有关 .lnk 文件的重要信息。
LinkTargetIDList 和 LinkInfo
LinkTargetIDList 和 LinkInfo 组件是包含 Windows .lnk 文件的目标和附加信息的重要数据结构。这些组件确保 .lnk 文件正确重定向到目标文件,并通过提供相关附加信息为用户提供更多功能。
LinkTargetIDList(链接目标 ID 列表):此组件用于确定 .lnk 文件的目标。LinkTargetIDList 包含一组表示目录树的 ID 元素。每个 ID 元素代表目标文件的完整路径。此路径提供文件的位置以及定位目标的正确方法。LinkTargetIDList 表示如果目标文件更改其位置,则必须更新 .lnk 文件。
LinkInfo(链接信息): LinkInfo 组件包含有关 .lnk 文件的其他信息。此信息定义有关文件目标的各种详细信息和属性。例如,它可能包括文件将在其中运行的窗口大小、启动目录或运行参数等信息。LinkInfo 确定与目标文件相关的 .lnk 文件的其他功能。
字符串数据
Windows .lnk 文件是一种存储基于文本的数据的结构。此数据包括文件的描述、标签或附加信息,可帮助用户更好地识别和管理文件。字符串数据通过提供对 .lnk 文件的更好理解来增强用户体验。
NAME_STRING:包含 .lnk 文件名称的文本数据。此部分显示 .lnk 文件的名称,并帮助用户识别该文件。
RELATIVE_PATH:用于以相对方式访问 .lnk 文件目标的文本数据。此部分提供 .lnk 文件到目标文件的相对路径,以便在文件移动或重新定位时保留指向该文件的链接。
WORKING_DIR:包含为运行 .lnk 文件而指定的工作目录的文本数据。此部分指定 .lnk 文件的目标将运行的目录,并确保该文件将正确运行。
COMMAND_LINE_ARGUMENTS:包含应传递到 .lnk 文件目标的命令行参数的文本数据。此部分提供特定于 .lnk 文件目标的设置或命令行选项。
ICON_LOCATION:包含 .lnk 文件图标位置的文本数据。此部分指定分配给 .lnk 文件的图标的来源。来源可以是目标文件内的图标文件,也可以指向位于其他地方的图标文件。
额外数据
它是 Windows .lnk 文件中包含附加和特殊数据的结构。此组件扩展了 .lnk 文件的属性,定义了文件的自定义功能,并确定了文件如何与操作系统交互。ExtraData 使 .lnk 文件能够执行更复杂和可自定义的操作。
EnvironmentVariableDataBlock: .lnk 文件中的结构,包含目标应用程序或进程可用的环境变量的数据。此块指定在 .lnk 文件执行期间如何使用环境变量。
ConsoleDataBlock:如果将控制台应用程序指定为 .lnk 文件的目标,则此块包含有关如何设置控制台以及如何运行控制台的数据。例如,它可能包含控制台的大小、颜色设置和其他控制台属性。
TrackerDataBlock: .lnk 文件用于文件或文件夹跟踪,此块包含相关跟踪数据。此块定义与跟踪功能相关的自定义设置和参数。
ConsoleFEDataBlock:当远程桌面应用程序或终端服务用作.lnk 文件的目标时,此块包含确定远程控制台将使用哪种语言和字符集的数据。
SpecialFolderDataBlock:如果 .lnk 文件针对某个特殊系统文件夹,则此块包含该特殊文件夹的标识信息。例如,可以在此处指定桌面、文档或程序文件等特殊文件夹。
DarwinDataBlock:如果 .lnk 文件针对的是 Microsoft Installer (MSI) 管理的应用程序,则此块包含相关的 MSI 信息。此信息定义了安装和卸载应用程序的指令。
IconEnvironmentDataBlock:包含与 .lnk 文件图标相关的附加数据的结构。此块包含有关分配给 .lnk 文件的图标的附加信息,例如图标的路径、图标尺寸或图标状态。
ShimDataBlock:如果 .lnk 文件针对的是要通过兼容层交互运行的应用程序,则此块包含相关的兼容层数据。此数据决定了应用程序的兼容级别和自定义设置。
PropertyStoreDataBlock:包含与 .lnk 文件关联的自定义属性的数据存储的结构。此块可以包含 .lnk 文件的自定义属性或元数据。
VistaAndAboveIDListDataBlock:如果 .lnk 文件的目标位置是 Windows Vista 或更高版本,则此块包含相关的 IDList 数据。此块允许 .lnk 文件在 Vista 或更高版本中具有特殊功能或特性。
KnownFolderDataBlock:如果 .lnk 文件针对的是已知文件夹,则此块包含该已知文件夹的凭据。此块可能包含已知文件夹的标识符和自定义设置。
利用
所以通过修改ICON_LOCATION和LinkTargetIDList我们可以创建如下武器化文件
目标(T)这里可以通过在前面添加多个空格来隐藏掉路径
因为路径变量的最大长度为 4096 个字符,但 GUI 允许设置最大值为 256,而不显示之后的内容
但是始终有办法能提取到这个字符串,那么就不得不提86matthew的一个项目:在LNK内嵌入EXE并自动执行:https://www.x86matthew.com/view_post?id=embed_exe_lnk
那么不管什么类型的钓鱼都需要做好免杀,这里推荐一款免杀生成平台
https://github.com/pumpbin/pumpbin
最后,小编想问大家,你是安服吗?你会在被R穿的情况下刷抖音吗?欢迎下方留言