数据库中安全知识介绍-入门底子[Oracle防范]
本文“数据库中安全知识介绍-入门底子[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
数据库系统是在操作系统平台之上的最重要的系统软件,数据库系统的安全可以说是非常重要的.曾经有句话这样说:假如网络各处是金钱,那么金钱就在数据库服务器中.随着无纸化业务环境的不断扩大,人们在数据库中存储着越来越多的敏感信息:银行账户、医疗记录、政府文件、军事奥秘等等,数据库系统就成为越来越有代价的攻击目标,因此确保数据库系统的安全也越来越重要.
作为一种大型的系统软件,数据库系统中也存在着各种各样的安全漏洞,此中危害性较大的有缓冲区溢出、堆溢出和SQL注入等.
1.缓冲区溢出
缓冲区溢出是一种很常见也很陈腐的安全漏洞.早在上个世纪80年代,缓冲区溢出就已经为人所知,但时至本日,大量的缓冲区溢出漏洞仍被发现.最闻名的Morris蠕虫就是操纵Unix系统上fingerd程序的缓冲区溢出漏洞.在Oracle 9i公布之初,Oarcle公司曾声称他的数据库是" unbreakable "的,但不到几个月的时间,就暴出Oracle 9i中oracle.exe、XDB等程序存在多个缓冲区溢出漏洞.
在C语言中最常见的缓冲区就是字符数组,而操作字符数组的函数有gets、strcpy、sprintf等.这些函数在履行字符串拷贝的历程中没有对字符串举行长度查抄,这样就很简单发生超长的字符串溢出缓冲区的情形.当初这样计划是出于效率的考虑,但目前看来,这些函数的利用已成为C语言软件脆弱的一个重要因素.假如程序员没有杰出的编程习惯,时刻注意函数调用历程中能否拷贝了超越缓冲区长度的字符串,那么缓冲区溢出就不可避免.关于一个有缓冲区溢出漏洞的程序,当普通用户输入超长字符串时,普通只会使该程序崩溃.比方关于下面一小段代码:
以下是引用片段:
/* vulprog */
#include int main(int argc , char * argv[]) { char buff[8]; strcpy(buff, argv[1]); } |
举行函数调用时系统所作的"序幕"工作就是将函数的返回地址和EBP压栈,再将ESP赋给EBP使其成为部分基指针,最后ESP减去一定的值为部分变量留出空间.这样当程序将太长的字符串拷贝到缓冲区时就会顺次覆盖EBP和返回地址.当用AAAA覆盖返回地址,函数退栈时系统就将0x41414141(A的16进制ASCII码)赋给EIP去履行,由于是一个不法的内存地址,故程序崩溃.但假如用一个实际存在的地址覆盖返回地址,那么程序就转而去履行该地址处的指令,普通黑客会在这个地址植入所谓的shellcode,由shellcode产生一个shell,假如被攻击程序设置了suid位,那么产生的shell就是root shell,黑客也就得到了系统的最高掌握权,这一历程就是基本的缓冲区溢出攻击.
覆盖函数的返回地址是对比常见的攻击方法,但缓冲区溢出攻击的伎俩是机动多样的,常常在编程中的一个小小忽略便大概招致被攻击,下面简单介绍一下几种较为高级的攻击方法.
(1)通过覆盖函数指针举行攻击:
以下是引用片段:
/* vulprog */
int main(int argc , char * argv[]) { void (* fp)(char *) = (void (*)(char *))&puts; char buff[256]; strcpy(buff,argc[1]); fp(argc[2]); exit(1); } |
以上是“数据库中安全知识介绍-入门底子[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |