.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章