首页
社区
课程
招聘
[旧帖] [求助]有沒有大大回答我?? 0.00雪花
发表于: 2010-3-28 12:31 5239

[旧帖] [求助]有沒有大大回答我?? 0.00雪花

2010-3-28 12:31
5239
#include <stdio.h>
#include <string.h>

char* JMPESP="\x80\xE4\x92\x7C"; // 不明白這個地址是如何找出來的 我總是不能成功

const char shellcode[]="\x33\xC0\xB8\x8F\x7A\x83\x7C\x68\x00\x04\x00\x00\x68\x00\x03\x00\x00\xFF\xD0\x33\xC0\xB8\xFA\xCA\x81\x7C\xFF\xD0\
";   // Beep and Exitprocess

int overflow(char * buf){

        char input[20];

        //不知道如何overwrite這個buffer??  是+20 +24還是怎樣??
        strcpy(input+20,JMPESP);
        strcpy(input+24,shellcode);

        printf("input is: %s \n", input);

        getchar();

        return 0;

}

int main(int argv , char* argc){

        char buf[100];
        int i;

        printf("here\n");

        for( i=0; i<100 ; i++)
        strcpy(buf[i], "A");

        overflow(buf);

printf("main is: %s \n");
        return 0;
}
這個overflow我試了很多次都摸不著如何攻擊
我試了用ollydbg找 overflow return  address用kernel32.dll的jmp esp
這樣
strcpy(buffer+20 , jmpesp)
strcpy(buffer+24 , shellcode)

都不能攻擊成功@@

strcpy(buffer+16 , jmpesp)
strcpy(buffer+20, shellcode)
也不可以

菜鳥不太懂找溢出点  有沒有大大可以指點指點!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
懇請會的朋友指點小弟!!

我是用
windows xp sp3 繁體中文
visual studio 2008

安裝了VS2008 不知道會否有影響??
2010-3-28 16:07
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=walterwong;782352]#include <stdio.h>
#include <string.h>

char* JMPESP="\x80\xE4\x92\x7C"; // 不明白這個地址是如何找出來的 我總是不能成功

const char shellcode[]="\x33\xC0\xB8\x...[/QUOTE]

你是真的台湾人?
考你两个词: “堆栈”和“内存” 在台湾叫什么?
2010-3-28 21:03
0
雪    币: 4399
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
台湾的正体和港澳的繁体还是有很大的区别的吧,很多繁体都用简体代替,港澳繁体则是全部繁体。
用繁体系统打繁体字也不一定就是台湾人啊,我认识的很多深圳朋友都喜欢打繁体字用繁体系统唉。
而你考的问题人家上wikipedia就知道了。。自动转换
2010-3-28 21:17
0
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
5
ShellCode可能不大对吧?没弄出结果来。
JMPESP 可以放ShellCode的地址指针吧,我认为是用它覆盖子程序返回的地址,把这个地址改为shellcode的首地址,那么程序返回就会运行到shellcode的代码。也就达到了overflow的目的。

不早了,明天有时间再试试吧。
2010-3-28 23:45
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
"\x80\xE4\x92\x7C"  是事先设定的,作者能保证自已的程序会加载一个库,而且0x7c92e480这个位置就属于这个库的内存空间。
2010-3-29 09:15
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
char* JMPESP="\x80\xE4\x92\x7C";
strcpy(input+20,JMPESP);

换个更容易理解的写法,但编译以后不能保证正常运行

DWORD dwJmpEsp = 0x7c92e480;

* (DWORD *)(input + 20) = dwJmpEsp;

简化以后可写为:
* (DWORD *)(input + 20) = 0x7c92e480;
2010-3-29 09:18
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
作者那么写,可能是为了防止其它程序 监视,所以在此做了复杂化的变形
2010-3-29 09:22
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
visual studio 2008 默认启用了GS,如果GS启用了的话,即便shellcode布局都对了,这种溢出也是不能成功的
2010-3-29 09:52
0
雪    币: 22
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
9楼说的对,sp2之后,栈中就加入了security cookie,在函数返回前检测栈溢出。
2010-3-29 11:24
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
下 那以後豈不是很難玩overflow了@@
個個compiler都不同 , 又難破解!!
有沒有方法可以破解 VS 2008的 GS??
2010-3-29 11:32
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你是說DEP??
我已經設定成 只為基本的windows程式和服務開啟DEP
2010-3-29 11:37
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不好意思, 如果現時的compiler已經那麼先進 可以自動加入(緩衝區安全性檢查)那麼overflow以後會很少@@
2010-3-29 11:42
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
GS和DEP两个不同的保护机制
单纯的GS,还是很好绕过去的,你可以在论坛上搜索一下,我记得有一篇翻译好的论文讲的是如何绕过Windows安全机制
2010-3-29 19:06
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
謝謝 我還有另外一個問題

overwrite 返回指針的意思是否每個function的 return 0?


int overflow(char *buf){
char input[20];
strcpy(input,buf);

return 0;
//是否覆寫這個地址? 教學經常提到的eip 返回地址是這個??  但為何是 inpout的size +4 ?  如果strcpy指令下邊還有其他程式碼 strcpy(input+4,"AAAAAA")不是overwrite了下邊的程式碼嗎?
}
2010-3-29 20:20
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这种溢出,实际上是覆盖了函数的返回地址,在函数返回的时候程序就被你劫持了,这个与函数返回值是没什么联系的。input+4,这个是要根据实际情况调整的,为得是就将跳板地址刚好放在函数返回地址的位置。建议你到 漏洞分析 版块搜索一下这方面的基础内容。
2010-3-29 22:02
0
雪    币: 195
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
"為何是 inpout的size +4"
因为JMPESP="\x80\xE4\x92\x7C"; 是4个字节,在它后面放shellcode
"overwrite 返回指針的意思是否每個function的 return 0?"
实在不明白你的意思。return 0 是c 函数的返回,和shellcode没有任何关系。eip总是指向下一条指令的地址,返回到它自然就起执行后面的shellcode的了。
而且,你给的程序是生成一个特定的shellcode,因为jmpesp的位置已经固定了。也就是说它是为作者自己写的某个有堆栈溢出漏洞的程序练习测试用的。并不通用。
2010-4-1 19:59
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不早了,明天有时间再试试吧。
2010-4-1 23:10
0
游客
登录 | 注册 方可回帖
返回
//