快捷搜索:  汽车  科技

nx中的提升命令如何理解:NX机制以及绕过策略

nx中的提升命令如何理解:NX机制以及绕过策略知道目前位置,漏洞程序已经准备完成,我们先了解一下ret2libc。这是一个控制程序流执行libc中的函数的方法。通常是将栈中的返回地址覆盖为指向libc当中的函数地址。这样的话,我们就可以在libc当中去执行Shellcode。常见我们选择的函数是system(“/bin/sh”)。下面我们进行构造一下布局。编译完成之后,产生了pwnme文件,我们执行发现程序可以正常执行。如下图:如附件如下图:首先我们来看一下源码,该代码中我们可以发现,主函数main当中调用了一个自定义函数vul。该函数的作用是将接收到的值放入大小为64的数组当中。那么我们发现,在主函数main当中传入的值定然是大于64。这种情况一定会产生溢出漏洞。接下来,我们使用如下编译方式,将源码编译成可执行文件。如下图:

NX机制以及绕过策略一;什么是NX机制

NX机制可以使数据区域,堆栈区,堆段等区域不可执行,代码段不可以写入。

二;绕过策略

因为NX机制的存在,所以如果我们在不可执行的内存位置插入Shellcode依旧是没有办法执行的,那么如果一个不可执行的内存区域出现一个溢出漏洞,我们就没有办法利用了嘛?其实也不尽然。接下来我们就介绍一下ret2libc方法绕过这个问题。

2.1;测试环境

操作系统:

nx中的提升命令如何理解:NX机制以及绕过策略(1)


GCC版本:

nx中的提升命令如何理解:NX机制以及绕过策略(2)

2.2;测试软件

如附件

2.3;演示

如下图:首先我们来看一下源码,该代码中我们可以发现,主函数main当中调用了一个自定义函数vul。该函数的作用是将接收到的值放入大小为64的数组当中。那么我们发现,在主函数main当中传入的值定然是大于64。这种情况一定会产生溢出漏洞。

nx中的提升命令如何理解:NX机制以及绕过策略(3)

接下来,我们使用如下编译方式,将源码编译成可执行文件。如下图:

nx中的提升命令如何理解:NX机制以及绕过策略(4)

编译完成之后,产生了pwnme文件,我们执行发现程序可以正常执行。如下图:

nx中的提升命令如何理解:NX机制以及绕过策略(5)

知道目前位置,漏洞程序已经准备完成,我们先了解一下ret2libc。这是一个控制程序流执行libc中的函数的方法。通常是将栈中的返回地址覆盖为指向libc当中的函数地址。这样的话,我们就可以在libc当中去执行Shellcode。常见我们选择的函数是system(“/bin/sh”)。下面我们进行构造一下布局。

注意:为了测试方便,这里我关闭了系统的ASLR功能。详细如下图:

nx中的提升命令如何理解:NX机制以及绕过策略(6)

下面我们来构造一下栈中结构:我们利用vul的溢出漏洞将原本的返回地址覆盖为system()函数的地址,那么紧接着下面0xdeadbeef就是函数system()的返回地址,libc_/bin/sh_addr就是函数system()的参数。

nx中的提升命令如何理解:NX机制以及绕过策略(7)

下面,我们已经知道了该怎么操作了。那么我就确认一下几点,第一:我们需要知道输入多少数据产生溢出。第二:我们需要知道system函数的地址。第三:我们需要知道system函数参数的地址。

2.3.1;确定产生溢出数据大小

我们要知道放入多少数据会产生溢出,我们需要将数据填充到栈中的返回地址。那么我们就需要查看一下栈空间了。下面我们使用gdb来分析一下:
调试pwnme程序。如下图:

nx中的提升命令如何理解:NX机制以及绕过策略(8)


在函数vul位置下断点

nx中的提升命令如何理解:NX机制以及绕过策略(9)


打开汇编窗口:

nx中的提升命令如何理解:NX机制以及绕过策略(10)


执行程序:

nx中的提升命令如何理解:NX机制以及绕过策略(11)


单步执行至strcpy处。指令ni
我们首先查看到push edx。它是函数strcpy的保存buffer的起始地址。

nx中的提升命令如何理解:NX机制以及绕过策略(12)


查看edx寄存器的值:

nx中的提升命令如何理解:NX机制以及绕过策略(13)


接下来,我们单步执行到ret指令位置。得到函数的结束地址。这个时候我们只需要查看寄存器ESP当中的值,即可确定当前ret的地址了。

nx中的提升命令如何理解:NX机制以及绕过策略(14)


计算填充数据:填充数据 = 0xffffd3fc – 0xffffd3b0 = 0x4c = 76字

2.3.2;计算system的地址

首先计算出函数的基址:

nx中的提升命令如何理解:NX机制以及绕过策略(15)


接下来找到偏移地址,这里我们使用IDA工具。打开libc.so.6文件。

nx中的提升命令如何理解:NX机制以及绕过策略(16)


那么在内存中system函数的地址为:0xf7dc4000 00045830

2.3.3;计算system参数的地址

nx中的提升命令如何理解:NX机制以及绕过策略(17)


那么,接下来,system参数的地址:0xf7dc4000 00192352。

2.4;构造ShellCode

nx中的提升命令如何理解:NX机制以及绕过策略(18)

2.5;验证

执行Shellcode。可以成功执行命令

nx中的提升命令如何理解:NX机制以及绕过策略(19)

猜您喜欢: