首页
社区
课程
招聘
新手求助,0day安全中栈溢出实验问题
发表于: 2014-3-2 21:53 5949

新手求助,0day安全中栈溢出实验问题

2014-3-2 21:53
5949

如上。。。为何不会在函数返回时根据被溢出的返回地址去执行shellcode呢?

实验是0day安全第二章的。。
源码如下:
#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password(char *password)
{
        int authenticated;
        char buffer[44];
        authenticated=strcmp(password,PASSWORD);
        strcpy(buffer,password);
        __asm int 3
        return authenticated;
}
main()
{
        int valid_flag=0;
        char password[1024];
        FILE * fp;
        LoadLibrary("user32.dll");
        if (!(fp=fopen("password.txt","rw+")))
        {
                exit(0);
        }
        fscanf(fp,"%s",password);
        valid_flag=verify_password(password);
        if(valid_flag)
        {
                printf("incorrect password");
        }
        else
        {
                printf("Congratulations!You have passed the verification!\n");
        }
        fclose(fp);
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
shellcode如下。。
3跾hykcihRiiH嬆SPPS窪e醱袗悙悙悙悙悙悙悙悙悙悙??
2014-3-2 21:54
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
3
你的操作系统版本是什么?
2014-3-2 22:11
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
windows2000
2014-3-2 22:23
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
额...好像图片挂了 补一下一楼的图片
2014-3-2 22:29
0
雪    币: 0
活跃值: (751)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
自己调试一下就是知道了。。

ebp + 4 = ReturnAddress
ebp + 8 = 第一个参数
ebp + c = 第二个参数 。。

不熟悉栈帧的可以去看看 《Intel 汇编语言程序设计》第五版中的“高级过程”章节

10kx的奖励给我吧、好让我转正
2014-3-2 22:54
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
那本书我看过= =  但是问题没有解决啊 这里ebp是0012FB68,EBP+4位置0012FB6C已经被我覆盖成shellcode的起始地址0012FB3C了啊 为什么没有执行呢。。
2014-3-2 23:23
0
雪    币: 0
活跃值: (751)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
我怎么感觉你不会调试啊。。要不就是还没理解
不同编译器、就连Debug 和 Release版本生成的程序都不是一样的。
你肯定不能完全对着书本上的例子照抄。

我的测试程序都是自己写的、一开始用vs2010来写。(vs2010 Debug版本每个变量之间还有空隙、蛋疼的一逼)
完全理解了以后再用vc6(vc6生成的变量之间好像没空隙)写了一遍就很简单了。
主要是要理解、然后要注意根据具体生成的代码(很多情况会造成代码不一样)做栈溢出

其实就是要注意、缓冲区的起始地址和返回地址之间的距离不是固定的。(0day书里面也多次强调了操作系统版本 和 编译器版本)
2014-3-3 00:43
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
嘿嘿......谢谢 我确实还是新手 调试也很不熟练
刚看到你已经转正了 不过我就这10kx还是给你好了,但结贴之前可不可以再请教一个问题呢
想问一下如何才能有效率的提高自己的调试能力 有什么好的方法吗?
2014-3-3 18:33
0
雪    币: 0
活跃值: (751)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
熟悉调试工具 od、ida、windbg、vs调试器
还可以看看别人怎么使用这些工具
2014-3-4 10:08
0
雪    币: 300
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
顶一下。
2014-7-12 16:29
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
看王清写的0day
2014-7-25 10:08
0
游客
登录 | 注册 方可回帖
返回
//