堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的.了解堆栈溢出之前,先了解以下几个概念: 缓冲区 简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例. 堆栈     堆 栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出 (LIFO)队列.堆栈中定义了一些操作.两个最重要的是PUSH和POP.PUSH操作在堆栈的顶部加入一个元素.POP操作相反,在堆栈顶部移去一个 元素,并将堆栈的大…
缓存溢出(Buffer overflow),是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址.在某些情况下,这些过量的字符能够作为“可执行”代码来运行.从而使得攻击者可以不受安全措施的约束来控制被攻击的计算机. 缓存溢出(或译为缓冲溢出)为黑客最为常用的攻击手段之一,蠕虫病毒对操作系统高危漏洞的溢出高速与大规模传播均是利用此技术. 缓存溢出攻击从理论上来讲可以用于攻击任何有缺陷不完美的程序,包括对杀毒软件.防火墙等安全产品的攻击以及对银行程序的…
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患. 历史上最著名的缓冲区溢出攻击可能要算是1988年11月2日的Morris Worm所携带的攻击代码了.这个因特网蠕虫利用了fingerd程序的缓冲区溢出漏洞,给…
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈 帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将 函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患. 历史上最著名的缓冲区溢出攻击可能要算是 1988年11月2日的Morris Worm所携带的攻击代码了.这个因特网蠕虫利用了fingerd程序的缓冲区溢出漏…
本来我就是来逛逛论坛的,可是看到前面有位一样是干网络安全的同行,留下来过的痕迹,发了一篇相对不错的文章,我寻思咱既然来这一趟,也不能显得就比别人差啊.所以我也就写了这一片不算成熟小文章,望各位共勉之哈.1.网络安全的概念网络安全的定义:网络系统的硬件.软件和数据受到保护,不因偶然和恶意的原因而遭到破坏.更改和泄露,系统可以连续正常运行,网络服务不会终止. 1>.网络安全主要涉及3个方面: 硬件安全:即要保证网络设备的安全,如网络中的服务器.交换机.路由器等设备的安全. 软件和数据安全:即保证网络…
在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等目的.但随着操作系统和编译器针对缓冲区溢出问题引入防护机制,初学者想要由简入繁的学习和实践缓冲区溢出的原理变得困难.在 Linux 环境下,用户可以通过设置编译和系统环境来去除某些防护措施,从而方便的完成某些简单的缓冲区溢出实验. 1.关闭SSP( Stack Smashing Protector…
CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数名(bufbomb -t)的差异,不影响我们的实验. 1.实验工具 1.1 makecookie 后面实验中,五次"攻击"中有四次都是使你的cookie出如今它原本不存在的位置,所以我们首先要为自己产生一个cookie. 实验工具中的makecookie就是生成cookie用的.參数是你的…
最近看逍遥的<网络渗透攻击与安防修炼>讲到CMD命令窗口的dir传超长字符串溢出的例子.自己实验了一下,的确会产生程序崩溃,但是具体什么原理没太详细说,这里做一下原理探究,权当学习笔记了. 1. 实验环境 XP SP3 我发现在XP下的cmd.exe有这个漏洞,而在win7下之后的cmd.exe就没有这个漏洞了 我的理解是这个cmd.exe程序本来就是windows的一个80x86的实模式模拟环境,在win下又进行了重写,加固了程序.所以我接下来的实验材料取自XP下的cmd.exe 2. 漏洞…
先来看看基于 Red Hat 与 Fedora 衍生版(例如 CentOS)系统用于阻止栈溢出攻击的内核参数,主要包含两项: kernel.exec-shield 可执行栈保护,字面含义比较“绕”, 实际上就是用来控制能否执行存储在栈 中的代码,其值为1时表示禁止:为0时表示允许:默认为1,表示禁止执行栈 中的代码,如此一来,即便覆盖了函数的返回地址导致栈溢出,也无法执行 shellcode 查看与修改系统当前的可执行栈保护参数: [root@localhost 桌面]# sysctl -a |…
CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将global_value的值修改为cookie.因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间)覆盖global_value的值.若修改了.bss和.text之间某些只读的段会引起操作系…