第5章漏洞利用
学习要求: 掌握漏洞利用的核心思想和shellcode的概念; 了解shellcode的编写过程,认识shellcode编写的难度; 掌握漏洞利用技术的思想; 掌握软件防护技术相关的概念。
课时: 4课时。
5.1
5.1漏洞利用概念
5.1.1有关概念
1. 概念
漏洞利用破解视频
漏洞利用,即Exploit。Exploit 的英文意思就是利用,它在黑客眼里就是漏洞利用。有漏洞不一定就有Exploit(利用),但是有Exploit就肯定有漏洞。
假设,刚刚发现了一个Minishare 1.4.1版的0Day漏洞。Minishare是一款文件共享软件(Homepage——http: //minishare.sourceforge.net/),该0Day漏洞是一个缓冲区溢出漏洞,这个漏洞影响1.4.2之前的所有版本。当用户向服务器发送的报文长度过大(超过堆栈边界)时就会触发该漏洞。
得到该漏洞后,可以做点什么呢?善意点的,可以对同学或者朋友的电脑搞搞恶作剧,让其电脑弹出个对话框之类的; 恶意点的,可以利用这个漏洞来向目标机器植入木马,窃听用户个人隐私等。那么,到底如何能达到这些目的呢?
2. 漏洞利用的手段
在1996年,Aleph One在Underground发表了著名论文Smashing the Stack for Fun and Profit,其中详细描述了LINUX系统中栈的结构和如何利用基于栈的缓冲区溢出。在这篇具有划时代意义的论文中,Aleph One演示了如何向进程中植入一段用于获得Shell(Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核)的代码,并在论文中称这段被植入进程的代码为Shellcode。
漏洞利用的核心就是利用程序漏洞去执行Shellcode以便劫持进程的控制权。要达到该目的,需要通过代码植入的方式来完成,其目的是淹没返回地址,以便劫持进程的控制权,让程序跳转去执行Shellcode。
现在,Shellcode已经表达的是广义上的植入进程的代码,而不是狭义上的仅仅用来获得Shell的代码。Shellcode往往需要用汇编语言编写,并转换成二进制机器码,其内容和长度经常还会受到很多苛刻限制,故开发和调试的难度很高。
植入代码之前需要做大量的调试工作。例如,弄清楚程序有几个输入点,这些输入将最终会当作哪个函数的第几个参数读入到内存的哪一个区域,哪一个输入会造成栈溢出,在复制到栈区时对这些数据有没有额外的限制等。调试之后还要计算函数返回地址距离缓冲区的偏移并淹没之,选择指令的地址,最终制作出一个有攻击效果的承载着Shellcode的输入字符串。
……