280 likes | 470 Views
第十四章 软件漏洞. 软件漏洞. 拒绝服务 DoS 基本原理 利用软件实现的缺陷攻击 利用协议的漏洞攻击 进行资源比拼. 软件漏洞. 缓冲区溢出 关于堆栈的基础知识 BufferOverflow 的机理 ShellCode 的编写 实战中的缓冲区溢出 缓冲区溢出示例 C++ 程序的缓冲区溢出攻击 windows 远程堆栈溢出. 软件漏洞. 格式化字串 基础知识简介 ` 格式化串漏洞原理 wu-ftp 6.0 格式化串漏洞 其他常见漏洞 内存漏洞 内存 / 交换区漏洞 符号连接 竞争条件漏洞 Rhost 、 xhost 漏洞. 拒绝服务.
E N D
软件漏洞 • 拒绝服务 • DoS基本原理 • 利用软件实现的缺陷攻击 • 利用协议的漏洞攻击 • 进行资源比拼
软件漏洞 • 缓冲区溢出 • 关于堆栈的基础知识 • BufferOverflow的机理 • ShellCode的编写 • 实战中的缓冲区溢出 • 缓冲区溢出示例 • C++程序的缓冲区溢出攻击 • windows远程堆栈溢出
软件漏洞 • 格式化字串 • 基础知识简介 • `格式化串漏洞原理 • wu-ftp 6.0格式化串漏洞 • 其他常见漏洞 • 内存漏洞 • 内存/交换区漏洞 • 符号连接 • 竞争条件漏洞 • Rhost、xhost漏洞
拒绝服务 • DoS(DenialofService)拒绝服务攻击广义上可以指任何导致你的服务器不能正常提供服务的攻击。 • 一个用户占有过多自愿而不给其他用户保留共享资源(耗尽自愿,超负荷攻击),就是拒绝服务攻击。
利用软件实现的缺陷攻击 • OOB攻击(常用工具winnuke),teardrop攻击(常用工具teardrop.cboink.cbonk.c),land攻击,IGMP碎片包攻击,jolt攻击,Cisco2600路由器IOSversion12.0(10)远程拒绝服务攻击等等,这些攻击都是利用了被攻击软件的实现上的缺陷完成DoS攻击的。
利用协议的漏洞攻击 • 如果说上面那种漏洞危害的时间不是很长,那么这种攻击的生存能力却非常强。为了能够在网络上进行互通、互联,所有的软件实现都必须遵循既有的协议,而如果这种协议存在漏洞的话,所有遵循此协议的软件都会受到影响。
进行资源比拼 • 这种攻击方式属于无赖打法,凭借着手中的资源丰富,发送大量的垃圾数据侵占完对方的资源,导致DoS。
软件漏洞 • 缓冲区溢出 • 关于堆栈的基础知识 • BufferOverflow的机理 • ShellCode的编写 • 实战中的缓冲区溢出 • 缓冲区溢出示例 • C++程序的缓冲区溢出攻击 • windows远程堆栈溢出
关于堆栈的基础知识 • 一个应用程序在运行时,它在内存中的映像可以分为三个部分:代码段,数据段和堆栈段(参见图1)。 • 详细介绍堆栈段
BufferOverflow的机理 • 我们可以通过Buffer Overflow来改变在堆栈中存放的过程返回地址,从而改变整个程序的流程,使它转向任何我们想要它去的地方.
缓冲区溢出示例 • main()函数将第1个命令行参数作为字符串传入函数xj()中,xj()函数的功能是将该字符串复制到局部变量分配的字节中,并打印出来,在xj()函数调用strcpy()前未对input的长度进行检查,可能发生缓冲区溢出。实验的目的是让其发生缓冲区溢出,并最终改变程序的执行流程,执行攻击代码——程序中的attack()函数。
C++程序的缓冲区溢出攻击 • 对于大多数情况,C语言的缓冲区溢出技术术对于C++语言也是适用的,但C++的面向对象的特性也导致了新的缓冲区溢出技术。 • - 构造我们自己的VTABLE,其中的指针入口将指向我们期望运行的代码(如shellcode)。 • - 使缓冲区溢出,并覆盖VPTR,使其指向我们的VTABLE。
windows远程堆栈溢出 • 由于在windows中,像对gets (array)这样的函数缺乏对array数组的边界检查,我们可以给程序一个很长的串,从而覆盖堆栈中的返回地址。我们可以在这个串中精心设计,从而使程序转到我们的shellcode中,使windows不知不觉地开一个telnetd服务器,我们就可以远程入侵该系统。
软件漏洞 • 格式化字串 • 基础知识简介 • `格式化串漏洞原理 • wu-ftp 6.0格式化串漏洞 • 其他常见漏洞 • 内存漏洞 • 内存/交换区漏洞 • 符号连接 • 竞争条件漏洞 • Rhost、xhost漏洞
基础知识简介 • 普通的缓冲区溢出就是利用了堆栈生长方向和数据存储方向相反的特点,用后存入的数据覆盖先前压栈的数据,一般是覆盖返回地址,从而改变程序的流程,这样子函数返回时就跳到了黑客指定的地址,就可以按照黑客意愿做任何事情了。
格式化串漏洞原理 • 所谓格式化串,就是在*printf()系列函数中按照一定的格式对数据进行输出,可以输出到标准输出,即printf(),也可以输出到文件句柄,字符串等,对应的函数有fprintf,sprintf,snprintf,vprintf,vfprintf,vsprintf,vsnprintf等。
格式化串漏洞原理 • 可以被黑客利用的*printf()系列函数的三个特性: • (1)参数个数不固定造成访问越界数据 • (2)利用%n格式符写入跳转地址 • (3)利用附加格式符控制跳转地址的值
wu-ftp 6.0格式化串漏洞 • (1)对wu-ftp 6.0格式化串漏洞的分析 • wu-ftp(Washington University ftp server)是一个非常流行的unix/linux系统ftp服务器,它的6.0版本存在格式化串漏洞。由于在大多数Linux系统中它是默认安装的,所以相当多的网站都受这个漏洞的影响,针对它的攻击也是非常普遍的。 • (2)wu-ftp漏洞的利用
软件漏洞 • 格式化字串 • 基础知识简介 • `格式化串漏洞原理 • wu-ftp 6.0格式化串漏洞 • 其他常见漏洞 • 内存漏洞 • 内存/交换区漏洞 • 符号连接 • 竞争条件漏洞 • Rhost、xhost漏洞
内存漏洞 • 一个对象被装入并且分配了内存,而在对象被关闭时却没有释放分配的内存,这样,内存漏洞就产生了。在开发工具中也会有内存漏洞,这是我们无法控制的,但是我们必须注意我们自己的代码所造成的内存漏洞。
内存/交换区漏洞 • 说明内存交换区漏洞,可以举例说明如何获取Shadow口令文件。该方法利用了Solaris操作系统中FTPD的一个BUG,使得用户可以获得该机的口令文件。 • 1.通过ftp正常登录到目的主机上 • 2.输入如下命令序列: • ftp>userrootwrongpasswd • ftp>quotepasv • 3.这时,ftpd会报错退出,同时会在当前目录下生成一个core,口令文件就包含在这个core中。
符号连接 • 在unix系统中,可以有别名,使用ln –s进行,例如: • ln –s /etc/passwd /tmp/aa • 其中/tmp/aa等于/etc/passwd的别名,对aa的操作,就是对/etc/passwd的操作。符号连接的bug就是利用系统进程写文件/tmp/aa,造成对/etc/passwd的修改。
竞争条件漏洞 • 漏洞的产生在于程序处理文件等实体时在时序和同步方面存在问题,这处理的过程中可能存在一个机会窗口使攻击者能够施以外来的影响。
Rhost、xhost漏洞 • 在 Linux 系统中,系统是通过查看 /etc/hosts.equiv 及$HOME/.rhosts文件来控制可以使用“r”命令的节点和用户。所以,这两个文件的正确设置是安全使用“r”命令的基本保障。 • 黑客在侵入某个Linux 系统后,通常做的一件事就是修改在主目录下的".rhosts"文件,以便为自己日后再次进入系统留下后路。
Rhost、xhost漏洞 • 还要特别注意“.rhosts”文件中不能涉及一些特殊帐户(例如 news,bbs 等等),一些黑客就是通过这条途径进入用户帐户而有不留下自己的来龙去脉。 • 可以看出,".rhosts"为外部侵入留下了潜在的危险,用户在自己设置时要格外小心。如果不是特别需要,建议在".rhosts"文件中不要设外部入口。同样的,对于系统管理员,如果不是特别需要,建议在 /etc/hosts.equiv 中不设入口。
作业 • 软件限制,必须有特定的U盘才能运行