《0day安全》——在内存中躲猫猫: ASLR

原理

前面所有漏洞利用方法都有着一个共同的特征:都需要确定一个明确的跳转地址。无论是 JMP E SP 等通用跳板指令还是 Ret2Libc 使用的各指令,我们都要先确定这条指令的入口点。
微软的 ASLR( Address Space Layout Randomization)技术就是通过加载程序的时候不再使用固定的基址加载,从而干扰shellcode 定位的一种保护机制。
支持 ASLR 的程序在它的 PE 头中会设置 IMAGE_DLL_CHARACTERISTICS_ DYNAMIC_BASE 标识来说明其支持 ASLR。微软从 Visual Studio 2005 SP1 开始加入了/dynamicbase 链接选项来帮我们完成这个任务,我们只需要在编译程序的时候启用/dynmicbase 链接选项,编译好的程序就支持 ASLR了。
在这里插入图片描述

映像随机化

映像随机化是在 PE 文件映射到内存时,对其加载的虚拟地址进行随机化处理,这个地址是在系统启动时确定的,系统重启后这个地址会变化。
可能是出于兼容性的考虑,微软在系统中设置了映像随机化的开关,用户可以通过设置注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages 的键值来设定映像随机化的工作模式。
 1.设置为 0 时映像随机化将禁用。
 2.设置 为 −1 时 强 制 对 可随 机 化 的 映像 进 行 处 理 , 无 论 是 否设 置IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE 标识。
 3.设置为其他值时为正常工作模式,只对具有随机化处理标识的映像进行处理。
如果注册表中不存在 MoveImages,大家可以手工建立名称为MoveImages,类型为DWORD的值,并根据需要设置它的值。

堆栈随机化

同一个程序任意两次运行时的堆栈基址都是不同的,进而各变量在内存中的位置也就是不确定的。

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char* argv[])
{
   
	char *heap = (char*)malloc(100);
	char stack[100]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值