« 驱动枚举所有快捷键利用0day在win7下从user权限提升到system权限演示 »

编写不影响继续执行的栈溢出shellcode,拒绝不返回,拒绝崩溃

上次说的溢出0day的shellcode终于写完了,开始遇到了不少困难,但都一一解决了。

一开始,像大多数其它溢出那样,执行完shellcode后就sleep等死,可是这里不行,在进入有漏洞的函数前,系统占了一个锁,如果等死了,整个系统也立马卡死。函数调用是像下面这样的:

call func2()
{
    getlocker();
    bugfunc();//存在溢出的函数
    releaselocker();
}
func1
{
    call func2();
}

解决方法是在bugfunc函数返回到shellcode的开头时,记录下esp,根据这个esp计算出溢出前ebp与esp的值并恢复(ebp已经被覆盖,但esp是有效的),然后通过ebp回溯一层调用堆栈,得到func2的返回 地址,返回地址-5得到call func2语句的地址,然后在func2 中根据特征找到call bugfunc的地址,当shellcode执行完之后就跳到这个地址+5的位置。由于寄存器的值也都保存下来了,这样整个溢出就相当于bugfunc调用失败了(猜测模拟成功都是可以做到的),其它一切正常,继续从call bugfunc的下一行开始执行。

 

 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 2.0 bate Build Theme by toboku

Copyright langouster. Some Rights Reserved.   苏ICP备06046736号