<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址:http://drops.wooyun.org/tips/975

    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多多!

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

    97av