栈溢出攻击原理
基于动态污点分析的漏洞攻击检测技术研究与实现

摘 要当今软件系统不断增加的规模和复杂度导致了越来越多的安全漏洞的出现。
其中最为著名的有缓冲区溢出漏洞、格式化字符串漏洞、SQL注入漏洞和跨站脚本漏洞等。
攻击者可以利用这些漏洞改变程序原来的执行流程,执行攻击者自己编写的恶意代码,破坏用户程序或者偷取用户敏感信息。
鉴于漏洞攻击所造成的强大破坏力以及对信息安全的威胁,国内外在漏洞攻击检测方面已有了一些较深入的研究。
然而目前这些技术存在诸多不足,基于编译时期动态跟踪污点信息的检测技术,不能检测针对用非类型安全语言编写的应用程序。
基于源代码分析的检测技术,不能检测针对第三方库的漏洞攻击,并且缺少运行时信息的支持,有较高的误报漏报率。
本文在对漏洞攻击原理的深入分析以及对国内外相关研究技术的大量调研基础上提出了一种新型的漏洞攻击检测技术—基于动态污点分析的漏洞攻击检测技术。
该方法动态的跟踪程序运行时对数据的处理,并记录处理过程中数据的传播,找出目的数据结果与源数据之间的依赖关系,从而达到检测漏洞攻击的目的。
本文的主要贡献如下:(1)实现了基于控制流的污点信息传播方法。
本文不仅实现了基于数据流的污点传播过程,同时也考虑到了信息流的控制依赖关系。
提出了启发式的CFG动态构建,通过指令映射、基本块组合和postdominate树构造,建立起信息流之间的控制依赖关系,并且通过控制流分析算法实现了基于控制流的污点传播过程。
(2)实现了更为严谨的安全检测策略。
本文通过对目前主流漏洞攻击原理的深入分析,提出使用MBSL语言结合正则表达式更为严谨的定义了安全检测策略,解决了宽松的安全检测策略所带来的漏报问题,能够检测出更多种类的漏洞攻击。
(3)实现了基于动态污点分析的漏洞攻击检测原型系统。
该系统通过动态跟踪二进制目标程序运行时的信息流传播,检测并阻止外部不可信数据用于非安全的数据操作,从而扼制了攻击的源头。
该系统不需要对目标程序源代码进行分析,能够适用于商业软件,并且在漏洞攻击检测上有着较低的漏报和误报率。
缓冲区溢出原理及防范

摘要:正文:大纲:1.引言;随着网络安全技术的飞速发展,缓冲区溢出漏洞已经成为当前最具安全威胁的漏洞之一,缓冲区溢出攻击也成为一种非常有效而常见的攻击方法。
如Internet上的第1例蠕虫(Morris)攻击,就是利用了fingerd的缓冲区溢出漏洞。
SANS评选出的2005年威胁最大的20个漏洞中,有8个跟缓冲区溢出有关。
根据CNCERT最近几周的计算机安全漏洞的统计数据,与缓冲区溢出有关的安全事件占了很大的比例。
这些都充分说明了研究缓冲区溢出的重要性。
本文主要介绍了windows下的缓冲区溢出的相关知识。
2.漏洞原因和原理;2.1 产生原因;当向一个已分配了确定存储空间的缓冲区内复制多于该缓冲区处理能力的数据时,就会发生缓冲区溢出,溢出包括堆溢出和堆栈溢出。
它与程序在内存中的分布有关,而它产生的直接原因是由于C/C++程序中的一些函数调用时,没有进行边界检查,如C函数库中的strcpy(),strcat(),sprintf(),gets()等都是不安全的。
由上面的分析可知要产生缓冲区溢出,需要有几个条件: 1) 程序编译时在堆栈上分配了固定大小的缓冲区,并且在对缓冲区进行访问时没有提供边界检查。
这条在C/C ++语言中就满足,而对于有边界检查的语言,如Pascal 等,就没有这样的溢出问题。
2) 程序调用了没有进行边界检查的函数来访问(写操作) 缓冲区,这些函数没有对访问的缓冲区的大小进行判断。
由于在C语言中,字符串以0字节来标识结尾,其中没有字符串的长度信息,所以几个没有判断字符串长度的字符串拷贝函数就是容易出现问题的函数。
这些函数有: strcat()、strcpy()、sprintf()等。
3) 即使程序使用了上面所说的问题函数也不一定会出现溢出漏洞,漏洞发生的最后一个条件是程序员由于粗心,未检查用户输入数据的长度就将其直接复制到缓冲区中去。
虽然这看起来是一件小事,很容易杜绝。
可惜的是正因为有大量粗心的程序员的存在,使得溢出漏洞变得非常的普遍。
NVIDIA Driver Helper Service栈溢出简单说明

