论文部分内容阅读
Oracle数据库是当今世界应用最广泛的数据库之一,凭借其强大的功能和卓越的性能在数据库市场上占据了很大的份额。正是由于Oracle数据库在IT市场中举足轻重的地位,对其安全问题的研究就显得尤为重要。SQL注入攻击一般就是攻击者在正常的Web页面中把自己的SQL代码通过用户输入传入到相应的应用程序中,从而执行一些非用户预期的SQL代码,以达到修改、窃取或者破坏数据库信息等目的。SQL注入攻击甚至可以使攻击者绕过用户认证机制,使其可以完全的操控远程服务器上的数据库。如果开发人员不够细心,用户输入的数据就有可能会被解释成数据库命令,这样的话,远程用户就可以在输入用户数据的过程中在数据库上执行命令以达到其目的了,这就形成了SQL注入攻击。特别是当应用程序将使用一些用户输入的数据来构造动态的SQL语句来访问数据库的时候,就更容易遭受到SQL注入攻击。同样的如果开发人员在代码中使用了存储过程,并且这些存储过程是作为包含了没有限定的用户输入来传输的话也很容易发生SQL注入。SQL注入成功以后可能会使攻击者可以使用应用程序登陆并在数据库中执行各种各样的命令,一旦攻击者取得了很高的特权账户的使用权那么问题将会变得更加严重,它代表了一类极其严重的安全威胁。Oracle数据库中出现的SQL注入漏洞,给计算机网络带来了严重的危害,因此对Oracle数据库中的SQL注入攻击的原理的深入研究,并总结出如何有效的防御这类攻击成为了人们关注的焦点。本文首先利用Oracle数据库里的PL/SQL Developer使用DBA权限用户SYS定义了一个存在SQL注入漏洞的过程SYS.SQLTARGET;然后分析其原本的功能,将其使用权限赋予低级权限用户SCOTT,并利用低权限用户SCOTT针对这个过程定义了攻击函数SCOTT.SQLI_CHANGEPASSWORD和SCOTT.SQLI_RESTOREPASSWORD,并在函数内部定义了修改和恢复DBA权限用户SYS密码的SQL语句,最后执行攻击函数使修改和恢复密码操作成功并进行验证。通过这个完整的攻击过程来深入了解Oracle数据库中SQL注入攻击的原理及步骤,总结出了在Oracle数据库中具体哪些方面来防御SQL注入攻击。在对目标过程SYS.SQLTARGET的SQL注入攻击过程中,为了防止出现ORA-14551:无法在查询中执行DML操作这种错误,本文通过使用PRAGMA AUTONOMOUS_TRANSACTION语句来定义攻击函数,将其定义成为一个自治事务,同时使用AUTHID CURRENT_USER语句来定义攻击函数使调用者均可以以创建者的权限来调用这个攻击函数;这样就可以在执行完攻击函数以后完成对目标过程的一次成功的SQL注入攻击。