<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

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

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

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频