首页
社区
课程
招聘
[原创]缓冲区溢出攻击浅析,写给初学者
发表于: 2011-3-25 12:04 26219

[原创]缓冲区溢出攻击浅析,写给初学者

2011-3-25 12:04
26219
收藏
免费 7
支持
分享
最新回复 (129)
雪    币: 2547
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
感谢楼主的劳动,向楼主学习
2011-3-31 11:19
0
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
52
算了啦。大家都是朋友。不会放在心上的。
2011-3-31 13:22
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
新人围观围观
2011-3-31 13:54
0
雪    币: 219
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
谢谢,新手致谢.
2011-3-31 22:00
0
雪    币: 89
活跃值: (185)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
55
求pdf版             -------------
2011-4-1 09:51
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
下载还要钱的呀  没钱呀
2011-4-1 10:14
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
57
非常好的文章, 拜读ing。。。
2011-4-1 10:43
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
谢谢LZ。。。能加你Q吗???我的284116775
2011-4-1 11:21
0
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
59
加你了哈。注意看哈。
2011-4-1 13:50
0
雪    币: 616
活跃值: (175)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
多谢楼主分享
2011-4-1 16:13
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
网上类似的教程很多,不过还是多谢楼主。
2011-4-1 16:58
0
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
62
有点像学习整理后手札
2011-4-1 21:14
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
有兴趣的话,可以拿去年的腾讯安全挑战赛第一题来试试!我就是通过那道题开始了解缓冲区溢出的。
2011-4-1 23:22
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
感觉好象很难学呀。。
2011-4-2 20:17
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
65
问个问题,
如果我针对漏洞函数
int  defect( char* p )
{
    char ch[4];
    memcpy( ch, p, 1000 );
}
进行溢出, 那么我就需要修改defect()的返回地址, 也就是对ch[] 进行溢出, 即一般把 [ebp+4]地址修改成需要的地址,
但问题是:一般情况下函数以 push ebp; mov ebp, esp ; 开始 也就是直接针对ch溢出会破坏ebp链,导致不等执行到shellcode, 程序就down掉了,

请问这个问题需要如何绕过去呢?

thx
2011-4-7 13:40
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
这个不错,新手学习一下,楼主写得很用心
2011-4-7 17:44
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
[QUOTE=levizhou;945107]问个问题,
如果我针对漏洞函数
int  defect( char* p )
{
    char ch[4];
    memcpy( ch, p, 1000 );
}
进行溢出, 那么我就需要修改defect()的返回地址, 也就是对ch[] 进行溢出, 即一般把 [ebp+4]地...[/QUOTE]

破坏了ebp值又不会触发异常,除非是ebp被改成指向不可访问的内存页了,在shellcode里触发访问异常。高级些的可以在shellcode里还原ebp、esp,普通的就在shellcode循环不出来就行了。

话说那老师确实讲的不错,lz码字也很积极
2011-4-7 21:11
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
谢谢LZ分享,新手学习了,万分感谢
2011-4-7 21:16
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
69
兄弟, 如果ebp破坏后还如何能执行植入的shellcode呢,请看清楚问题

看lz的sample code 是类似:

int  defect( char* p )
{
    __asm mov dword ptr [ebp+0x04],  0x7ffa4512;   

    char ch[4];
   
    memcpy( ch+0x0c, p, 1000 );  
   
}

大体上来说基本上不可能有哪台服务器出现这种漏洞的,
我的问题是如何通过p溢出来达到攻击的目的, 假设p中含有一段shellcode
漏洞代码为
int  defect( char* p )
{
    char ch[4];
   
    memcpy( ch, p, 1000 );     
}

==============================update=====================
debug模式下能够适当初始化p可以执行到自己的shellcode, 可是会产生一个异常, 也就是不完美
2011-4-8 08:57
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
[QUOTE=levizhou;945446]兄弟, 如果ebp破坏后还如何能执行植入的shellcode呢,请看清楚问题

看lz的sample code 是类似:

int  defect( char* p )
{
    __asm mov dword ptr [ebp+0x04],  0x7ffa4512;   

...[/QUOTE]

#include <stdio.h>
#include <memory.h>

int  defect(char* p);
void printself();
int main(int arg,char *arv[])
{
        char shellcode[100]="1234567812345678";
        int *pint=(int *)shellcode;
        pint[1]=0x3D0000;//新EBP值
        pint[2]=(int)printself;//shellcode地址
       

        return         defect(shellcode);
}

int  defect(char* p)
{
        char ch[4];
        memcpy( ch,p,100);
        return 0;
}

void printself()
{
        printf("I am Shellcode\n");
        while(1);
}


不多说了,拿去编译下吧,release编译,禁用优化。 test.exe.txt
上传的附件:
2011-4-8 21:25
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
学习一下。。。
2011-4-8 22:24
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
排版很好,楼主真是好人!学习了~
2011-4-8 23:38
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
73
[QUOTE=灭绝雪翁;945691]#include <stdio.h>
#include <memory.h>

int  defect(char* p);
void printself();
int main(int arg,char *arv[])
{
        char shellcode[100]="123456781...[/QUOTE]

thx, 我的也调通了,

之前是因为debug build 导致的问题
2011-4-9 12:15
0
雪    币: 288
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
不错啊不错!收藏个先
2011-4-9 13:22
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
asdfeasdfasdv
2011-4-9 15:49
0
游客
登录 | 注册 方可回帖
返回
//