首页
社区
课程
招聘
[原创]漏洞利用中级技巧中思路的局限性
2014-2-23 15:34 3445

[原创]漏洞利用中级技巧中思路的局限性

2014-2-23 15:34
3445
看了仙果牛的文章,感觉他的标题写得比较大,而且思路比较局限,专门开贴讨论一下
我这代码是这样的
001B:00130DF0  8BF4                MOV       ESI,ESP
001B:00130DF2  83EE40              SUB       ESI,40
001B:00130DF5  8B36                MOV       ESI,[ESI]
001B:00130DF7  B8FFFF0080          MOV       EAX,8000FFFF ;返回值
001B:00130DFC  8BEC                MOV       EBP,ESP
001B:00130DFE  83C540              ADD       EBP,40   ;EBP
001B:00130E01  FFE6                JMP       ESI
001B:00130E03  0000                ADD       [EAX],AL ;EBX要可写
001B:00130E05  0001                ADD       [ECX],AL
-------------要真实利用jmp esi往00130e06跳下面可以填40字节的egghunter足够了------

咋个说哩,又看了下楼主的文章到也没太多问题,不过想说的是大家千万别被他自已的思路所局限了.总之我个人的感觉是让程序不出错的办法是n多的,大家只用记住最终的目的尽量完美就行了.
另外测了好多次在我这儿0014017c这个硬编码地址通用性不行.

再说具体点吧:
funX  call funA
funA  call funB
funB  call funC
funA中代码为:
xxx
xxx
xxx
call funb
xxx
ret

funB中代码为
xxx
xxx
call func
xxx
xxx
溢出指令
xxx
ret

funB函数中产生溢出,覆盖栈中保存的返回到funA中的地址.

楼主的思路是在esp高地址方向找返回到funx中的地址,从funb
直接返回到funx.这就要求覆盖的数据不能太多!!所以楼主
对定位shellcode没办法只有使用硬编码.
这是最简单的一种思路.其实思路还是n多的,比如我的例子中
我分析了一下call func的代码,发现还可以跳到esp更低地址方向
中残留的call func后返回到funb中的地址.这就相当于重新执行了一次func中的最后的ret
然后我给定一个返回值然后就直接跑到funb的错误处理代码流程了.
这种思路的好处就是:
也许shellcode可以相对前种方式更长一些,也不用硬编码定位shellcode,对于
esp中更低地址去找残留的返回地址,更低多少这个和func函数的参数个数相关,但同一程序
一般是不会有变化的所以更通用.

其它:我的这个思路在03年的一个doc exp中就有用到.
如果把漏洞的正常返回当成一个中级技巧说开了去,我觉得好玩的东西还真的很多
比如ie下面那个调用SHDOCVW中的65号功能,恢复IE进程+hook
LdrShutdownThread\MessageBeep\UnhandledExceptionFilter
又比如直接利用gdi重绘窗口技巧.

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (7)
雪    币: 1489
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2014-2-23 22:02
2
0
0014017c这个硬编码地址通用性不行

这个问题确实没有解决,只是研究思路了,并没有关注通用性。
看到你新开一个帖子来讨论,非常感谢。
雪    币: 1489
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2014-2-23 22:06
3
0
我觉得楼主完全可以把你的思路和过程整理一下发出来
先替各位坛友感谢你
雪    币: 253
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
tangwenbin 1 2014-2-25 09:39
4
0
求公开,求细节~
雪    币: 652
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阳光code 2014-2-26 15:50
5
0
都是大牛学习膜拜。
雪    币: 358
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
isno 3 2014-2-27 14:57
6
0
gdi重绘窗口。。。也太NB了吧
雪    币: 100
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mpsc 2014-2-27 15:43
7
0
如果把漏洞的正常返回当成一个中级技巧说开了去,我觉得好玩的东西还真的很多
比如ie下面那个调用SHDOCVW中的65号功能,恢复IE进程+hook
LdrShutdownThread\MessageBeep\UnhandledExceptionFilter
又比如直接利用gdi重绘窗口技巧.

膜拜楼主牛.
漏洞的正常返回很好,更爱虽暴力但简便通用的技巧做到同样的效果。
雪    币: 1489
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2014-3-4 11:02
8
0
谢谢楼主的思路,研究了几天,实现了一下,发现确实如楼主所说,我的方法局限性太大,最终确实能够做到完美退出
游客
登录 | 注册 方可回帖
返回