欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

看了仙果牛的文章,感觉他的标题写得比较大,而且思路比较局限,专门开贴讨论一下
我这代码是这样的
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重绘窗口技巧.

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功