首页
社区
课程
招聘
[技术专题]软件漏洞分析入门_6_初级shellcode_定位缓冲区
发表于: 2007-12-18 21:23 42586

[技术专题]软件漏洞分析入门_6_初级shellcode_定位缓冲区

2007-12-18 21:23
42586
收藏
免费 7
支持
分享
最新回复 (106)
雪    币: 208
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
76
不是方勇兄 !
2008-3-31 20:53
0
雪    币: 157
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
77
报名来晚了一点,不好意思
2008-4-9 15:10
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
78
老师,那个插件怎么下不了?是不是因为我是新来的哈!
2008-4-21 17:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
79
又进步了一点儿,,哈哈,,高,实在是高!
2008-4-21 22:26
0
雪    币: 217
活跃值: (86)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
80
学习了 不错的定位方法
2008-4-29 11:19
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
81
软件漏洞分析入门_6_初级shellcode_定位缓冲区 真的好喜欢
2008-9-8 15:42
0
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
82
jmp esp 这个地址我用您的程序找到了,但是后来把这个地址写到了password.txt里面,一运行准备溢出的程序,就弹出这个地址不能读写的警告,user32.dll里面的地址不能读写,这是什么原因,请老师指教
2008-10-21 19:11
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
83
成功啦,谢谢老师,
2008-11-19 13:40
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
84
努力学习...
2009-1-8 16:44
0
雪    币: 1351
活跃值: (262)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
85
谢谢楼主,正要学习
2009-1-15 22:02
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
86
很不错,不过为什么用你的那个插件OllyUni.dll,OllyDBG要崩溃啊~~~~我用的是v1.0版本
2009-2-18 09:29
0
雪    币: 286
活跃值: (14)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
87
为什么在第5讲的MessageBoxA后面添加ExitProcess,不能够安全退出呢?
2009-4-1 13:54
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
88
正在学习shellcode的编写与实现,但现在仅仅会根据书上的事例调试,打算分析一下网上流行的测试漏洞的弹出计算器程序的代码,结果还没有思路,郁闷中!!!
2009-4-27 20:23
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
89
跟帖学习,所有实验成功完成,继续向高手不断学习!
2009-7-30 22:31
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
90
为什么我在call MessageBoxA 后加上
push 0x00401133   (打印Congratulation! You have passed the verification!\n 的地方)
jmp esp
我就是想在call messageboxa后跳到正确的流程.

可是为什么反汇编出来的代码只到 68 33114000(push 0x00401133的地方)就没了.后面都是int3了啊.

我后面明明有接着jmp esp的代码啊??

接着我按照failwest的例子,最后几行代码改成
push ebx
mov eax,0x77e1f1fe  (我机器上的ExitProcess函数地址)
call eax
这样反汇编出来的代码又没有任何问题.程序弹出messagebox后正常调用了exitprocess了.

奇怪.谁帮我解释下.我要跳到程序提示正确的地方去为什么不行?
2009-7-31 19:56
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
91
非常感谢这么好的资料!经过学习,成功了!哈哈!继续!
2009-10-21 16:11
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
92
0040103B  |.  50                    push    eax                              ; /src
0040103C  |.  8D4D D0          lea     ecx, dword ptr [ebp-30]          ; |
0040103F  |.  51                    push    ecx                              ; |dest
00401040  |.  E8 EB010000   call    strcpy                           ; \strcpy
00401045  |.  83C4 08           add     esp, 8
00401048  |.  68 1C604200   push    0042601C                         ; /s2 = "1234567"
0040104D  |.  8B55 08           mov     edx, dword ptr [ebp+8]           ; |
00401050  |.  52                    push    edx                              ; |s1
00401051  |.  E8 4A010000   call    strcmp                           ; \strcmp
00401056  |.  83C4 08           add     esp, 8
00401059  |.  8945 FC            mov     dword ptr [ebp-4], eax
0040105C  |.  8B45 FC           mov     eax, dword ptr [ebp-4]

从栈0012FAF0处开始到0012FB20处用垃圾数据填充,0012FB24处用jmp esp地址填充,接下来的0012FB28处开始用shellcode填充,但是当程序执行到mov     edx, dword ptr [ebp+8] 这句时,ebp+8为0012FB28,edx指向shellcode开始处,这里并不是一个字符串,所以当程序执行到call strcmp时就会出错。请教有什么办法能够解决这个问题?
2009-10-26 18:17
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
93
如果在0012FB28处用一个字符串地址填充,0012FB2C处开始用shellcode填充,那函数返回时jmp esp会来到0012FB28处开始执行,这里是一个字符串地址,执行到这里就会结束。
2009-10-26 18:22
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
94
看来failwest没在更新了
这个我帮她回答
push 0x00401133
这句指令里有个00,strcpy遇到00认为是字符串结束符,没有再压栈了 所以当然不能执行
2010-3-18 13:05
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
95
[QUOTE=ch_tj2k;704246]0040103B  |.  50                    push    eax                              ; /src
0040103C  |.  8D4D D0          lea     ecx, dword ptr [ebp-30]   ...[/QUOTE]

strcpy才是溢出元凶,执行call strcpy之后就已经回不来了 strcmp根本不可能执行

f7单步跟着strcpy看,你看retn能回来不
2010-3-18 13:11
0
雪    币: 133
活跃值: (113)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
96
吱吱吱,谢谢西方失败的扫盲。在这个论坛真能学到不少东西。
2010-4-19 19:38
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
97
#include <windows.h>
#include <stdio.h>
#define DLL_NAME "user32.dll"
main()
{
    BYTE* ptr;
    int position,address;
    HINSTANCE handle;
    BOOL done_flag = FALSE;
    handle=LoadLibrary(DLL_NAME);
    if(!handle)
    {
        printf(" load dll erro !");
        exit(0);
    }

    ptr = (BYTE*)handle;

    for(position = 0; !done_flag; position++)
    {
        try
        {
            if(ptr[position] == 0xFF && ptr[position+1] == 0xE4)
            {
                //0xFFE4 is the opcode of jmp esp
                int address = (int)ptr + position;
                printf("OPCODE found at 0x%x\n",address);
            }
        }
        catch(...)
        {
            int address = (int)ptr + position;
            printf("END OF 0x%x\n", address);
            done_flag = true;
        }
    }
}

这断代码在debug下可以正常运行,不过在release版本下会报错,
把try...catch(...)..
改成_try...__except(EXCEPTION_EXECUTE_HANDLER )...就没问题了
2011-12-23 23:23
0
雪    币: 469
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
98
我想问下,为什么我搜索的结果这么少,而且搜索不到类似于下面这段
Location found: call esp in user32
上传的附件:
2013-3-18 11:45
0
雪    币: 802
活跃值: (4433)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
99
我也来吱一下
2013-4-3 11:19
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
100
学习了!!成功 ,吱一声
2013-4-12 16:49
0
游客
登录 | 注册 方可回帖
返回
//