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

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

2011-3-25 12:04
25220
收藏
点赞6
打赏
分享
最新回复 (129)
雪    币: 2547
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
waterwind 2011-3-31 11:19
51
0
感谢楼主的劳动,向楼主学习
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
firfor 1 2011-3-31 13:22
52
0
算了啦。大家都是朋友。不会放在心上的。
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhanxcyy 2011-3-31 13:54
53
0
新人围观围观
雪    币: 219
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
alargel 2011-3-31 22:00
54
0
谢谢,新手致谢.
雪    币: 89
活跃值: (185)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
kuang110 6 2011-4-1 09:51
55
0
求pdf版             -------------
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linzhu 2011-4-1 10:14
56
0
下载还要钱的呀  没钱呀
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
levizhou 1 2011-4-1 10:43
57
0
非常好的文章, 拜读ing。。。
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
狂风hy 2011-4-1 11:21
58
0
谢谢LZ。。。能加你Q吗???我的284116775
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
firfor 1 2011-4-1 13:50
59
0
加你了哈。注意看哈。
雪    币: 616
活跃值: (175)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
daimeiquan 2011-4-1 16:13
60
0
多谢楼主分享
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Orzogc 2011-4-1 16:58
61
0
网上类似的教程很多,不过还是多谢楼主。
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yoke 2011-4-1 21:14
62
0
有点像学习整理后手札
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
江南纸鸢 2011-4-1 23:22
63
0
有兴趣的话,可以拿去年的腾讯安全挑战赛第一题来试试!我就是通过那道题开始了解缓冲区溢出的。
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
livexg 2011-4-2 20:17
64
0
感觉好象很难学呀。。
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
levizhou 1 2011-4-7 13:40
65
0
问个问题,
如果我针对漏洞函数
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
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
secsip 2011-4-7 17:44
66
0
这个不错,新手学习一下,楼主写得很用心
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
灭绝雪翁 2011-4-7 21:11
67
0
[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码字也很积极
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
urlanyi 2011-4-7 21:16
68
0
谢谢LZ分享,新手学习了,万分感谢
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
levizhou 1 2011-4-8 08:57
69
0
兄弟, 如果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, 可是会产生一个异常, 也就是不完美
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
灭绝雪翁 2011-4-8 21:25
70
0
[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
上传的附件:
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
miniants 2011-4-8 22:24
71
0
学习一下。。。
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thankme 2011-4-8 23:38
72
0
排版很好,楼主真是好人!学习了~
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
levizhou 1 2011-4-9 12:15
73
0
[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 导致的问题
雪    币: 288
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
周zhou周 2011-4-9 13:22
74
0
不错啊不错!收藏个先
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjqsvip 2011-4-9 15:49
75
0
asdfeasdfasdv
游客
登录 | 注册 方可回帖
返回