首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

缓冲区溢出漏洞学习的有关问题

2012-01-14 
缓冲区溢出漏洞学习的问题#include stdio.h#include windows.hchar ourshellcode[]\x33\xDB\x53\x53

缓冲区溢出漏洞学习的问题
#include <stdio.h>
#include <windows.h>

char ourshellcode[]="\x33\xDB\x53\x53\x53\x53\xB8\xEA\x04\xD5\x77\xFF\xD0";

void main()
{
LoadLibrary("user32.dll");
int *ret;
ret=(int*)&ret+2;
(*ret)=(int)ourshellcode;
return;
}

从黑客防线2009缓冲区溢出攻击防范专辑上的代码。
用vc6.0运行并未出现录像中的报错对话框。请高手给予指教。

[解决办法]

C/C++ code
8:        LoadLibrary("user32.dll");00401028   mov         esi,esp0040102A   push        offset string "user32.dll" (0041f01c)0040102F   call        dword ptr [__imp__LoadLibraryA@4 (00424138)]00401035   cmp         esi,esp00401037   call        __chkesp (00401080)9:        int *ret;10:       ret=(int*)&ret+2;0040103C   lea         eax,[ebp+4] //得到局部变量ret地址0040103F   mov         dword ptr [ebp-4],eax//根据堆栈的结构,取得ret上面第二个字节的地址11:       (*ret)=(int)ourshellcode;00401042   mov         ecx,dword ptr [ebp-4]00401045   mov         dword ptr [ecx],offset ourshellcode (00421a30) //从ret上面第二个地址填充shellCode代码,因为代码的长度大于了12个字节,破坏了堆栈的平衡12:       return;13:   }0040104B   pop         edi0040104C   pop         esi0040104D   pop         ebx0040104E   add         esp,44h00401051   cmp         ebp,esp00401053   call        __chkesp (00401080)00401058   mov         esp,ebp0040105A   pop         ebp0040105B   ret
[解决办法]
借用了3#的代码,对他的代码重新注释一下
C/C++ code
0040103C   lea         eax,[ebp+4]      // [ebp + 4]是main函数上层函数的返回地址0040103F   mov         dword ptr [ebp-4],eax// [ebp - 4]是ret这个变量的地址,也就是把ret这个指针指向了main函数返回后的下一条地址11:       (*ret)=(int)ourshellcode;00401042   mov         ecx,dword ptr [ebp-4]00401045   mov         dword ptr [ecx],offset ourshellcode (00421a30)  //这里是把返回地址指向了你的那个字符串的首地址 

热点排行
Bad Request.