如题所述
因为调用函数的过程大致是
1:将参数从右到左压入堆栈
2:将下一条指令的地址压入堆栈
3:跳进函数出
4push ebp保存ebp的值
5:子函数开辟内存空间(如sub esp,1024)6mov ebp,esp由ebp操纵堆栈 。。。。
但是当你的临时变量的大小成功了5处开辟的内存 就会覆盖到后面的返回地址 当函数执行完后就会 跳转到 返回地址 处执行 而你可以将返回地址 覆盖成你的 代码(shellcode)处的地址
这样 返回时就会执行你的代码了
当然由于你的shellcode地址不固定 这么利用几乎是不可能的 你可以 jmp esp 或 利用seh链执行你的shellcode 这些你可以百度一下 或者到 看雪论坛 去看一下
1:将参数从右到左压入堆栈
2:将下一条指令的地址压入堆栈
3:跳进函数出
4push ebp保存ebp的值
5:子函数开辟内存空间(如sub esp,1024)6mov ebp,esp由ebp操纵堆栈 。。。。
但是当你的临时变量的大小成功了5处开辟的内存 就会覆盖到后面的返回地址 当函数执行完后就会 跳转到 返回地址 处执行 而你可以将返回地址 覆盖成你的 代码(shellcode)处的地址
这样 返回时就会执行你的代码了
当然由于你的shellcode地址不固定 这么利用几乎是不可能的 你可以 jmp esp 或 利用seh链执行你的shellcode 这些你可以百度一下 或者到 看雪论坛 去看一下
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-05-27
持续访问