fanny equation 1

(在搜索'fanny'之前,我一直把它当作'funny',看到baid结果后又学到新知识。)

相关背景:https://securelist.com/a-fanny-equation-i-am-your-father-stuxnet/68787/ 

环境:vista sp2 32

工具:windbg,vc6.0

fanny.dll包含有漏洞的利用过程,下面简单记录如何让它跑起来并在相应的系统环境下触发漏洞修改NtShutdownSystem的代码作为下一步的跳板。首先需要对fanny.dll做一点处理,因为在DllMain中有检测环境的逻辑得给他去掉,让DllMain直接返回true而不执行相关逻辑;再通过硬编码调用vista 系统对应的利用函数(利用过程及漏洞原因感兴趣的可以看看,我不是太了解这个)。

DllMain中修改2处:

1处

fanny equation 1

修改后,fdwReason=1,eax=1,eax-5=-4,后面的条件都不匹配,逻辑也不会执行

fanny equation 1

2处

fanny equation 1

修改后,eax的值还是fdwReason=1,true;这样DllMain就正常返回,后面就可以通过模块的基址加上函数偏移来调用目标函数。

fanny equation 1

修改完成之后,通过LoadLibrary加载fanny.dll,再模块基址加偏移调用vista 版本的利用函数。

在利用函数中还有一处是检查名为‘prkMtx'的mutex是否存在,如果不存在就停止执行,这里在调试的时候要将检查结果改为true,或者在自己的加载程序中创建'prkMtx'。

成功执行后,NtShutdownSystem的代码就被修改成立跳板,不过跳到的地方代码执行就相当于在r0环境下,因为是直接从r0 jmp .

fanny equation 1

jmp 0008:00400200, 8代表什么意思搞忘记了,之前好像看到过;0x400200 是要跳转过去的地方,在r3。