NVIDIA Driver Helper Service栈溢出简单说明最近传出NVIDIA显卡存在远程溢出漏洞,其实没有传说中那么严重,有很大的局限性。
1、限于win7系统2、远程溢出需要系统账号才行以下转自看雪【转】NVIDIA Driver Helper Service栈溢出简单说明——————————————————————————– -详情见36x新闻,本来不想发出来的,不过看到36x的人又在放屁吓人.还是发出来吧.首先这个洞和nvidia的驱动没有一毛钱关系,不是内核级的漏洞.NVIDIA Driver Helper Service,是一个r3层的服务.程序是nvvsvc.exe(win7)或nvvsvc32.exe(xp) -这个程序启动后会创建一个命名管道\\pipe\nsvr,比较特别的是这个管道的dacl是空,也就是说everyone都可以访问.然后重要的是这个洞其实只针对win7 x64版有效.在win7 x32版上只能够做到infoleak.xp x32版下0×52命令不支持,同时老版本的xp版nvvsvc32.exe根本没建命名管道.所以也就没360x吹的那么凶,另外这个洞远程利用的情况下对于win7系统关闭了空连接共享所以必须要一个用户名密码(且密码不能为空).下面来看洞:win7 32位版nvvsvc1 loc_4035D8: ; 取后面数据的长度2 lea eax, [ebp-4022h]3 push ebx ; ebx=2000h4 push eax5 mov [ebp+nNumberOfBytesToWrite], ecx ; ecx=3h6 call sub_43132C ; 返回时如果5200后面是4000h个41h,那么eax=2000h7 pop ecx8 lea eax, [ebp+eax*2+var_4020] ; eax=ebp+4000h-4020h=ebp-20h9 pop ecx10 mov ecx, [eax] ; [ebp-20]=00000000h,ecx=011 add eax, 8 ; eax=lea [ebp-18h]12 mov [ebp+nNumberOfBytesToWrite], ecx13 mov ecx, [eax-4] ; eax=lea [ebp-1ch],[eax]中的值为00004078h14 push eax ; eax为地址,地址中的值是收到的数据中4078h后面的41 41 ..15 mov [ebp+dwType], eax16 lea eax, [ebp+nNumberOfBytesToWrite]17 push eax ; [eax]的值为018 lea eax, [ebp-4022h]19 mov [ebp+lpData], ecx ; ecx=00004078h20 push eax ; eax为地址,地址中的值为41 00 41 00....21 cmp dword_491550, edi ; edi=022 jle short loc_4036322324 然后在下面触发25 loc_40363D:26 mov esi, [ebp+lpData]27 add esp, 0Ch28 push esi ; 4078h,copy的长度29 push [ebp+dwType] ; 地址中的值是收到的数据中4078h后面的41 41 ..30 lea eax, [ebp+Buffer] ; 地址中的值会发送回攻击者31 push eax32 call loc_430720 ; bug!!!33 add esp, 0Ch34 mov [ebp+nNumberOfBytesToWrite], esi35 jmp loc_4039003637 最后再来看内存布局:38 ebp-8044h response buffer ---目的39 ------------------------------recivebuf40 ebp-4024h 52 0041 ebp-4022h 41 4142 ......... 41 4143 ebp-0024h 41 4144 ebp-0022h 00 0045 ebp-0020h 00 00 00 0046 ebp-001ch 20 00 00 0047 ebp-0018h 41 41 41 4148 ebp-0014h 41 41 41 4149 ebp-0010h 41 41 41 4150 ebp-000ch 41 41 41 4151 ebp-0008h 41 41 41 4152 -----------------------------recivebuf53 ebp-0004h cookie漏洞原理:有漏洞的nvvsvc会读recivebuf,判断头两字节是否为52h,如果是跳过52 00后面的字符串,然后读ebp-1c处的长度(没有任何效验),源为length的偏移往后ebp-18h,并把这些数据移到ebp-8044处的responsebuf,然后调用writefile把数据发给攻击者.如果length定义大点就会读出ebp-4h处的stack cookie并发给攻击者.由于32位版下局部变量的内存布局源地址在目的地址的高位,所以这个洞只能造成infoleak. 64位的情况刚好相反,所以能够利用,具体可以见老外的exp不多说.注:让win7 32位版的nvvsvc在xp 32位版上运行要改exe的四个地方4 p! r* J. O3 a6 |3 F7 s改引入表的reggetvaluew为regclosekey,因为xp下没这个函数程序入口getcommandlinea调用后改为1 jmp 004039882 33 8D 4D EC lea ecx, [ebp+ThreadId]4 51 push ecx ; lpThreadId5 6A 04 push 4 ; CREATE_SUSPENDED6 FF 75 F8 push [ebp+hObject] ; lpParameter7 89 45 EC mov [ebp+ThreadId], eax8 68 75 34 40 00 push offset StartAddress ; lpStartAddress9 50 push eax ; dwStackSize10 50 push eax ; lpThreadAttributes11 FF 15 98 B0 46 00 call ds:CreateThreadSecurity12 89 45 F0 mov [ebp+hThread], eax13 E8 F0 E8 FF FF call sub_402313 ; 这个call要注解掉14 loc_403632:15 lea edi, [ebp+lpData]16 call sub_4025D0 ; nop掉附件说明: nvvsvc32.rar是把win7 32位版的nvvsvc改了下让其可以在xp和win下运行不管你是否有nvidia的显卡.exp是改的老外的攻击程序,读32位版的cookie.(ps:老外还是很牛的)1 C:\Documents and Settings\mj0011\桌面\新建文件夹\ms0x-0xx\nvidia pipe>exp local ** Nvvsvc.exe Nsvr Pipe Exploit (Local/Domain) **2 [ () peterwintrsmith]3 - Win7 x64 DEP + ASLR + GS Bypass - Christmas 2012 -4 Action 1 of 9: - CONNECT5 Action 2 of 9: - CLIENT => SERVER6 Written 16416 (0x4020) characters to pipe7 Action 3 of 9: - SERVER => CLIENT8 Read 32 (0x20) characters from pipe9 Action 4 of 9: Building exploit ...10 => Stack cookie 0xb5b04abd:11 Action 5 of 9: - CLIENT => SERVER*12 Written 16416 (0x4020) characters to pipe13 Action 6 of 9: - SERVER => CLIENT14 Read 16384 (0x4000) characters from pipe15 Action 7 of 9: - CLIENT => SERVER16 Written 16416 (0x4020) characters to pipe17 Action 8 of 9: - SERVER => CLIENT1 `/18 !! Error reading from pipe (at least, no data on pipe)本文章由泛亚 原创,转载请注明。
缓冲区溢出攻击的工作原理及防范策略

服 务病毒黑客图1 计算机程序内存存放示意图为了搞清楚“黑客”基于缓冲区溢出漏洞攻击的工作原理,我们先来分析一下计算机程序在内存中的存储和运行方式,计算机程序在内存中通常分为[1]程序段、数据段和堆栈部分,其具体存放策略如图示,程序段存放的是可执行的二进制机器代码或者只读数据,这个段的内容只允许读或者执行操作,不允许写服 务病毒黑客操作如下:首先把参数‘c’,’b’,’a’压入堆栈;然后保存指令寄存器(I P)中的内容,作为返回地址(R E T);第三个放入堆栈的是基址寄存器(F P);接着把当前的栈指针(S P)拷贝到F P,作为新的基地址;最后为函数变量留出一定空间,把S P减去适当的数值,使其指向局部变量的位置;执行完上述函数调用操作后,程序转到函数中继续执行,此时堆栈中的数据如图2所示。
图2 堆栈工作原理示意图函数执行完毕后,执行出栈操作,其中最主要的是将r e t送到I P中[3],正常执行此操作会使程序返回到函数调用指令的下一条指令,继续程序的正常执行,不会产生缓冲区的溢出,那么什么情况下会产生缓冲区的溢出呢?让我们来分析一下面的程序。
Buffer_overflow.c void function(char *str){ char buffer[16]; strcpy(buffer,str);}void main(){ char large_str [512];int i; for( i = 0; i < 512; i++) large_str [i] = \'A\'; function(large_str); }在程序Buffer_overflow.c执行过程中,当调用函数function时,函数将字符串*str不经过边界检查,直接拷贝到内存区域buffer[16]。
此时堆栈结果如图3所示:首先将参数*str压入堆栈,占用512字节的内存,接着将返回地址将指令寄存器IP中的返回地址ret入栈,然后将基址指针FP入栈,最后分配16字节的函数局部变量存储空间,随后程序转入function执行,当执行完strcpy(buffer,str)指令后,溢出产生了,程序执行的结果是从buffer开始的512个字节都将被*str的内容\'A\'覆盖,包括基址指针SFP和程序返回地址ret,甚至部分*str的内容。
缓冲区溢出攻击原理与防范

缓冲区溢出攻击原理与防范1.程序预留了一块内存区域作为缓冲区,用于执行其中一种特定的操作,如字符串拼接、输入输出处理等;2.当输入的数据长度超过了这个缓冲区的大小时,多余的数据会溢出到相邻的内存区域中;3.攻击者利用输入超出缓冲区的长度来对溢出的数据进行控制,修改程序的执行流程;4.修改后的程序执行流程可以导致程序崩溃、系统崩溃、拒绝服务等问题,也可以用于执行任意的恶意代码。
为了防范缓冲区溢出攻击,可以采取以下几种措施:1.对输入进行有效的长度检查:在程序中对输入数据进行有效的长度检查,确保不会超过预定的缓冲区大小。
这样就可以避免发生缓冲区溢出。
2. 使用安全编程语言和工具:选择使用安全编程语言,如Rust、Go 等,这些语言具有安全性的内存管理机制,能够自动检查和防范缓冲区溢出问题。
此外,使用安全编程工具如静态代码分析工具、Fuzzing工具等也可以帮助发现和修复潜在的缓冲区溢出漏洞。
3.使用内存安全检查工具:使用内存安全检查工具,如利用内存隔离技术的地址空间布局随机化(ASLR)、点火检查器、堆栈保护机制等。
这些工具可以帮助检测和防范缓冲区溢出攻击。
4.最小特权原则:在设计软件时,采用最小特权原则,即仅分配程序所需的最小权限。
这样做可以确保即使发生缓冲区溢出攻击,攻击者也只能访问到最小特权内的信息,减少损失。
5.及时修复漏洞和更新软件:及时修复已知的缓冲区溢出漏洞,更新软件以获取最新的安全补丁是非常重要的。
由于缓冲区溢出攻击是一种常见的攻击方式,软件开发商通常会不断更新修复这方面的漏洞。
综上所述,缓冲区溢出攻击是一种常见的安全漏洞利用技术,可以对各种软件和操作系统进行攻击。
为了防范这种攻击,需要采取有效的措施,如对输入进行有效的长度检查、使用安全编程语言和工具、使用内存安全检查工具、采用最小特权原则以及及时修复漏洞和更新软件等。
这样可以有效地减少缓冲区溢出攻击带来的风险。
网络攻击技术与手段

缓冲区溢出的根源
冯·诺依曼机具有如下基本特点:
计算机由运算器、控制器、存储器、输入 设备和输出设备五部分组成。
…… 程序和数据放在同一存储器中,由指令组
成的程序可以修改。(数据 、指令混存 )
John von Neumann
C/C++不对越界检查,为溢出提供了方便之门
20
五、缓冲区溢出攻击
32
5.4 连接性带来的高风险
多样化的互联方式带来更多的安全隐患。 手机的无线连接方式如:
GSM/短信
• 通话、短信窃听
Wi-Fi
• Wi-Fi钓鱼
GPRS/CDMA/3G/4G
• 手机木马
蓝牙
• 窃取通讯录
GPS
• 窃取地理位置
……
33
5.5 漏洞是如何挖掘出来的
计算机系统在硬件、软件、协议的设计、具体实现及 安全策略配置上存在的缺陷或不足。
程序员眼中的“漏洞”
“漏洞”的书面表达
22
漏洞的定义
漏洞——遗漏的缺口
包含以下要素: 漏洞是信息系统本身的弱点或者缺陷,大部分是 无意产生的; 漏洞存在于一定的环境中; 漏洞具有可利用性,一旦被攻击者利用会给信息 系统安全带来威胁和损失。
控制与扩散
手段:木马、rootkit, 局域网渗透工具,特定 的窃取工具 目标:长期控制目标, 扩大控制的目标群
3
二、信息收集
三观论
宏观:网络系统信息 中观:网络管理信息 微观:网络节点信息
安全最短板
薄弱环节信息分析 人往往是最短板
动态平衡性
寻找制衡因素 打破均势
4
二、信息收集
主动信息收集 对目标的直接探测活动—扫描
简述缓冲区溢出攻击的原理及其危害。
简述缓冲区溢出攻击的原理及其危害。
一、缓冲区溢出攻击的原理你得知道什么是缓冲区。
简单来说,缓冲区就像是一个临时存储数据的“容器”。
当你在电脑里运行一个程序时,数据通常会被暂时放在这个容器里,然后由程序来处理。
你可以把缓冲区想象成一个装水的杯子,正常情况下,杯子可以装满水而不溢出。
但问题来了——如果你往这个杯子里倒水倒得太猛,水就会溢出来,弄得一塌糊涂。
同理,缓冲区溢出攻击就是利用程序写入数据时,把数据填得比容器所能承载的更多,让程序发生错误,甚至被攻击者利用。
说得通俗点,缓冲区溢出就像是你给一个容器填满了超过它极限的东西,而这个容器的“边界”并不健壮,直接就被撑破了。
你如果知道一点计算机原理,可能会知道程序是如何通过内存地址来控制操作的。
而缓冲区溢出攻击,正是通过将“超出范围”的数据写入内存的某个地址,达到篡改程序正常行为的目的。
简而言之,黑客就像是找到了容器的弱点,把原本应该存放数据的位置换成了攻击代码。
这些恶意的代码可能会让程序做出它原本不该做的事情,甚至完全控制计算机。
二、缓冲区溢出的危害缓冲区溢出到底有什么危害呢?它的危害,简直可以用“灾难性”来形容。
试想一下,你的计算机就像是一座巨大的“宫殿”,本来所有的资源都由你这个“国王”来掌控。
但黑客通过溢出攻击,就像是偷偷溜进了宫殿,把原本属于你的权利和资源都悄悄篡改了,甚至控制了你的宝座。
最直接的危害就是,黑客可以直接在你的计算机上运行他们自己的代码。
好比说,黑客能在你的电脑上悄无声息地启动一个恶意程序,这个程序完全不被你察觉。
等到你发现问题,已经晚了,计算机可能已经被完全控制了。
除此之外,缓冲区溢出攻击还可以用来窃取你的敏感信息。
就像是一个狡猾的小偷,悄悄地从你家里拿走了钱包,虽然你一点都没感觉到。
这些黑客可以通过溢出攻击,获得你计算机中的密码、用户名,甚至银行账号信息。
这些信息可是金钱和个人隐私的根基,一旦泄露,后果不堪设想。
所以,这种攻击不仅威胁到个人的隐私,甚至可能危及到整个企业的安全。
pwn ret2syscall 原理
pwn ret2syscall 原理pwn ret2syscall 原理1. 引言在计算机安全领域,pwn(ret2syscall)是一种经典的漏洞利用技术,它能够绕过程序所设定的安全限制,直接调用系统API完成攻击目标。
本文将介绍pwn ret2syscall的原理及相关技术。
2. 漏洞背景在理解pwn(ret2syscall)原理前,我们需要先了解几个重要概念:栈溢出漏洞和系统调用。
栈溢出漏洞:当程序未对输入数据进行正确的边界检查时,攻击者可利用输入缓冲区的溢出现象,覆盖栈上的返回地址,控制程序的执行流程。
系统调用:操作系统提供的一组接口,用于程序与操作系统之间的交互。
例如,程序可以通过系统调用来读写文件、执行新进程等。
3. pwn(ret2syscall)原理pwn(ret2syscall)利用了栈溢出漏洞将程序的执行流程修改为调用系统调用的流程,从而绕过程序本身的安全控制。
具体实现步骤如下:1.找到栈溢出漏洞:通过输入数据的长度或内容,触发程序的栈溢出漏洞。
2.溢出返回地址:覆盖函数调用返回时将要执行的地址,将其修改为系统调用的入口地址。
3.构造系统调用参数:将所需的系统调用号及参数通过合适的方式存储在栈上,以供系统调用时使用。
4.触发返回:在栈上构造合适的数据,使得函数返回并跳转到覆盖的返回地址,从而触发系统调用。
5.系统调用执行:程序跳转到系统调用的入口地址,并根据栈上存储的系统调用参数,执行相应的操作。
4. 实例解析以一个简单的C程序为例,来解释pwn(ret2syscall)的原理:#include <>#include <>void vuln() {char buffer[64];read(0, buffer, 128);}int main() {vuln();return 0;}上述代码存在一个栈溢出漏洞,函数vuln()中的read()函数会读取超过buffer容量的数据,导致溢出。
缓冲区攻击原理
缓冲区攻击原理缓冲区攻击是一种计算机安全漏洞利用技术,该技术的本质是利用程序设计时的错误,迫使程序执行不在其预期之内的代码,导致程序出现不可预测的行为或系统崩溃。
缓冲区是程序中的一个数据存储区域,通常用于临时存储数据。
由于程序在读写缓冲区时没有足够严密的验证机制,很容易受到攻击。
缓冲区攻击一般包括以下步骤:1. 攻击者通过各种途径获取目标程序的源代码或二进制可执行文件。
2. 攻击者查找目标程序的漏洞点。
常见的漏洞点包括缓冲区溢出、栈溢出、堆溢出、格式化字符串等漏洞。
3. 攻击者利用自己编写的代码,通过漏洞点向缓冲区注入恶意代码。
攻击者通过缓冲区注入的方式,将指针篡改成自己编写的代码地址。
4. 当目标程序执行到被攻击者注入的恶意代码时,攻击者就可以得到目标程序的控制权。
从而进行任意的操作,比如窃取敏感信息、执行恶意程序等。
缓冲区攻击原理的主要方式是缓冲区溢出。
在程序设计中,缓冲区的长度(或大小)需要根据具体情况进行设定,如果没有考虑到缓冲区大小对程序的限制,就很容易导致缓冲区溢出。
攻击者的主要目的就是利用缓冲区溢出造成目标程序的崩溃或执行意外指令。
当攻击者向程序输入超过缓冲区限制的数据时,该数据将会被写入到程序的内存中。
如果攻击者注入的数据太大,超出了程序缓冲区分配的内存空间,就会造成内存泄漏或覆盖程序的其他重要内存空间,从而导致程序崩溃或执行意外指令。
攻击者在利用缓冲区溢出攻击时,通常需要设计一个精细的利用程序操作流程,以使攻击有效。
此外,攻击者还需要获取目标程序的关键信息,比如缓冲区地址、返回地址、指令寄存器等,以便更好地定位攻击目标。
因此,攻击者需要对目标计算机系统的底层运行原理有一定的了解。
为了防范缓冲区攻击,程序设计中需要实行严格的输入数据验证规则,并对缓冲区大小进行限制。
此外,程序员应当在代码中加入对数据输入的有效性校验,以减少缓冲区攻击的风险。
缓冲区溢出攻击原理
缓冲区溢出攻击原理一、缓冲区溢出攻击原理缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。
利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。
更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
缓冲区溢出是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。
知道了这个数据我非常震惊,以前进行的活动大都是找各方面的黑客软件然后学习这个软件怎么用,但是众所周知,攻击型的黑客软件都是各大杀毒软件的活靶子,基本上几天就不能用了,所以学习了这些软件的原理,我也能写几行代码,不再依赖黑客软件,就算汇编语言难掌握,也可以保存好常用的代码,其使用方法是比较简单的,下面是我学习的过程,由于没有经验,肯定有不少疏漏,也肯定不少地方绕了弯路,但自己学的过程中也获得了更多乐趣和收货时的喜悦,下面是具体介绍。
我用的是windows xp sp3编程软件是vc6.0。
还用到了olldbg2.0。
都是很常用的工具。
先介绍一下缓冲区溢出攻击的基础知识储备,进程内存空间是我最先接触的,现在看来也是最必要的基础,windows系统核心内存区间0xFFFFFFFF~0x80000000 (4G~2G)为Win32操作系统保留用户内存区间0x00000000~0x80000000 (2G~0G)堆: 动态分配变量(malloc), 向高地址增长进程使用的内存可以按照功能大致分成以下4 个部分。
(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。
动态分配和回收是堆区的特点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
栈溢出攻击原理
栈溢出攻击
什么是栈溢出攻击?
栈溢出攻击(Stack Overflow)是一种常见的计算机安全漏洞,攻击者利用该漏洞在程序运行过程中覆盖栈中的关键数据,从而获得非法权限。
栈的基本原理
1.栈是一种常见的数据结构,采用“先进后出”的原则。
它通过栈
帧存储函数的局部变量、函数参数和返回地址等信息。
2.当函数被调用时,栈会分配一块内存用于存储该函数的局部变量
等信息,称为栈帧。
3.栈帧包含了函数的参数、局部变量和返回地址。
其中,返回地址
指向函数执行完之后应该返回的位置。
栈溢出攻击原理
1.攻击者利用恶意输入等方式,向程序中注入超过栈大小的数据,
覆盖原本存储在栈帧中的数据。
2.当函数返回时,栈中存储的返回地址被修改,使程序跳转到攻击
者所设定的位置。
3.攻击者通常会在栈中注入一段恶意代码,以获取系统权限、执行
任意指令等非法操作。
栈溢出攻击的危害
1.栈溢出攻击可导致程序崩溃、数据损坏或泄露。
2.攻击者可以利用栈溢出漏洞获取系统权限,执行恶意代码,危害
用户信息安全。
防范栈溢出攻击的方法
1.使用安全编程语言,如Rust、Go等,这些语言具有内存安全特
性,可以自动检测和阻止栈溢出漏洞。
2.在编写代码时,避免使用不安全的函数,如 strcpy、gets 等,
尽量采用安全的函数,如 strncpy、fgets 等。
3.对输入进行合法性检查和过滤,避免接收过长的输入。
4.使用堆内存代替栈内存进行一些敏感操作,如密码输入、文件
I/O 等。
5.定期更新和修复系统和软件中的漏洞,以防止攻击者利用已知的
栈溢出漏洞。
总结
栈溢出攻击是一种常见而危险的计算机安全漏洞,攻击者通过覆
盖栈帧中的关键数据,获取非法权限。
在编写代码和开发应用程序时,
我们需要采取一系列措施来防范栈溢出攻击,以确保系统和用户数据的安全。
注意:文章中的代码及漏洞仅供阐述栈溢出攻击的原理,切勿用于非法或侵犯他人隐私的行为。