漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

漏洞挖掘前言

题目

Lab

Buffer Overflow Vulnerability Lab(2)

1、

2、

 

Pre

1、详细解释一下JIT spray以及heap spray是什么/p>

2、解释一下老的windows操作系统下面利用SEH绕过DEP的原理和过程。

 

 

解答

Lab

Buffer Overflow Vulnerability Lab(2)

Task1:

在上一次实验中,我们使用雪橇来辅助攻击的原因是函数栈帧可能产生移位,即shellcode在内存中的地址是动态变化的,而我们的shellcode地址是写死的,这使得我们很难准确将正常返回地址修改为我们的shellcode地址。所以在本次实验中,我们利用jmp esp来动态定位栈中的shellcode。

 

Step1:实验准备和程序编译

打开内存地址随机化。

# gcc -o stackesp -z execstack -fno-stack-protector stackesp.c

# chmod 4755 stackesp

用以上语句编译漏洞文件,并赋予SUID权限。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

 

Step2:编写初步的badfile文件

先在badfile文件里写入AAAA,和上次实验一样相当于做个小标记,方便计算返回地址的位置。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

 

Step3寻找返回地址的位置

利用gdb调试stackesp,先反汇编main函数,发现正确返回地址为:0x08048544

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

再反汇编bof函数,可以看见bof函数在0x080484cc处结束。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

在0x080484cc处设置断点,查看此时的栈中内容。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

可以看出buffer的基地址离返回地址处差了6*4=24个字节,即在jmp esp地址前填充24个字符即可。

 

Step4:编写新的badfile文件并攻击

先确定jmp esp地址,这个地址执行stackesp会直接输出。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

可以看出jmp esp地址为0x0804a024.

我们知道esp寄存器总是指向返回地址的下一地址,那如果用jmp esp覆盖返回地址,那么在函数返回后会执行jmp esp,跳到esp,也就是返回地址的下一地址开始执行。因此,我们将shellcode放于返回地址之后,并将返回地址覆盖为jmp esp,就可以避免shellcode在内存中产生的移位问题。Shellcode为:“x6ax17x58x31xdbxcdx80x6ax0bx58x99x52x68//shx68/binx89xe3x52x53x89xe1xcdx80”

基于以上思路,编写新的badfile:

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

执行漏洞程序,发现攻击成功:

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

 

 

Task2:

观察程序源码,fptr先入栈,buf后入栈。可以通过利用hmm函数的入口地址来覆盖fptr的值,最后程序执行hmm来获得root权限。

 

Step1:实验准备和程序编译

打开内存地址随机化。

# gcc -o overfun -fno-stack-protector overfun.c

# chmod 4755 overfun

用以上语句编译漏洞文件,并赋予SUID权限。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

 

Step2:查看函数hmm入口地址

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

 

 

Step3:查找buf基址离good地址的距离

利用gdb调试overfun,先反汇编main函数。我们可以看出0x08048649处为strcpy函数,我们应该就在此处实施溢出攻击。而我们设置断点时应该在此句之后设置,即0x0804864e处。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

接着反汇编good函数,查看good函数入口地址:0x08048554。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

在strcpy之后0x0804864e处设置断点。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

运行程序并在断点处查看栈中内容。

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

可以看出buf基址离good地址有36个字节,所以我们在hmm入口地址前填充36个字符即可。

 

Step4:进行攻击

按照上述分析编写如下代码:

$ overfun $(python -c “print ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx70x85x04x08′”)

漏洞挖掘——实验7 Buffer Overflow Vulnerability Lab(2)

攻击成功!

 

 

Pre

1、详细解释一下JIT spray以及heap spray是什么/strong>

 

JIT spray技术是在 2010年首次被提出来的。其基本思想是利用高级脚本语言中的常量数字在可预测的地址上产生想要的JIT指令片段。通过利用即时编译的行为来规避地址空间布局随机化(ASLR)和数据执行预防(DEP)的保护。它已被用于利用PDF格式和Adobe Flash。即时编译器(JIT)将代码作为其数据。由于目的是生成可执行数据,因此JIT编译器是无法在无可执行数据环境中运行的少数几种类型的程序之一。

 

Heap Spray技术是通过在进程堆上分配(大)块并填充这些块中的字节来将某个字节序列放在目标进程的内存中的预定位置来达到攻击的目的。比如可以在shellcode的前面加上大量的slide code(滑板指令),组成一个注入代码段。然后向系统申请大量内存,并且反复用注入代码段来填充。这样就使得进程的地址空间被大量的注入代码所占据。然后结合其他的漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致shellcode的执行。Heap Spray只是一种辅助技术,需要结合其他的栈溢出或堆溢出等等各种溢出技术才能发挥作用。

 

2、解释一下老的windows操作系统下面利用SEH绕过DEP的原理和过程。

 

SEH,即结构化异常处理,是windows操作系统提供给程序设计者的处理程序错误或异常的工具。

DEP即数据执行保护,是一套软硬件技术,能够在内存上执行额外检查以防止在不可运行的内存区域上执行代码。 在Microsoft Windows Vista 、windows 7 等较早Windows系统中,由硬件和软件一起强制实施 DEP。DEP 有两种模式,如果CPU 支持内存页NX属性,就是硬件支持的DEP。只有当处理器/系统支持NX/XD位(禁止执行)时,windows才能拥有硬件DEP,否则只能支持软件 DEP,相当于只有SafeSEH保护。

利用SEH绕过DEP:当DEP启用后,要覆盖seh结构,但是不能再用pop /pop/ret 的地址,而应该用pop reg/pop reg/pop esp/ret指令的地址,指令 pop esp可以改变堆栈指针,ret将执行流转移到nseh中的地址上。从而实现绕过。

网上这方面资料很少,很难搜索到,不是很理解此处。

 

 

 

 

 

来源:一半西瓜

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月14日
下一篇 2019年3月14日

相关推荐