首页
社区
课程
招聘
[旧帖] windows7下获取jmp esp的疑问 0.00雪花
发表于: 2015-2-12 12:59 2444

[旧帖] windows7下获取jmp esp的疑问 0.00雪花

2015-2-12 12:59
2444
本人是个初学的菜鸟,希望大神能指点
我的操作系统是windows7,在网上查到windows7的核心dll都是浮动地址加载的,没有统一的jmp esp地址。
他建议从溢出的程序中找jmp esp,但是溢出实验的源码比较简单,编译后可能没有jmp esp。
于是就找人问说mactype中可能有jmp esp,可以试试。
还真找到了

但是地址应该都是虚拟地址,应该不能用,怎样才能找到真实的地址?
另外问一句,windows7下不可能人人都装mactype,那么别人的漏洞利用程序是用的什么的jmp esp呢?谢谢了~~

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
2
jmp esp 很容易找到,所以不一定非要在那个dll中,你可以试试漏洞程序(你调试的程序)自身所带的dll中找,或者漏洞程序本身的进程空间里找。
win7 下注意 是否启用了aslr DEP

确认开始aslr方法: 看看漏洞程序、或者dll 每次载入的地址空间是否变动,(有些dll确实是固定的)

DEP 我一般通过 任务管理器看。

所以 找 jmp esp指令时要在地址空间不变的dll中找, 找到后还要验证下是否可以执行(小心DEP)
2015-2-12 15:17
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
3

使用 sysinternal 的进程浏览器可以比较好的确认操作系统是否为当前调试程序添加了数据执行保护(类似不可执行栈)与地址空间加载随机化,如下所示:



因此结论就是,即便在漏洞程序中找到了jmp esp ,如果操作系统启用了加载时DEP与ASLR,那么也很难制作相应的溢出程序

2015-2-12 16:26
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
4
。。。。 对头
2015-2-12 17:05
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

没开dep,我调试方面基本没有任何经验,就学过简单的爆破,windows xp的通用jmp esp是0x7ffa4512,这种地址是真实地址吧?请问怎么找出我这个mactype真实地址?给个相关文章的url也行,谢谢了!
上传的附件:
2015-2-12 17:32
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
6
楼主是说你在xp下察看运行的macTray.exe进程,没有启用DEP吗?
看来服务器版的操作系统安全性确实比较强一些.

从你第一张的截图来看, 你的EIP当前指向0x005B9AB0, macTray.exe的入口点;
你需要在0x005984CE下断点,让程序执行流程来到此处并执行jmp esp 指令,该指令执行后,将返回 0x75EE338A地址处,该处是一个"绝对虚拟地址",应该是kernel32.dll 这个动态链接库中的某个函数,
这个地址应该是可以通过缓冲区溢出来覆盖成shellcode所在的地址的,然后程序流程将跳转到你的shellcode所在地址并执行。
关键还是要看控制权来到 0x005984CE 处的过程中,右下侧的栈区如何变化,然后确定你可以通过对话框等输入数据来操纵这个栈区,覆盖栈地址 0x0018FF8C处的返回地址才行。
2015-2-12 18:39
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不是在xp下的啊!下了断点直接不能运行了.....能qq聊一下吗,看雪好像不能直接发qq那我这样发吧0x7248418a
2015-2-12 19:16
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
8
抱歉,刚才看清楚标题是win7下。。。。

断点后要按F9,这样才会运行到断点处停止,然后单步跟进去,看是否调用了DLL中的函数,
如果不能运行,也可以尝试从程序的main函数开始调试,找到任何有可能将用户输入数据放在栈上的函数调用,它就是你的突破口。
因为我没有这个程序的可执行文件调式,加上所学有限,只能讲到这里。
不过楼主实在太有才了,竟然将qq号码保存在内存地址中,待我读取该处的值才能知道哦

开玩笑的,我没用qq,话说回来,你先试试上面的办法,我这里边调试找解决方案。
2015-2-12 20:20
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不是啊,f9直接停止工作了,单步走到,一个jnz往上又跳回去了,nop掉,往下又是有很多个往上跳的,跳不出去啊!你有没有获取真实地址的文章,我看看吧。谢谢了还有那个不是内存地址,是16进制的意思
2015-2-12 20:52
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
10
别断在DLL函数入口处,在main中或_start中找个函数调用点来断,然后F9 ,总不可能所有位置F9都直接停止工作吧,除非有反调试机制
如果遇到jnz ,前面应该有 cmp指令,如果cmp前的指令允许你改变某个程序值,你可以尝试让它等于cmp后面第二个比较操作数,这样就不会跳转到jnz指示的地址了。
我知道,你是把10进制的qq号转成16进制的qq号对吧
2015-2-12 22:08
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢了,我问过别人了,直接可以用0x005984CE这个地址做jmp esp
2015-2-12 23:49
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
12
楼主不一定非要 jmp esp , 可以有很多方法的。  jmp eax\ebx\ecx (只要这些寄存器能指向shellcode 的上面或者里面) add eax,xxh jmp eax (和上面差不多,只是分解开来了)、push r32 retn (变体) 、 SEH 好多方法的。 请看 http://bbs.pediy.com/showthread.php?t=123602&highlight=exploit Exploit 编写系列教程第二篇:跳至ShellCode.....................................25

所以要灵活使用。。。。
2015-3-31 22:05
0
游客
登录 | 注册 方可回帖
返回
//