文件快捷方式漏洞MS10-046是除了n年前的动画光标(.ani)漏洞之外另一个让我觉得比较有趣的漏洞,毕竟是本机执行任意代码的权限,当然,n年前我还只是一个菜鸟,神马都不懂.
入正题吧,欢迎拍砖,大家一起进步.(后面我会把一些参考文章贴出来的)
由于MS10-046的漏洞是在shell32.dll当中,windows出于美化的目的,会现实快捷方式的图标,这个图标可能是程序本身自带的ico,也可能是系统默认的那些图标,对于一个快捷方式,系统会对它进行解析从而获取他要显示的那个图标,但是在解析的时候没有做好参数验证工作,我觉得在设计上也是有一定缺陷的,后面会详细说.
首先必须解决的问题是调试,怎么去调系统的解析操作,当然是用windbg啦,ring0还是比较劲的,但是默认的情况下,windbg是不会加载ring3的符号的,怎么解决这个问题,让windbg能够调试应用层的程序,步骤如下:
1.!process 0 0 explorer.exe //主要是获取explorer.exe的_EPROCESS地址,上下文切过去
2..process /p _EPROCESS地址 //这是点命令,切到指定的进程上下文去
3..reload /user [/f] [dll名称] //也是点命令,用于加载应用层的符号,如.reload /user shell32.dll
之后就可以使用bp下断了,如bp shell32!_LoadCPLModule
解决了调试问题之后,我们来研究一下这个恶意构造的lnk文件是如何构造出来的.
操作系统能够让我们自己对控制面板里面的程序进行扩展,如图
快捷方式跟控制面板的这些程序还是有点关系的.这些程序被称为Control panel applets,他们的实质就是一个后缀名为.cpl的文件,如图,VMware Tools对应的.cpl
虽然后缀名是.cpl,但是实质上他是一个dll,至于怎么判断出来的,我们都知道,dll和exe都是PE文件格式,具有相似性,并且,exe文件也是可以具有导出目录的,那么如何在PE格式的这个角度判断一个文件是exe还是dll,这个下午也花了点时间去找资料,在<An In-Depth