花了两个小半晚上的时间将0day安全这本书的绕过DEP的第一个实验做了,这里做些笔记. Ret2libc 我现在自己的理解就是在开启DEP保护的情况下,在程序的其他的可执行位置找到可以满足我利用要求的指令,形成一个可执行的指令序列,达到成功执行shellcode的目的. 那么利用Ret2libc的第一个方法就是通过ZwSetInformationProcess函数,这个API可以直接将进程中的DEP保护关闭,执行shellcode. 首先需要了解的是一个进程的DEP标识是在KPROCESS结构中…
1.    DEP内存保护机制 1.1   DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠向前兼容的修补来减少溢出带来的损害,数据执行保护DEP就是用来弥补计算机对数据和代码混淆这一天然缺陷的. DEP的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时(注1),程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令.如下图所示. DE…
Data Execution Prevention,数据执行保护,专门用来弥补计算机对数据和代码混淆这一天然缺陷. DEP 的原理是将数据所在的内存页(默认的堆.各种堆栈页.内存池页)标记为不可执行,当试图执行不可执行页的数据时,CPU 抛出异常,转入异常处理. MS 从 Windows XP sp2 开始支持 DEP.DEP 分为软件 DEP 和硬件 DEP,软件 DEP 即 SafeSEH.硬件 DEP 需要 CPU 的支持:AMD 和 Intel 都为此做了设计,AMD 称为 No-Exe…
一,通过 VirutalProtect() 修改内存属性绕过 DEP DEP 的四种工作模式中,OptOut 和 AlwaysOn 下所有进程默认都开启 DEP 保护,这里如果一个程序自身需要从堆栈中取指令,则会发生错误.为了解决这个问题,MS 在 kernel32.dll 中提供了修改内存属性的 VirtualProtect() 函数,可以修改可执行属性.故一个新的思路的构造参数并利用 VirutalProtect() 修改 shellcode 为可执行,进而绕过 DEP. BOOL Virt…
最近结合软件安全课程上学习的理论知识和网络资料,对缓冲区溢出漏洞的简单原理和利用技巧进行了一定的了解.这里主要记录笔者通过简单的示例程序实现缓冲区溢出漏洞利用的步骤,按由简至繁的顺序,依次描述简单的 shellcode.ret2libc.ROP.Hijack GOT 等缓冲区溢出攻击技术的原理和步骤,以供总结和分享.为了保证缓冲区溢出实践能够顺利进行,需要对编译器选项和操作系统环境进行设置,可参见笔者博客使用Linux进行缓冲区溢出实验的配置记录.同时,针对使用 gdb 动态调试获得的程序局部变…
Linux下利用Ret2Libc绕过DEP ⑴.  原理分析: 系统库函数通常是不受DEP(关于DEP,可以查看我之前文章的详细介绍)保护的,所以通过将返回地址指向系统函数可以绕过DEP保护,所以可以通过调研系统函数system()获得shell. ⑵.环境准备: i.漏洞代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> void flow()…
利用Ret2Libc绕过DEP之VirtualProtect函数 ⑴.  原理分析: i.相关概念: VirtualProtect()函数: BOOL WINAPI VirtualProtect( _In_ LPVOID lpAddress,    //目标地址的起始位置 _In_ SIZE_T dwSize,    //区域大小 _In_ DWORD flNewProtect,    //新的保护属性,设置为(0x40)市该内存页为可写可读可执行. _Out_ PDWORD lpflOldPr…
准备知识引用自https://www.freebuf.com/articles/rookie/182894.html 0×01 利用思路 ret2libc 这种攻击方式主要是针对 动态链接(Dynamic linking) 编译的程序, 因为正常情况下是无法在程序中找到像 system() .execve() 这种系统级函数 (如果程序中直接包含了这种函数就可以直接控制返回地址指向他们,而不用通过这种麻烦的方式). 因为程序是动态链接生成的,所以在程序运行时会调用 libc.so (程序被装载时…
0×01 利用思路 ret2libc 这种攻击方式主要是针对 动态链接(Dynamic linking) 编译的程序,因为正常情况下是无法在程序中找到像 system() .execve() 这种系统级函数(如果程序中直接包含了这种函数就可以直接控制返回地址指向他们,而不用通过这种麻烦的方式).因为程序是动态链接生成的,所以在程序运行时会调用 libc.so (程序被装载时,动态链接器会将程序所有所需的动态链接库加载至进程空间,libc.so 就是其中最基本的一个),libc.so 是 linu…
pwn200 ---XDCTF-2015 每日一pwn,今天又做了一个pwn,那个pwn呢???攻防世界的进阶区里的一道小pwn题,虽然这个题考察的知识不多,rop链也比较好构建,但是还是让我又学到了一些东西,因为害怕忘记,写个博客记录记录. 1.获取pwn题 啪的一下就下载好了. 2.查看保护 拿到题我不做,哎,我干什么呢,我先查看保护! 裸奔题,开的东西不多,所以这里就看我们发挥了 3.ida看看 首先可以很明显的看到,给的7个变量,在栈中是连续排列的,一开始我还不知道给这里的七个数赋值到底…