一、 关于 “xp_cmdshell”
“存储过程”:就是存储在SqlServer中预先定义好的“SQL语句集合”,说的更直白一些就是使用T-SQL语言编写好的各种小脚本共同组成的集合体,我们称之为“存储过程”。其危险性最高的“小脚本”就是扩展存储过程中的“xp_cmdshell脚本”,它可以执行操作系统的任何指令。
如果我们能够获取SA的管理员权限,我们就可以使用SA的管理权限可以直接执行扩展存储过程中的“xp_cmdshell脚本”,并获得返回值。
二、 思路
1. MSSQL在Windows server类的操作系统上,默认具有system权限。System权限在Windows server2003中权限仅比 管理员小;而在2003以上的版本,则为最高权限。
2. 获取webshell之后可尝试在服务器各个站点的目录寻找sa的密码。例如 .net的站点数据库连接字符串在web.config或者和global.aspx也有可能是编译在DLL文件当中。
3. 通过端口扫描查看1433(mssql默认端口)是否对外开放。如果对外开放则使用sql连接器进行提权,如果没有对外开 放,可以一些webshell自带的mssql数据库连接功能连接至mssql数据库。
三、 环境
四、 默认安装xp_cmdshell状态
1. 通过SQL Server Management Studio查看xp_cmdshell状态:
右击实例名->方面
选择外围应用配置器
可以看到现在的xp_cmdshell是状态
2. 通过命令查看查看是否存在xp_cmdshell模块:
右击数据库,新建查询,执行以下命令
五、 开启xp_cmdshell
命令如下
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
GO
可以看到报错提示xp_cmdshell不存在也可能是高级选项
前面已经通过命令查询存在xp_cmdshell组件,那只可能是高级选项
通过命令开启允许编辑高级选项,命令如下
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
然后再去开启xp_cmdshell
六、 通过xp_cmdshell执行系统命令