仅供hw思路参考

提权的话,一般mssql2005是直接高权限,高版本只能手动设置管理员运行
如果在内网中横向移动的时候,这招的参考价值就有点了

拦截效果

上来先看拦截效果
image.png
目标主机存在数字杀软
在配置文件中找到sa账号密码
image.png

开启xp_cmdshell和sp_oacreate在这里不做赘述,在数据库及其主流关系型利用方法文章中有记录

xp_cmdshell

image.png
数字杀软应在CreateProcess阶段拦截了xp_cmdshell

sp_oacreate

image.png
并没有返回执行命令成功的结果
执行成功应该返回0
image.png
D盘下也没有生成我们的命令结果文件

clr

这里是直接使用的SharpSQLTools工具
image.png
clr_efspotato和clr_badpotato一样无法执行命令

实战绕过

sql server 默认安装后,会发现有一个 sqlps.exe
image.png
自带微软数字签名
作用就是开启一个powershell环境
sp_oacreate执行命令的时候wscript.shell可以不调用CMD执行程序

  1. declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'calc'

但一般只有系统目录中无害的程序,比如Calc,ipconfig,tasklist这些,或者有数字签名的可以不遭受拦截,而且数字签名创建的进程不可信还是会被拦截,所以我们上线后,需要把进程注入到别的进程,才可执行系统命令

效果

image.png

sql server 默认为service权限,因此对很多目录包括sql server 默认目录都无法执行该程序,因此要提前上传sqlps至C:\Users\Public目录

上传文件

这里本来想用sharpsqltools直接上传文件,但是被拦截了
image.png
发现sharpsqltools,是先把文件.config_txt后缀名下,再调用sp_oacreate cmd进行重命名和删除,问题是,360直接拦截sp_oacreate cmd啊,所以只能自己通过一下方式手动写入

  1. DECLARE @ObjectToken INT
  2. EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
  3. EXEC sp_OASetProperty @ObjectToken, 'Type', 1
  4. EXEC sp_OAMethod @ObjectToken, 'Open'
  5. EXEC sp_OAMethod @ObjectToken, 'Write', NULL, 0x123456(其中0x123456HEX内容)
  6. EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'Test.exe(文件名)', 2
  7. EXEC sp_OAMethod @ObjectToken, 'Close'
  8. EXEC sp_OADestroy @ObjectToken

image.pngimage.png