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類型的,就應該比較安全了。

如果我漏了什麼,或你們有更好的方法,歡迎留言吐槽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章