(在搜索'fanny'之前,我一直把它当作'funny',看到baid结果后又学到新知识。)
相关背景:A Fanny Equation: "I am your father, Stuxnet" | Securelist
环境:vista sp2 32
工具:windbg,vc6.0
fanny.dll包含有漏洞的利用过程,下面简单记录如何让它跑起来并在相应的系统环境下触发漏洞修改NtShutdownSystem的代码作为下一步的跳板。首先需要对fanny.dll做一点处理,因为在DllMain中有检测环境的逻辑得给他去掉,让DllMain直接返回true而不执行相关逻辑;再通过硬编码调用vista 系统对应的利用函数(利用过程及漏洞原因感兴趣的可以看看,我不是太了解这个)。
DllMain中修改2处:
1处
修改后,fdwReason=1,eax=1,eax-5=-4,后面的条件都不匹配,逻辑也不会执行
2处
修改后,eax的值还是fdwReason=1,true;这样DllMain就正常返回,后面就可以通过模块的基址加上函数偏移来调用目标函数。
修改完成之后,通过LoadLibrary加载fanny.dll,再模块基址加偏移调用vista 版本的利用函数。
在利用函数中还有一处是检查名为‘prkMtx'的mutex是否存在,如果不存在就停止执行,这里在调试的时候要将检查结果改为true,或者在自己的加载程序中创建'prkMtx'。
成功执行后,NtShutdownSystem的代码就被修改成立跳板,不过跳到的地方代码执行就相当于在r0环境下,因为是直接从r0 jmp .
jmp 0008:00400200, 8代表什么意思搞忘记了,之前好像看到过;0x400200 是要跳转过去的地方,在r3。
20221226
0008:00400200中的0008表示段选择子,用来决定当前段的环境,0008表示的是r0环境。关于段选择子详细可以参考:https://blog.csdn.net/weixin_45678798/article/details/125222624 。这种攻击方式,直接将r0的代码放在r3,然后触发执行。不过从win8开始,系统引入SMEP 安全机制来阻止类似的攻击。