首页
社区
课程
招聘
[原创]LNK文件格式分析及伪装
发表于: 2020-7-27 10:43 11480

[原创]LNK文件格式分析及伪装

erfze 活跃值
12
2020-7-27 10:43
11480

文件前20字节固定不变:

图片1 文件前20字节

HeaderSize(4 bytes, offset 0x00):0x0000004C

LinkCLSID(16 bytes, offset 0x04):00021401-0000-0000-C000-000000000046

offset 0x14起始4字节为LinkFlags(下图来自微软官方文档):

图片2 LinkFlags定义

由图片2可以看到,该文件LinkFlags为0x000802DB(Bin:0000 0000 0000 1000 0000 0010 1101 1011),这表示以下Flag被设置:

上述Flag会在下文解释,故此处先不做展开。

offset 0x18起始4字节为FileAttributes, 0x00000020表示FILE_ATTRIBUTE_ARCHIVE

offset 0x1C开始,每个字段各占8字节:

图片3 Time

由图4可以看到,FileSize为0x000E0400(占4个字节)。

IconIndex为0x00000001(占4个字节)。

offset 0x3C开始,ShowCommand占4字节,0x00000001表示SW_SHOWNORMAL;Hotkey占2字节;余下10个字节均为保留位。

由于LinkFlags中HasLinkTargetIDList设为1,故文件包含LinkTargetIDList结构。LinkTargetIDList构成如下:

图片5 LinkTargetIDList

而IDList由ItemID构成,以2字节全为0的TerminalID作为结束:

图片6 ItemID

下面来看示例文件中的LinkTargetIDList:

图片7 LinkTargetIDList示例

上图红色部分为IDListSize,绿色部分为TerminalID,中间蓝色部分则为IDList。下面来看IDList,第一个ItemID如下:

第二个ItemID:

图片8 ItemID-2

第三个ItemID:

图片9 ItemID-3

不再赘述,其含义为Windows。

第四个ItemID:

图片10 ItemID-4

其含义为System32。

第五个ItemID:

图片11 ItemID-5

由于LinkFlags中HasLinkInfo设为1,故文件包含LinkInfo结构。LinkInfo构成如下:

图片12 LinkInfo

下面来看下示例文件中的LinkInfo:

图片13 LinkInfo示例

每个String Data结构如下:

图片14 String Data

由于LinkFlags中HasRelativePath设为1,故文件包含RELATIVE_PATH字符串:

图片15 RELATIVE_PATH

红色部分是CountCharacters(Unicode字符串长度,故应该为0x22*2=0x44),蓝色部分则为String。

之后是WORKING_DIR字符串:

图片16 WORKING_DIR

ICON_LOCATION字符串:

图片17 ICON_LOCATION

由于LinkFlags中HasExpString设为1,故文件包含EnvironmentVariableDataBlock:

图片18 EnvironmentVariableDataBlock

图片19 TargetAnsi

图片20 TargetUnicode

由零个或多个下列数据块与TERMINAL_BLOCK组成:

图片21 EXTRA_DATA

示例文件中的EXTRA_DATA包含SpecialFolderDataBlock:

图片22 SpecialFolderDataBlock

KnownFolderDataBlock:

图片23 KnownFolderDataBlock

PropertyStoreDataBlock:

图片24 PropertyStoreDataBlock

PropertryStore(492 bytes)

TrackerDataBlock:

图片25 PropertyStoreDataBlock

我们首先生成一个正常的LNK文件:

图片26 正常LNK文件

之后更改其图标为%SystemRoot%\System32\SHELL32.dll中任意一个:

图片27 修改图标

用010 Editor打开该LNK文件,找到String Data部分ICON_LOCATION字符串:

图片28 ICON_LOCATION

我们要将其修改为.\1.pdf(Unicode),其长度0x07:

图片29 修改图标

其效果如下所示(左边机器打开PDF文件的默认程序是XODO PDF Reader,中间是Adobe Reader,右边是谷歌浏览器):

图片30 效果展示

原始目标如下所示:

图片31 原始目标

现在我们修改EnvironmentVariableDataBlock中的TargetAnsi及TargetUnicode:

图片32 修改TargetAnsi

图片33 修改TargetUnicode

将其修改为%windir%\system32目录不存在的一个EXE文件名。

效果展示:

图片34 效果展示

但这时双击该文件会报错:

图片35 报错

所以我们需要再修改LinkTargetIDList中第五个ItemID:

图片36 修改第五个ItemID

如此一来,打开该文件便会弹出计算器:

图片37 弹出计算器

首先新建一指向%windir%\System32\mshta.exe的快捷方式(文件名尽量带有迷惑性),并更改其图标为%SystemRoot%\System32\SHELL32.dll中任意一个:

图片38 mshta

之后更改其参数为HTA下载地址:

图片39 文件下载

注:笔者是使用Cobalt Strike生成HTA文件:

于其执行payload前增加如下 语句:

这样一来,在受害者打开LNK文件后会从远程下载一正常PDF文档并打开。

接下来按照0x02部分所述方法修改即可,此处加一个Tip——在其WORKING_DIR字符串前面添加大量空格字符,使其目标长度超过260个字符:

图片40 添加空格字符

使用copy \B命令将其与正常PDF文档捆绑,使其文件大小看起来更具有迷惑性:

图片41 文件大小

之后双击该LNK文件,主机便会上线,而受害者会看到一正常的PDF文档:

图片42 主机上线

效果展示:

图片43 效果

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-7-29 22:34 被erfze编辑 ,原因: 某张图片错误
收藏
免费 9
支持
分享
最新回复 (7)
雪    币: 1332
活跃值: (9481)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
2
许久没有发帖,不知道本文应当发在哪个版块...
其中如有不当之处,望读者不吝赐教,笔者感激不尽。
2020-7-27 10:45
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
erfze 许久没有发帖,不知道本文应当发在哪个版块... 其中如有不当之处,望读者不吝赐教,笔者感激不尽。
就发在这个版块,感谢分享!
2020-7-27 21:09
0
雪    币: 1332
活跃值: (9481)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
4
Editor 就发在这个版块,感谢分享!
起初要发Web版块的,但是后来想想发Web版块可能更不合适
2020-7-27 22:19
0
雪    币: 288
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2020-7-29 22:14
0
雪    币: 0
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
再稍微处理,部分杀软就瞎了,这方法目前来说确实给APT拿来做了不少地方了啊
2020-8-25 10:02
0
雪    币: 1230
活跃值: (1765)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
响尾蛇使用过的...
2021-8-12 11:07
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
作者您好,看到您的文章质量很高,具有很强的知识理论,特此向您申请这篇文章的授权,发布在其他平台,供更多的网络爱好者学习。在转载发布时一定会对文章作者等内容进行声明,期待您的回复。
2022-5-30 11:11
0
游客
登录 | 注册 方可回帖
返回
//