1. 研究缓冲区溢出的原理,至少针对两种数据库进行差别化研究 2. 针对不一样数据类型,研究SQL注入点的发现与注入技术 3. 研究缓冲区溢出的防范方法,至少针对两种编程语言进行差别化研究 4. 至少使用两种数据库注入攻击工具
当计算机向缓冲区内填充数据位数时,超过了缓冲区自己的容量,溢出的数据覆盖在合法数据上,理想的状况是程序检查数据长度并不容许输入超过缓冲区长度的字符,可是绝大多数程序都会假设数据长度老是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操做系统所使用的缓冲区又被称为"堆栈"。 在各个操做进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。
1.1 堆栈缓冲区
基础知识
进程被分红三个区域:文本, 数据和堆栈。html
**文本** 文本区域由程序肯定的, 包括代码(指令)和只读数据. 该区域至关于可执行文件的文本段. 这个区域一般被标记为只读, 任何对其写入的操做都会致使段错误 **数据** 数据区域包含了已初始化和未初始化的数据. 静态变量储存在这个区域中. 数据区域对应可执行文件中的data-bss段. 它的大小能够用系统调用brk(2)来改变.若是bss数据的扩展或用户堆栈把可用内存消耗光了, 进程就会被阻塞住, 等待有了一块更大的内存空间以后再运行. 新内存加入到数据和堆栈段的中间. **堆栈** 堆栈是一个在计算机科学中常用的抽象数据类型. 堆栈中的物体具备一个特性:最后一个放入堆栈中的物体老是被最早拿出来, 这个特性一般称为后进先处(LIFO)队列.
为何使用堆栈?sql
现代计算机被设计成可以理解人们头脑中的高级语言. 在使用高级语言构造程序时最重要的技术是过程(procedure)和函数(function). 从这一点来看, 一个过程调用能够象跳转(jump)命令那样改变程序的控制流程, 可是与跳转不一样的是, 当工做完成时,函数把控制权返回给调用以后的语句或指令. 这种高级抽象实现起来要靠堆栈的帮助. 堆栈也用于给函数中使用的局部变量动态分配空间, 一样给函数传递参数和函数返回值也要用到堆栈.
Linux 下进程地址空间的布局
1.2 Oracle数据库缓冲区溢出攻击
消除基于缓冲区溢出漏洞的攻击的步骤
1 首先编写相关程序使缓冲区发生溢出。
2 而后寻找溢出点。
其中,寻找溢出点、编写恶意代码是完成攻击的基础,而跳转到溢出点注入恶意代码则是攻击的重难点。在寻找溢出点的过程当中,一般采用了使用两次不一样的参数填充肯定溢出点和二分法测试溢出点这两种方法。
3 最后在溢出点注入恶意代码。
在攻击的过程当中,能够根据实际状况选取不一样的方法。编写的恶意代码即一般所说的shellcode,它是一组能完成想要功能的机器代码,一般以16进制数组的形式存在,能够通俗的理解为程序执行指令(也就是汇编指令)对应的机器码。编写shellcode的通常方法是先写出C代码,而后找出里面用到的库函数的地址,再把C代码改编为汇编代码,利用调试器调试汇编代码,最后从中提取机器代码。接下来的问题就是如何跳转到shellcode。
针对不一样缓冲区溢出的类型,目前一般采用的是jmp esp和SEH这两种跳转方法。一样,针对Oracle数据库缓冲区溢出攻击主要的问题就是如何写出相关程序来使缓冲区发生溢出,以及寻找溢出点,而且在溢出点注入相关的恶意代码,使之可以实如今正常访问的状况下所不能得到的权限或者相关效果。缓冲区溢出漏洞自己是在Oracle数据库中广泛存在的一种漏洞,目前绝大多数的Oracle数据库缓冲区溢出漏洞已经被人们进行了一系列的深刻研究,可是随着Oracle数据库的不断更新与发展,新的漏洞不断出现并被人们所发现与研究。本文首先从发现缓冲区漏洞的基本问题入手,讨论了缓冲区溢出漏洞的成因。在发现了相关的缓冲区溢出漏洞以后,选择了其中一个缓冲区溢出漏洞——Oracle数据库中自带函数NUMTOYMINTERVAL在调用过程当中存在缓冲区溢出漏洞做为切入点,对缓冲区溢出漏洞进行了深刻的研究,以此来发现溢出点,以后须要进一步解决如何在溢出点注入相关的恶意代码。shell
在没有源代码的状况下,并不知道函数局部变量的大小,因此定位溢出点的方法通常是利用不一样大小的参数反复调用该函数,直到系统报错,再根据系
统的错误信息定位溢出点。若是系统没有报错,说明你的参数的大小尚未超过局部变量的大小,这时你要不断地增长参数的大小,以达到溢出点定位的目的。
针对本文函数 NUMTOYMINTERVAL 中缓冲区溢出漏洞的特色,须要找到一个让本文开始能够控制程序流程的地方做为溢出点。寻找溢出点,本文须要利用 Oracle 数据库的数据库操做日志文件。这个文件(alert_数据库名)存放在 Oracle数据库安装目录下的“admin\数据库名\cdump”文件夹中,全部对于数据库的操做都会在这个日志文件中记录下来。利用这个日志文件,能够很直观地观察到溢出漏洞被触发时当前的 PC 的值,从而肯定溢出点的位置。
编写 shellcode 目前流行的有两种方法:第一种是用 C 语言编写,而后提取;第二种是用汇编语言编写,而后提取。本文选择第一种方法,由于直接使用 C语言编写,方便编写、修改、调试。先写出 C代码,再转变为汇编代码,最后经过调试器提取机器代码数据库
静态防范策略
静态防范着重于经过对代码的静态分析消除可能引发缓冲区溢出的代码漏洞,是一种预防策略。
这类防范策略中比较有表明性的方法有词典分析、语义注释、改造C语言编译系统等。此外,已出现的静态检测缓冲区溢出的系统,还有Wagner等人开发的系统,它成功地从sendmail软件中检查出已知和未知的缓冲区溢出漏洞;CeogreG.Necula等人开发的Poor-carrying code等。
动态防范策略
动态策略经过对存在问题的软件进行技术上的弥补来消除缓冲区溢出漏洞。
动态防范的策略主要体如今运行时检测和阻止缓冲区溢出的攻击.其中Crispin Cowan等人开发的堆栈卫士是到目前为止最成功的方法.编程
Pangolin
Pangolin是一款帮助渗透测试人员进行SQL注入(SQL Injeciton)测试的安全工具。Pangolin与JSky(Web应用安全漏洞扫描器、Web应用安全评估工具)都是NOSEC公司的产品。Pangolin具有友好的图形界面以及支持测试几乎全部数据库(Access、MSSql、MySql、Oracle、Informix、DB二、Sybase、PostgreSQL、Sqlite)。Pangolin可以经过一系列很是简单的操做,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin是目前国内使用率最高的SQL注入测试的安全软件。
Sqlmap
Sqlmap是一个自动SQL 注入工具。其可胜任执行一个普遍的数据库管理系统后端指纹,检索DBMS数据库、usernames、表格、列、并列举整个DBMS信息。Sqlmap提供转储数据库表以及MySQL、PostgreSQL、SQL Server服务器下载或上传任何文件并执行任意代码的能力。后端
参考连接:http://www.cnblogs.com/coderzh/archive/2008/08/20/1272183.html 缓冲区溢出攻击手段及防范策略分析_万春