<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址: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多多!

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

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线