【.NET小科普之一】資料庫資訊在哪兒

wyzsk發表於2020-08-19
作者: wefgod · 2014/03/03 11:48

0x00 前言


最近有人問到ASP.NET裡面的資料庫連線資訊一般去哪裡找。

這裡我簡單總結一下我遇到過的一些情況,和大家分享一些簡單的方法去找ASP.NET的資料庫連線資訊或資料庫檔案。

0x01 尋找方式


先說一般的資料庫連線資訊。

第一種

一般在web.config,如某套OA就是將連線字串存放在該檔案內,如下圖:

2014022700095197526.png

第二種

有的ASP.NET程式功能較多,會自定義其它config檔案,所以可能會存在多個config,而資料庫連線資訊就存放在其它config檔案中,比如逐浪CMS(你們懂的)就有多個config檔案,如下圖:

2014022700101785287.png

但資料庫相關連線資訊存放在ConfigConnectionStrings.config裡:

2014022700104882825.png

第三種

也有更標新立異的壓根不存放在config中,比如信遊(你們也懂的)的免費版,也有一個config資料夾,裡面的檔案大致如下:

2014022700111290986.png

資料庫連線資訊存放在server.apb中:

2014022700113714515.png

第四種

有一些比較奇葩的,直接寫在程式碼中。這種情況下如果沒有原始碼cs檔案,就只能反編譯bin目錄下的dll檔案了,必須擴充套件開來說,這是後話了。

資料庫檔案

那如果是access或者SQLite的情況又會有什麼變化呢?他們的資料庫會存放在什麼位置?

現在大多CMS為了避免直接下載MDB或相關格式的問題,在.NET中採取了其它手段去防下載,比如50cms將SQLite的資料庫存放在根目錄的App_Data資料夾中:

2014022700121131087.png

2013就是50cms的資料庫:

2014022700125250234.png

另外還有直接將access資料庫存放在App_Code資料夾中的,儲存為.cs字尾,由於App_Code和App_Data是無法直接透過post和get來直接訪問的(你有任意檔案下載的話誰都攔不住你),所以在一定程度上保證了網站的安全性,比如下面的2013.cs實際就是網站的資料庫:

2014022700131235957.png

當然了,上面說的也是較為常見的,凡事總會有奇葩的,結合實際情況以不變應萬變吧!

總結一下,資料庫或者資料庫相關資訊會在哪裡:

1. web.config 
2. 其它config檔案 
3. 某些有特徵的資料夾下的某個檔案(如上面信遊的那個) 
4. 原始碼中,去dll翻翻吧 
5. App_Code或App_Data 
6. 其它各種奇葩情況…… 

下面重點說說第四種尋找方式。

0x02 反編譯.NET程式


1 .NET的程式是怎樣的?

我們這說的.NET不是什麼www.caoliu.net,都指的是微軟的開發語言。下文對.NET的分析主要是我個人的總結,並非官方語言。

那常見的.NET程式其簡單構成是咋樣的呢?

第一種,我們常見的桌面應用,可以是winform和console型別,比如常見的winform應用其可編譯的專案原始檔結構大概如下(以VS2008為例):

enter image description here

Bin目錄是編譯後的兩種型別的可執行檔案:

enter image description here

Debug編譯後的程式會帶有一些相關的除錯資訊,體積會大一點,release是釋出版本的相對沒帶有那麼多除錯資訊,體積會小一些。

第二種,就是我們要重點熟知的asp.net應用程式,一個很簡單的asp.net應用程式的原始碼目錄結構如下:

enter image description here

一般來說,我們的關注點更多不在aspx檔案中,因為VS2005之後都主要是將相關的程式碼分離到了cs檔案中。所以我們更多要關注的是.cs字尾的檔案,但是在釋出版的網站中,是不包含cs檔案的,此時我們要關注的就是bin目錄了,bin目錄中有相關的dll。比如上面的小網站的bin目錄只有一個dll檔案:

enter image description here

2. 用什麼反編譯.NET的程式

目前相對比較有名的.NET反編譯程式主要有兩款:

Reflector
ILSpy

Reflector是一個比較早出現而且功能也比較強大的反編譯軟體(在這略微提醒一下,是反編譯不是反彙編),支援自定義外掛和程式碼除錯的功能,支援將原始碼反編譯為IL語言、VB.NET、C#、Delphi.NET、F#和MC++等並可選擇.NET框架的相關版本(不同版本有不同的語言特性),目前最新版已經是8.0,7.3版的截圖如下:

enter image description here

選定某個dll後,可以在File選單中選擇匯出原始碼:

enter image description here

ILSpy是一個開源且免費的反編譯程式,主要功能還是反編譯,不支援外掛,可以翻譯成的語言主要是C#、VB.NET和IL。最新版截圖如下:

enter image description here

選中某個dll後,可以在File選單中匯出原始碼:

enter image description here

3. 反編譯的簡單例項

在這以簡單免費的ILSPY做演示。

先來一個找原始碼中資料庫連線資訊的例子,示例是用我們上面提到的一個小網站。

先開啟ILSpy,拖動相關的dll到左邊的邊欄中:

enter image description here

點選+號,展開相關的資訊:

enter image description here

這裡沒有做混淆(這是後後後話了),所以反編譯出來的類比較容易從名詞中看出其作用。 既然要找資料庫連線資訊,那要先考慮一點,什麼時候會進行資料庫的連線?很簡單!登入的時候嗎,所以一般來說,都是先圍繞登入點相關的類和函式進行。點選上面的login:

enter image description here

此時右邊的分欄可以看到該login類的原始碼了。裡面主要有兩個方法:Page_Load和Button1_Click。其中Page_Load是頁面載入時一定會呼叫的方法,Button1_Click是按鈕點選事件的方法(簡單說就是點選登入按鈕時呼叫的方法)。 點選左邊的+號展開兩個方法,會發現Page_Load是空的,Button1_Click是包含有原始碼的:

enter image description here

所以只能從按鈕點選那下手了。

enter image description here

看上圖示藍色的地方,很明顯就是資料庫連線資訊,把資料庫連線資訊寫入到原始碼中,不是很利於後期的維護。

另外一篇例子,可以參考我釋出在zone裡的

http://zone.wooyun.org/content/3469

尋找正方教務系統資料庫連線解密方法的一篇文章。

再展示下,如果沒混淆和加密的.NET程式,我們可以做到什麼。比如下面這個大牛寫的程式:

enter image description here

確定就退出了,只要稍加修改馬上可以去掉相關的程式碼,任意用了:

enter image description here

最後就不總結什麼了,祝大家0day多多!

濁文一篇為博大家一笑,請勿較真……第一次來提交,寫得不好請指正。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章