mugen吧 关注:44,596贴子:1,313,277

MUGEN极究式探查:DEF堆溢出

只看楼主收藏回复

MUGEN极究式探查:DEF堆溢出
堆溢出很显然要比堆栈溢出难很多,因为不能直覆盖到返回值,必需溢出到寄存器上,但是这些寄存器的作用并不知道,所以研究起来很复杂,可以说和研究微软系统的漏洞难度差不多。


相关推荐

大皇帝页游新区入口,策略游戏选大皇帝,点击领取礼包,新服送首冲高返利! 酷玩吧为您推荐!!!
广告


回复
举报|来自iPhone客户端2楼2015-05-12 19:52

    首先设置一个有溢出性质的DEF文件0-9每个数字1000个,循环写,这样写以便很快找到要改写的地方,为了不考虑诸多情况,先把NAME、DISNAME、SFF设置好。其它的无所谓,在内存可以直接写入。
    0-9循环至DEF文件大小为73.2KB,为什么要这么大?因为这个数字会溢出到关键的位置上


    回复
    举报|3楼2015-05-12 19:52
      前排


      回复
      举报|来自Android客户端4楼2015-05-12 19:58
        前排看天书


        回复
        举报|来自Android客户端5楼2015-05-12 19:59
          堆溢出既然不能像堆栈溢出一样修改返回值, 那么利用什么?
          利用RtlAllocHeap系统自带内核堆管理用到的函数,堆溢出BUF1覆盖BUF2的指针,于是溢出发生了:
          MOV [ECX],EAX
          这个溢出代码表示什么?如果ECX、EAX都是你可以随便写的,那么是否意味立夏 在任意内存写任意值呢?但在MUGEN中没这么简单。


          回复
          举报|6楼2015-05-12 20:00

            来自撸妹子925 win10


            前排围观


            回复
            举报|8楼2015-05-12 20:11
              赶紧前排


              回复
              举报|来自Android客户端9楼2015-05-12 20:16
                用OD打开MUGEN,DEF堆溢出是在打开MUGEN的瞬间发生的
                打开后OD走不动了,看下图

                代码讲到7C93A343处出现了异常,因为ECX=39393939,而内存中这个地方是空的,不能写和读,所以出现错误,仔细一看代码的确是RtlAllocHeap发生的堆溢出。
                39393939就是字符9999,如果EAX也是可以写的,那么就可以溢出了,但是这里EAX=018BE008
                显然这是一个指针,不能让用户写,那么就不能在内存中写入任意值了,但是此处如果是我们可写入的数据,那么用EAX覆盖返回值后同样会拿到SHELLCODE。所以找到EAX的地址,看看是些什么东西。
                打开一看很失望, 此处我们什么也不能写,只能看。


                此处虽然不能为我们所用,但是不处理它就会提前报错,所以处理一下,ECX是我们可以写的改变ECX为可读的地址,就不会报错了。就不妨把ECX改成4B4000防止报错,但要找到ECX的在DEF中位置,DEF中的数据太多了不可能一个个试,怎么找,利用上面的代码,看看ECX谁给他的,一步步逆堆。

                往上面拉一点就看到ECX的来源代码,原来是EDX+4地址的值EDX右边一看是19942A8
                推出 ECX在地址19942AC处
                查看此处

                很就找到在DEF文件中的位置,最后一个值送去247个字符。


                回复
                举报|10楼2015-05-12 20:25
                  美国kayakpro专业划艇测功仪 美国kayakpro专业划艇测功仪
                  广告
                  看不懂也要来围观


                  回复
                  举报|来自iPhone客户端11楼2015-05-12 20:29
                    ECX值如下图

                    ECX的值我们就可以任意写了


                    回复
                    举报|12楼2015-05-12 20:30
                      围观下


                      回复
                      举报|来自Android客户端13楼2015-05-12 20:38
                        围观


                        回复
                        举报|14楼2015-05-12 20:43
                          好了,回到OD中继续,为了防御报错用OD把ECX改成4B4000
                          下一步,运行程序看看


                          程序走到7C931689处又趟去了,访问ECX违规,因为ECX=39393939,当然会读取违规,因为此处是空的。
                          通过上面的方法找到ECX来源,还是和上面找到的位置相同。
                          那么再把ECX改成4B4000,在DEF文件中改一次即可,这里不会报错。
                          修改后继续,然后又发生了错误

                          上面讲,这一看又是一个内核函数和堆溢出,看看能否为我们可用
                          ECX是我们可以随便写的,如果EAX又是可写,那么就意味着向任意内存写任意值,但是此处的的EAX为019842A8,显然不可写,那么再看019842A8是否指向我们可写的地方呢
                          如果019842A8指向我们可写的地方,再将ECX设置成一个返回值地址,那么019842A8将覆盖返回值,那么代码代码转向执行到019842A8的地方,而此地方又是我们可写的,这样我们就成功拿到了shellcode






                          回复
                          举报|15楼2015-05-12 20:51

                            找到EAX的地方是39393939字符串就是9999,这是我们可写的地方,但后面四个数不可写,不过没关键只要此处写一个短跳,就会执行到我们能写入大量数据的地方,哈哈,终于拿到了shellcode。
                            然后分析ECX的位置,发现还是一开始找的那么位置,太爽了,如果把ECX改成返回值的地方,就行了,有人说现在可以用%F了,我想不能,原因没有代码改写浮点小数参数,此时只能往一个任意内存处写一个EAX的值!但有什么用呢?不能写很多,但对高手来说已经足够了。
                            现在剩下的问题就是找返回值,我已经找到一个12E3E0
                            实验一下,把ECX改成12E3E0,看看代码不否执行到这里

                            改好后运行




                            回复
                            举报|16楼2015-05-12 21:06
                              很失望,既然报错

                              此处EDI=39393939不可读,39393939=字符9999是我们可写的,然后通过上面讲的逆推法找到EDI的位置就行修正。
                              确定EDI位置=EAX也就是改写ECX的前面的四个9999

                              EDI确认,修正后执行就会转到此处,在此处写好代码,一切都好办了


                              回复
                              举报|17楼2015-05-12 21:26
                                前排占位学习


                                恩,天书


                                回复
                                举报|来自Android客户端19楼2015-05-12 22:42
                                  嗯……果然是天书,看不懂的我只好围观了


                                  回复
                                  举报|来自手机贴吧20楼2015-05-12 23:06
                                    围观围观


                                    回复
                                    举报|来自Android客户端21楼2015-05-12 23:07
                                      mark


                                      回复
                                      举报|来自手机贴吧22楼2015-05-12 23:39
                                        能说说这个堆溢出是做什么的?


                                        ……嗯,围观


                                        回复
                                        举报|来自Android客户端24楼2015-05-13 09:23
                                          长知识了


                                          回复
                                          举报|来自Android客户端25楼2015-05-13 12:13
                                            看天书


                                            回复
                                            举报|26楼2015-05-13 13:53
                                              看天书


                                              回复
                                              举报|来自Android客户端27楼2015-05-13 15:41
                                                。。。


                                                回复
                                                举报|来自Android客户端28楼2015-05-13 17:25
                                                  可怕。。。


                                                  回复
                                                  举报|来自Android客户端29楼2015-05-13 17:30
                                                    围观


                                                    回复
                                                    举报|来自手机贴吧30楼2015-05-13 19:02

                                                      扫二维码下载贴吧客户端

                                                      下载贴吧APP
                                                      看高清直播、视频!

                                                      推荐应用