0day一书的学习心得

写的很乱,凑合着看吧,也许要既看过书又做了Exploit比赛题目同时还是菜鸟的人才会和我有同感,呵呵.

failwest这本书深入浅出,对前沿技术领域总是有自己独特的见解,很让人回味,这使学习的过程变成了一种享受,看完后还有种余犹未尽的感觉,忍不住感叹,要是能再增加一倍的容量就好了.也许不久之后,在漏洞领域failwest这本书就同Win32编程领域的<<Windows程序设计>>一样将成为经典之作.:)

书看完了,例子也做了,我就想着自己怎么样开始实践呢?看到论坛上有去年Explit大赛的专题,于是就把A和B两道题都下载了,决定先不看答案,尝试看自己能不能做出来?

先做A题,发现还是很简单的,加上说明文档里已经说了这是个服务器端程序,所以用IDA打开来一看,很快就看到溢出的地方,典型的栈缓冲区溢出,栈空间是200字节,但却可以拷贝最大512字节的内容,马上联想到了书中所讲的有两种方法:
 1) 把Shellcode布置在缓冲区前面,淹没返回地址为缓冲区地址,这样就能跳到Shellcode了;
 2) 把Shellcode布置在缓冲区后面,淹没返回地址为jmp esp的地址,这样也能跳到Shellcode;
把代码写出来后在本机上运行,OD调试能够进入Shellcode,但调用到LoadLibrary老是异常,用OD单步跟踪还是莫名奇妙,于是放到虚拟机执行,结果Win2K和XP都能成功运行.后来猜想可能是卡巴斯基的问题,于是放到另外一台机器上运行,果然就成功了;

再做B题,是个Active控件,傻眼了,知道要用ComRaider,但书上没有实战例子,完全不知道怎样才能Fuzz出漏洞来,无奈放弃自己做的想法.于是下载了那些获得了名次的高手们的答案,正所谓开卷有益,果然又看到了很多猛料.:)

一开始我用ComRaider来Fuzz时老是弹出错误框,后来看了netwind写的才知道注册的DLL和打开的DLL必须是同一个路径,原来netwind也犯了和我一样的错误,哈哈.同时看netwind的A题答案还让我知道了A题的第3种方法,谢谢了!
 3) 还是把Shellcode布置在缓冲区前面,在函数返回时ESP+4正好指向输入参数,所以淹没返回地址为retn指令的地址,这样还是能跳到Shellcode;这种方法不需要JMP或CALL,我想应该是最通用的办法了.

还有看nop的答案,成名多年的高手真是不同凡响,答案既有详尽的步骤又精炼,非常的专业,写出来的代码也是让人大开眼界,让人钦佩.我想在以后的时间内nop的代码会有很多参考之处.

看完书还有一个感觉就是做漏洞分析需要很广泛的知识,汇编是不用说了,还要懂各种脚本语言,Html,VbScript,Perl,Python,Ruby一样都不能少.还有COM,Active知识也要了解.
我只熟悉C和汇编,原来以为这样就足够了,现在看来,还需要学习再学习.

在MSF的网站上还得到一个MSF的中文手册,有需要的可以下载.