SQL注入攻击(ORACLE)---之sql条件注入浅谈

针对Oracle数据库的SQL注入攻击主要有下面4类:

      1、SQL篡改

      2、代码注入

      3、函数调用注入

      4.、缓冲区溢出

前面两类攻击:SQL篡改和代码注入,读者应该了解,因为他们是针对所有类型数据库(包括SQL Server、MySQL、PostgreSQL和 Oracle)的攻击中经常被人说起到攻击方法。

       SQL篡改主要是通过使用集合操作(比如UNION)或者修改where语句来达到修改SQL语句的目的,从而获得一个不同的返回结果。许多记录在案的SQL注入攻击都是这种类型。其中最出名的是通过修改用户授权的where语句来使where语句的返回值总为真。

       代码注入攻击则是攻击者向SQL语句中插入新的SQL语句或者数据库命令。典型的代码注入攻击是向一个易受攻击的SQL语句附加一个SQL 服务器的EXCUTE命令。代码注入攻击只在数据库支持多重SQL语句的情况下才有效。SQL Server 和PostgreSQL具有这种特性,有时候Oracle也有可能注入多重SQL语句。Oracle的代码注入攻击主要与PL/SQL的SQL语句动态执行功能有关。

后两类攻击则是针对Oracle数据库的特定攻击,也不是那么出名或者被列在文档中。通过我们大量的应用程序审计,我们发现了一些易受这两类攻击的应用程序。

       函数调用注入是向易受攻击的SQL语句中插入Oracle数据库函数或者用户函数。这些函数调用可以用于执行系统调用或者控制数据库中的数据。

       缓冲区溢出注入攻击时函数调用注入攻击的一个子集。在许多商业和开源数据库中,少量数据库函数由于可能引起缓冲区溢出而受到攻击。大多数的这些缺陷都可以有修复补丁,但还是有许多产品数据库是没有补丁可打的。

需要具体了解各种攻击方式及防御措施请自行谷歌搜索,这里只是简单说说第一种,及在where后注入以便条件为真。

这是我总结的,希望对大家有所帮助:

操作符 描述 例句
= 等于eq select 1 from dual where 1 = 1
<> 不等于neq select 1 from dual where 1 != 2
!= 同上 select 1 from dual where 1 != 2
^= 同上 select 1 from dual where 1 ^= 2
> 大于gt select 1 from dual where 2 > 1
< 小于lt select 1 from dual where 1 < 2
>= 大于等于gte select 1 from dual where 1 >= 1
<= 小于等于lte select 1 from dual where 1 <= 1
[NOT] BETWEEN AND 在某个范围内 select 1 from dual where 1 BETWEEN 1 AND 1
[NOT] LIKE 搜索符合正则表达式 select 1 from dual where 1 LIKE 1
[NOT] IN 在某个集合内 select 1 from dual where 1 IN 2
[NOT] EXISTS 是否存在 select 1 from dual where EXISTS (select 1 from dual)
IS [NOT] NULL 是空 select 1 from dual where NULL IS NULL
() 括号 输入的sql参数值不能有括号
在语句“放入”sql中前,对参数值进行关键字符串替换,替换成""(空),当然需要不区分大小写。

当然,如果一开始写代码的时候就用了类似preparedstatement类型的,就应该比较安全了。

如果我漏了什么,或你们有更好的方法,欢迎留言吐槽。

你可能感兴趣的:(sql注入)