- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库缓冲区溢出漏洞原理解析
数据库缓冲区溢出漏洞原理(栈)安华金和思成背景在数据库系统中已经发现了许多安全漏洞,其中比较严重且危害性比较大的有:缓冲区溢出和SQL注入2种。SQL注入主要依赖于结构化查询语言,每种数据库略有出入;SQL注入漏洞的利用,最主要的威胁是提权;后台维护人员或黑客攻击,可以借此获得DBA权限。需要说明的是,这里所说的SQL注入并不是应用系统的SQL注入,而是数据库自身的注入漏洞,这种漏洞比应用系统的注入漏洞危险性更高;对于SQL注入漏洞的存在,主要是由于数据库中提供的系统或用户函数存在的参数检查不严和语句执行的缺陷。SQL注入漏洞不是本文的探讨重点,将在安华金和数据库安全实验室发表的其它文章中进行探讨。而对于缓冲区溢出的漏洞,风险性更高,因为通过缓冲区溢出漏洞不仅可以危害数据库,还可以控制操作系统,从而以数据库服务器为跳板,控制整个内网系统。缓冲区溢出的漏洞,不仅在数据库系统中有,在操作系统上运行的相关应用软件也有,但对于数据库由于要提供大量外部访问,防火墙、IPS等传统不能对其进行禁止,这些攻击隐藏在数据库的通讯协议中,具有更大的隐蔽性,更是难以防范。缓冲区溢出的攻击实现不仅需要注入点(注入点,是数据库的漏洞提供的),同时还要依赖于操作系统的程序调用机制来实现;现在的操作系统对此,都在逐步加强防守,但攻击者总是能够找出方法进行突破,这种突破主要依赖于shellcode的编写。缓冲区溢出本质上是因为操作系统无法区分数据和指令的区别,把数据当指令来执行,从而产生了无法预计的结果。安华金和数据库安全实验室将在本文将以windows XP为依托,借助代码对如何利用缓冲区溢出做原理性介绍,以便于我们未来对其防范原理进行更好的讨论。缓冲区溢出缓冲区溢简单说,是大的数据存入了小缓冲区,又不对存入数据进行边界判断,最终导致小缓冲区被撑爆。大的数据污染了小缓冲区附近的内存。污染的内存可能带来改变程序控制流、夺取操作系统、禁止访问等多种结果。下文所有的讨论都是在windows xp上进行。缓冲区溢出主要可以分成三种:静态数据溢出、栈溢出和堆溢出。产生这三种不同的溢出根源在于win的内存结构;win的内存可以被分成两个层面:物理内存和虚拟内存。我们一般看到的其实只是windows的虚拟内存。在XP下windows会给所有进程都分配4G内存(无论物理内存真实多大);windows会把4G内存分成代码区、数据区、堆区、栈区。数据区存储的是进程的全局变量。如果利用这里的数据进行缓冲区溢出那么就被称为静态数据溢出。同样利用栈区和堆区进行缓冲区溢出,则相应被称作栈溢出和堆溢出。静态数据溢出虽然技术难度低但是灵活性和可以利用范围低,所以本文就不介绍了。堆溢出相对复杂,将在别的文章介绍。本文介绍的是windows下的栈溢出,想要知道WINDOWS下的栈溢出如何利用,首先要理解windows下的栈结构。栈结构为了直观的说清楚windows下的栈结构。我们构造一段代码见下图。这段代码将完成3个任务:1.演示WIN下栈的结构2.演示缓冲区溢出改变函数控制流程 3.演示缓冲区溢出覆盖返回地址(劫持函数)下面的程序包含一个主函数main和另外一个子函数re_choose。re_choose函数用于把从main函数中取得的输入字符串和存储的字符串liusicheng做对比。如果输入的字符串和存储的字符串一致则返回0。如果不一致则可能返回1或者-1。同时还人为制造了一个缓冲区溢出点strcpy(buffer,input)。input有1024的空间,而buffer只有44的空间。只要input超过44则就会引发缓冲区溢出。main函数取re_choose返回值如果返回1或-1走if。如果返回0则走else。将用缓冲区溢出来让返回1或者-1也走else。#include stdio.h#include string.h#define ture_password liusichengint re_choose (char *input){int result;char buffer[44];result = strcmp(input,ture_password); strcpy(buffer,input); //缓冲注入点return result;} void main(){int choose=0; char input[1024];scanf(%s,input);choose=re_choose(input);if (choose == 1 || choose == -1){printf(error\n);} else{printf(ture\n);}}编译出上面代码的release版,放入IDA pro中得到反
文档评论(0)