前言
无论是渗透测试,还是红蓝对抗,目的都是暴露风险,促进提升安全水平。企业往往在外网布置重兵把守,而内网防护相对来说千疮百孔,所以渗透高手往往通过攻击员工电脑、外网服务、职场WiFi等方式进入内网,然后发起内网渗透。而国内外红蓝对抗服务和开源攻击工具大多数以攻击Windows域为主,主要原因是域控拥有上帝能力,可以控制域内所有员工电脑,进而利用员工的合法权限获取目标权限和数据,达成渗透目的。
本文以蓝军攻击视角,介绍常用的Windows内网渗透的手法,包括信息收集、传输通道、权限提升、密码获取、横向移动、权限维持、免杀处理,主要让大家了解内网渗透到手法和危害,以攻促防,希望能给安全建设带来帮助。
信息收集
在攻陷一台机器后,不要一味的直接去抓取机器密码、去做一些扫描内网的操作,因为如果网内有IDS等安全设备,有可能会造成报警,丢失权限。本节主要介绍当一台内网机器被攻破后,我们收集信息的一些手法。
1.1 SPN
SPN:服务主体名称。使用Kerberos须为服务器注册SPN,因此可以在内网中扫描SPN,快速寻找内网中注册的服务,SPN扫描可以规避像端口扫描的不确定性探测动作。主要利用工具有:setspn、GetUserSPNs.vbs和Rubeus。
a、利用Windows自带的setspn工具,普通域用户权限执行即可:
setspn -T domain.com -Q /
在上述截图中可以清晰的看到DCServer机器上运行了dns服务。如果网内存在mssql,利用SPN扫描也可以得到相应的结果。
b、利用GetUserSPNs.vbs也可以获取spn结果:
c、Rubeus工具是Harmj0y开发用于测试Kerberos的利用工具。
如下图利用Rubeus查看哪些域用户注册了SPN,也为后续Kerberoasting做准备:
1.2 端口连接
利用netstat
-ano命令获取机器通信信息,根据通信的端口、ip可以获取到如下信息。如果通信信息是入流量,则可以获取到跳板机/堡垒机、管理员的PC来源IP、本地web应用端口等信息;如果通信信息是出流量,则可以获取到敏感端口(redis、mysql、mssql等)、API端口等信息。
1.3 配置文件
一个正常的Web应用肯定有对应的数据库账号密码信息,是一个不错的宝藏。
可以使用如下命令寻找包含密码字段的文件:
cd /web findstr /s /m “password” .
下面是常用应用的默认配置路径:
a、
Tomcat: CATALINA_HOME/conf/tomcat-users.xml
b、
Apache: /etc/httpd/conf/httpd.conf
c、
Nginx: /etc/nginx/nginx.conf
d、
Wdcp: /www/wdlinux/wdcp/conf/mrpw.conf
e、
Mysql: mysql\data\mysql\user.MYD
1.4 用户信息
可以在网内收集用户等信息,对高权限用户做针对性的攻击,包括定位到域控,对域控发起攻击。
a、查看域用户,普通域用户权限即可:
net user /domain
b、查看域管理员:
net group “domain admins” /domain
c、快速定位域控ip,一般是dns、时间服务器:
net time /domain
nslookup -type=all _ldap._tcp.dc._msdcs.jumbolab.com
d、查看域控制器:
net group “domain controllers” /domain
1.5 内网主机发现
可以使用如下命令来达到内网主机的发现。
a、查看共享资料:
net view
b、查看arp表:
arp -a
c、查看hosts文件:
linux: cat /etc/hosts
windows: type c:\Windows\system32\drivers\etc\hosts
d、查看dns缓存:
ipconfig /displaydns
e、当然,利用一些工具也可以,比如nmap、nbtscan:
1.6 会话收集
在网内收集会话,如看管理员登录过哪些机器、机器被谁登录过,这样攻击的目标就会清晰很多。
可以使用NetSessionEnum api来查看其他主机上有哪些用户登录。
api相关介绍如下:
NetSessionEnum function (lmshare.h) - Win32 apps | Microsoft Learn
利用powershell脚本PowerView为例。
a、可以查看域用户登录过哪些机器:
b、也可以查看机器被哪些用户登陆过:
其他工具、api类似。当有了上述信息后,就可以对发现到的域管或者登录着域管的机器进行攻击,只要能拿下这些机器,就可以有相应的权限去登录域控。
1.7 凭据收集
拿下一台机器后,需要尽可能的收集信息。如下是几个常用软件保存密码的注册表地址,可以根据算法去解密保存的账号密码。
比如远程连接凭据:
cmdkey /list
navicat:
MySQL HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\
MariaDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\
MongoDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Servers\
Microsoft SQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\
Oracle HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\
PostgreSQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\
SQLite HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\
SecureCRT:
xp/win2003
C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions
win7/win2008以上
C:\Users\USERNAME\AppData\Roaming\VanDyke\Config\Sessions
Xshell:
Xshell 5
%userprofile%\Documents\NetSarang\Xshell\Sessions
Xshell 6
%userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions
WinSCP:
HKCU\Software\Martin Prikryl\WinSCP 2\Sessions
VNC:
RealVNC
HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver Password
TightVNC
HKEY_CURRENT_USER\Software\TightVNC\Server Value Password or PasswordViewOnly
TigerVNC
HKEY_LOCAL_USER\Software\TigerVNC\WinVNC4 Password
UltraVNC
C:\Program Files\UltraVNC\ultravnc.ini passwd or passwd2
1.8 DPAPI
DPAPI,由微软从Windows 2000开始发布,称为Data Protection Application Programming
Interface(DPAPI)。其分别提供了加密函数CryptProtectData 与解密函数
CryptUnprotectData 。
其作用范围包括且不限于:
outlook客户端密码
windows credential凭据
chrome保存的密码凭据
internet explorer密码凭据
DPAPI采用的加密类型为对称加密,存放密钥的文件则被称之为Master Key
Files,其路径一般为%APPDATA%\Microsoft\Protect{SID}{GUID}。其中{SID}为用户的安全标识符,{GUID}为主密钥名称。我们可以利用用户的密码/hash或域备份密钥解密主密钥,然后解密被dpapi加密的数据。
相关的介绍如下:
How to: Use Data Protection - .NET | Microsoft Learn
在渗透中,可以利用mimikatz做到自动化的数据解密:
a、解密Chrome密码:
mimikatz dpapi::chrome /in:”%localappdata%\Google\Chrome\User Data\Default\Login Data” /unprotect
b、解密Credential:
mimikatz vault::cred /patch
1.9 域信任
信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理。
查看域信任:
nltest /domain_trusts
上述结果显示child.jumbolab.com和jumbolab.com两个域是双向信任的。
1.10 域传送
当存在域传送漏洞时,可以获取域名解析记录。当有了解析记录后,也能提高对网络环境的进一步认知,比如www解析的ip段可能在dmz区,mail解析的ip段可能在核心区域等等。
windows:
nslookup -type=ns domain.com nslookup sserver dns.domain.com ls domain.com
linux:
dig @dns.domain.com axfr domain.com
1.11 DNS记录获取
在网内收集dns记录,可以快速定位一些机器、网站。常用工具有Dnscmd、PowerView。
a、在windows server上,可以使用Dnscmd工具获取dns记录。
获取dns记录:
Dnscmd . /ZonePrint jumbolab.com
Dnscmd . /EnumRecords jumbolab.com .
b、在非windows server机器上,可以使用PowerView获取。
import-module PowerView.ps1 Get-DNSRecord -ZoneName jumbolab.com
1.12 WIFI
通过如下命令获取连接过的wifi密码:
for /f “skip=9 tokens=1,2 delims=:” %i in (‘netsh wlan show profiles’) do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
1.13 GPP
当分发组策略时,会在域的SYSVOL目录下生成一个gpp配置的xml文件,如果在配置组策略时填入了密码,则其中会存在加密过的账号密码。这些密码,往往都是管理员的密码。
其中xml中的密码是aes加密的,密钥已被微软公开:
[MS-GPPREF]: Password Encryption | Microsoft Learn
可以使用相关脚本进行解密,如:
域用户登录脚本存在目录也会存在敏感文件:
\domain\Netlogon
1.14 Seatbelt
可以利用Seatbelt工具做一些自动化的信息收集,收集的信息很多,包括不限于google历史记录、用户等等:
当有了chrome的访问历史时,就可以知道该用户访问的一些内部站点的域名/IP,可以提高内网资产的摸索效率。
1.15 Bloodhound
我们可以利用Bloodhound做一些自动化的信息收集,包括用户、计算机、组织架构、最快的攻击途径等。但是自动化也意味着告警,该漏洞做自动化信息收集时,会在内网设备上产生大量的告警,按需使用。
执行:
SharpHound.exe -c all
运行完毕会生成一个zip压缩包,名字类似于20200526201154_BloodHound。
导入Bloodhound后可以做可视化分析:
比较常用的就是寻找攻击域控的最快途径了:
如下图,我们知道,如果拿下hand用户后,就可以获取到域控权限:
1.16 Exchange
exchange一般都在域内的核心位置上,包括甚至安装在域控服务器上,因此我们需要多多关注exchange的相关漏洞,如果拿下exchange机器,则域控也不远了。
1.16.1 邮箱用户密码爆破
使用ruler工具对owa接口进行爆破: