一、概述
内网渗透学习的记录,本篇文章主要以Windows域环境为基础,记录了一些在内网渗透过程中需要知道的一些基本知识点,记录较为简练概括,方便以后自己扩展学习。
二、Windows基础
1、windows用户与组
工作组是局域网中的一个概念,它是最常见的资源管理模式,简单是因为默认情况下计算机都是采用工作组方式进行资源管理的。将不同的电脑按功能分别列入不同的组中,以方便管理。默认情况下所有计算机都处在名为 WORKGROUP 的工作组中,工作组资源管理模式适合于网络中计算机不多,对管理要求不严格的情况。
工作组是指数台计算机在同一个内网中,在逻辑上都属于工作组,但是在工作组中的机器之间相互没有信任关系,每台机器的账号密码只是保存在自己的SAM文件中。那就意味着如果需要共享资源只能新建一个账号并指定相关资源授予该账号权限才可以完成共享。使得访问资源更有层次化,缺乏管理域控制机制。
在内网渗透过程中,注意:
1、工作组渗透时,多关注一些比如云桌面或杀软控制台等集权的系统,通过拿下这类集权系统控制所有终端。
2、一些服务器区的密码会有很多重复的情况, 所以在打服务器时,多抓密码。
2、SAM文件
SAM(安全账户管理器),SAM是用来存储Windows操作系统密码的数据库文件,为了避免明文密码泄漏SAM文件中保存的是明文密码经过一系列算法处理过的Hash值,被保存的Hash分为LM Hash、NTLMHash。在用户在本地或远程登陆系统时,会将Hash值与SAM中保存的Hash值进行对比。在后期的Windows系统中,SAM文件中被保存的密码Hash都被密钥SYSKEY加密。SAM文件在磁盘中的位置在C:\window\system32\config\sam
SAM文件在Windows系统启动后被系统锁定,无法进行移动和复制
ntds.dit文件位置: C:\Windows\NTDS\NTDS.dit
Ntds.dit是主要的AD数据库,包括有关域用户,组和组成员身份的信息。它还包括域中所有用户的密码哈希值。为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
system文件位置:C:\Windows\System32\config\SYSTEM
sam文件位置:C:\Windows\System32\config\SAM
SAM-注册表
HKLM\SAM:包含用户密码的NTLMv2哈希值
HKLM\Security:包含缓存的域记录LSA secrets/LSA密钥
HKLM\SYSTEM:包含可用于加密LSA secret和加密SAM数据库的密钥(syskey)
Syskey:用来解密SAM获取Hash
Syskey组成:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro\Lsa 键值
JD、Skew1、GBG和Data中的内容,拼接成syskey
Windows的账户管理方式:
Windows 中对用户账户的安全管理使用了安全账号管理器 SAM(security account manager)的机制,安全账号管理器对账号的管理是通过安全标识(SID)进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。
安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都是完全不同的。因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原来的权限。
3、SID
SID的概念:
SID即安全标识符,标识用户、组和计算机的唯一号码,当第一次创建用户时,将给网络上的每一个账户发布一个唯一的SID。
Windows2000 中 内部进程引进的是账号的SID,而不是用户或组名。
SID的作用
当用户在登陆时,通过验证后,登陆进程会给用户一个访问令牌,该令牌相当于用户访问系统资源的票证,当用户试图访问系统资源时,将访问令牌提供给WindowsNT,然后Windows NT检查 用户试图访问对象上的控制列表(ACL),如果用户被允许访问该对象,Windows NT将会分配给用户适当的访问权限。
在通常的情况下SID是唯一的,他由计算机名、当前时间、当前用户态线程的CPU耗费时间的总和三个参数决定以保证它的唯一性。
S-1-5-21-310440588-250036847-580389505-500
第一项S表示该字符串是SID;
第二项是SID的版本号,对于2000来说,这个就是1;
然后是标志符的颁发机构(identifier authority),对于2000内的帐户,颁发机构就是NT,值是5。
然后表示一系列的子颁发机构,前面几项是标志域的,最后一个标志着域内的帐户和组
- 通常它还有一个SID固定列表,SID表现形式:域SID-用户ID
计算机SID-用户ID
administrator RID为 500
- 500(Administrator)
- 501(Guest)
- 502(Krbtgt)
- 512(Domain Admins)
- 513(Domain Users)
- 515(Domain Computers)
- 516(Domain Controllers)
- 519(Enterprise Admins)
4、Windows默认账户
用于特殊用途,一般不需更修改其杈限
与使用者关联的用户帐户 Administrator(管理员用户)
默认的管理员用户 Guest (来宾用户)默认是禁用的
内网渗透中常用:使用api把guest激活,修改密码,加入管理员组
5、Windows内置用户
Local System(NT AUTHORITY\System)
LocalSystem 帐户是服务控制管理器使用的预定义本地账户,是预设的拥有本机所有权限的本地账户。 安全子系统无法识别此帐户,因此无法在对LookupAccountName 函数的调用中指定其名称。
该账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证,这个账户可以打开注册表HKEY_LOCAL_MACHINE\Security键,当Local System 访问网络资源时,他是作为计算机的域账户使用。
以LocalSystem账户运行的服务主要有:WindowsUpdate Client、 Clipbook、Com+、DHCP Client、Messenger Service、Task Scheduler、Server Service、Workstation Service,还有Windows Installer。
Local Service(NT AUTHORITY\Local Service)
LocalService 帐户是服务控制管理器使用的预定义本地帐户。 它在本地计算机上具有最低权限,并在网络上提供匿名凭据。 可以在调用CreateService 和ChangeServiceConfig 函数时指定此帐户。 请注意,此帐户没有密码,因此将忽略你在此调用中提供的任何密码信息。
Local Service账户通常可以访问Local Service、Everyone组,还有认证用户有权限访问的资源。
以Local Service账户运行的服务主要有:Alerter、Remote Registry、Smart Card、SSDP,还有WebClient。
Network Service(NT AUTHRITY\Network Service)
Network Service账户具有运行网络服务全新的计算机账户,账户是预设的拥有本机部分权限的本地账户,它能够以计算机的名义访问网络资源,但是他没有Local System 那么多的权限,以这个账户运行的服务会根据实际环境把访问凭据提交给远程的计算机。
Network Service账户通常可以访问Network Service、Everyone组,还有认证用户有权限访问的资源。
以Network Service账户运行的服务主要有:Distributed Transaction Coordinator、DNS Client、Performance Logs and Alerts,还有RPC Locator。
TrustedInstaller
TrustedInstaller是一个虚拟账户,比Administrator权限要大
TrustedInstaller.exe是Windows 11/10/8/7中的Windows模块安装程序服务的一个进程。它的主要功能是启用 Windows 更新和可选系统组件的安装、删除和修改。无论您使用的是 Windows 11 还是 Windows 10,TrustedInstaller 在所有平台上的工作方式都相同。
TrustedInstaller是从Windows Vista开始出现的一个内置安全主体,在Windows中拥有修改系统文件权限,本身是一个服务,以一个账户组的形式出现。它的全名是:NT SERVICE\TrustedInstaller。这个安全主体本身是一个服务,名称为:Windows Modules Installer文件路径 C:\Windows\servicing\TrustedInstaller.exe
怎样验证是否又这个权限:
看是否能读取 c:\Windows\servicing
6、Windows用户属性
用户可以看做一个对象,它有很多的属性
displayname:用户展示的名称
obiectsid:用户的sid
userprincipalname:用户主体名称
samaccountname:sam账号的名称
whencreateds:用户创建时间(入职时间)
pwdlastset:密码最后修改时间(配合组策略,看该公司人员多久强制 重置密码)
lastlogon:用户最后登录时间(可以推断上下班时间)
7、Windows内置组
Administrators
administators 组内的用户,都具备系统管理员的权限,它们拥有对这台计算机最大的控制权限,可以执行整台计算机的管理任务。内置的系统管理员账号 Administrator 就是本地组的成员,而且无法将它从该组删除。如果这台计算机已加入域,则域的Domain Admins 会自动地加入到该计算机的Administrators组内。也就是说,域上的系统管理员在这台计算机上也具备着系统管理员的权限。
Guests
Guests 组是提供给没有用户账户,但是需要访问本地计算机内资源的用户使用,该组的成员无法永久地改变其桌面的工作环境。
Users
Users 组内的成员只拥有一些基本的权利,例如运行应用程序,但是他们不能修改操作系统的设置、不能更改其它用户的数据、不能关闭服务器级的计算机。所有添加的本地用户帐户者自动属于Users组。如果这台计算机已经加入域,则域的Domain Users会自动地被加入到该计算机的Users组中。
Power Users
Power Users 组内的用户具备比Users组更多的权利,但是比Administrators组拥有的权利更少一些例如,可以: 创建、删除、更改本地用户帐户,创建、删除、管理本地计算机内的共享文件夹与共享打印机:自定义系统设置,例如更改计算机时间、关闭计算机等。但是不可以更改Administrators,无法夺取文件的所有权、无法备份与还原文件、无法安装删除与删除设备驱动程序、无法管理安全与审核日志。
Remote Desktop Users(远程桌面组)
Remote Desktop Users 组内的成员拥有远程桌面登录的权限。默认Administrators组内的成员,具有远程桌面的权限。
8、windows组
通讯组:不能控制对资源对访问,逻辑上将用户归纳,方便发件等
安全组:权限的集合,对组配置权限便于管理
9、UAC
用户帐户控制 (User Account Control)
用户帐户控制 (User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为 “恶意软件” )损坏系统的效果。
通知用户是否对应用程序使用硬盘驱动器和系统文件授权(点击应用时,弹出一个 小窗,确认授权)
1、信息项中主要是Integrity levels (IL)【进程完整性级别不同】
标准用户是Medium Mandatory Level, UAC用户是High Mandatory Level,它包括
Untrust
Low
Medium
Hight
System 等,
级别越低,权限也就越低。我们可以通过GetTokenlnformation的TokenintegrityLevel来进行查询
2.体现在Privilege中的就是UAC用户拥有很多Privilege, 比如最常用的SeDebugPrivilege
whoami /all 可以查看 Integrity levels 等级
已过滤的管理员令牌
- UAC也使用受限制的令牌来创建已过滤的管理员令牌
- 特征:
完整性级别被设置为中
表现形式是:加入管理员组的用户,他的完整性级别被设置为中,用这个用户打开cmd 不能创建用户;右键用管理员打开cmd,弹出UAC认证框,点击同意,这时的完整性级别为高 ,就可以用来创建用户了。
如下图所示:
普通用户mathidla
一个普通用户的完整性级别:
以管理员权限打开cmd 查看
tips:如果你当前不是管理员组成员,会让你输入管理员凭证
UAC凭证提示:
现在的完整性级别
UAC 限制的原因
针对的是内置管理员组
- Filtered Token
- 中完整性(medium integrity):被剔除了管理员权限及SID
- Elevated Token (用户通过UAC认证或输入正确的凭证后)
如何获取管理员权限
1、进程已经拥有管理权限控制;
2、进程被用户允许通过管理员权限运行
3、未启用UAC
UAC选项
- 一律通知
- 可能是最安全的设置。如果选择此选项,它将在您对系统进行更改(例如安装软件程序) 或直接更改Windows设置时通知您。显示UAC提示时,其他任务将被冻结,直到您做出响应。
- 仅在程序尝试对计算机进行更改时通知我
- 此设置与第一个相似。它会在安装软件程序时发出通知,井特冻结所有其他任务,直到您响应提示为止。但是,当您尝试修改系统更改时,它不会通知您。
- 仅在程序尝试对计算机进行更改时通知我
- 顾名思义,它与上面的相同。但是,当出现UAC同意提示时,系统上的其他任务特不会冻结。
- 永不通知(禁用UAC)
- 我认为此设置的作用很明显。它禁用用户访问控制。
UAC 实现方法(用户登陆过程)
- 标准用户
- Windows 会给用户分配一个标准 Access Token
- 内置管理员组权限登陆
- 完整的管理员访问令牌 (Full Access Token)
- 标准用户令牌(启动exe)
- 检测方法
whoami /all
如果Integrity levels为medium integrity代表未过UAC
如果Integrity levels为high integrity代表过了UAC
10、安全描述符(Security Descriptor)
当一个对象被创建时,系统将为其分配安全描述符,安全描述符包含了该对象的属主对该对象所配置的一些安全属性和策略
安全描述符由4部分组成:
- SID(标识该对象拥有的SID)
- DACL(该对象的访问控制策略)
- SACL(该对象的访问行为的审计策略)
- Flag(其他标志位信息)
11、ACL
摘:https://www.cnblogs.com/debug-me/p/6942480.html
1、当线程试图使用安全对象时,系统在线程执行进一步操作前执行访问检查的操作。在访问检查中,系统将线程访问权限中访问令牌的安全信息与安全对象的安全描述符进行比较。
- 访问令牌中包含安全标识符SID,标识线程相对应的用户
- 安全描述符用于识别对象的所有者,包含一个自主访问控制列表DACL。DACL包含ACE,每一项指定了允许或者拒绝访问的特定用户或者组
2、系统检查对象的DACL,寻找与线程访问令牌中的用户和组SID相对应的ACE。系统检查每一项ACE直至本次访问被允许或者被拒绝或者没有更多的ACE可以去检查。可以想象,ACL可以拥有多个与访问令牌SID向适应的ACE。如果发生这样的情况,访问权限将是这些ACE的相加。例如,如果ACL中的一项ACE赋予一个组读的权限,另一项ACE则赋予这个组中一个成员写的权限,那么这个用户对这个对象拥有读和写的权限
- ACL(访问控制列表):是否可以访问
- DACL:用来标志某个安全对象允许被哪些对象访问
1、无DACL 授予该对象的所有访问权限给任何用户
2、有DACL、无ACE 拒绝对该对象任意访问
- SACL:该对象上的存取方式(读、写、执行)列表
- ACE:ACL的每一项
1、谁对你有权限
2、允许/拒绝
3、有什么权限:读写执行、对属性读写执行、对特殊属性读写执行
4、是否可以被继承:下属组是否应用
12、Windows Access Token
Windows Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除
Access Token分为两种(主令牌、模拟令牌)
- 主令牌(Primary token):交互式会话登陆(例:本地用户登陆、用户桌面等)
- 模拟令牌(lmpersonation token):非交互式登陆(例:net use 访问共享文件)
用户双击运行一个程序都会拷贝“explorer.exe”的Access Token。
用户注销后系统将会使主令牌切换为模拟令牌不会将令牌清除,只有在重启机器后才会清除。
13、Session
我们平常所说的Session是指一次终端登录,这里的终端登录是指要有自己的显示器和鼠标键盘等
- 本地登录
- 远程登录
在XP时代每次终端登录才会创建一个Session
Vista后所有的服务程序都运行在Session0,其他终端会依次运行在session1,session 2...
Logon Session:它包括System登录,网络登录及活动交互登录
System,Local Service, xxx Account
14、Windows Station
- Window Station:
每个Window Station对应一个Logon Session,也就是说通过Window Station,把不同的帐号进行隔离,防止他们相互影响。一个终端登录Session可以有多个Window Station,但只能有一个可交互的活动Window Station,也就是Winsta0
- Desktop
每个Window Station可以创建多个Desktop,我们平时和3个Desktop打交道比较多(WinLogon,Disconnect,Default),他们分别代表登录桌面,屏保桌面和我们工作的桌面。我们也可以自己通过CreateDesktop创建桌面,并通过SwitchDesktcp进行切换
15、UNC
UNC (Universal Naming Convention)
- 通用命名规则,可用来表示Windows系统中文件的位置
- 一个路径,指定在一个独特的位置的文件系统
- 常见的定界字符是斜杠(“/”),反斜杠字符(“\”)或冒号(“:”)’
- 资源可以用绝对路径或相对路径表示
Long UNC
Long UNC
- 正常UNC支持的最大长度为260字符
- 为了支持更长的字符,引入了LongUNC,支持最大长度为32767
- 特殊Long UNC的文件能够欺骗系统,将其识别为另一个文件(同名多文件)
Example:\\?1C:\test\a.exe
如果在Long UNC文件名后面加一个空格,系统对文件名的判断将发生错误
type putty.exe > "\\?C:\test\mimikatz.exe " (这里有个空格)
使的mimikatz.ext 有putty的签名
16、LSASS (本地安全机构子系统服务)
LSASS是Windows用于实现身份验证,审核策略和其他与安全相关的任务的主要进程
- 本地安全机构(LSA)组件:负责处理用户身份验证,由Winlogon调用,通过加载安全支持提供程序(SSP)和身份验证包(AP)进行身份验证
- 安全帐户管理器(SAM)组件:提供有关用户和组的信息,并存储本地帐户的NTLM密码哈希
17、Hash
Windows系统为了保证用户明文密码不会被泄漏,将明文密码转换为Hash值进行身份验证,被保存在SAM或ntds.dit(域中存储类似SAM的文件)中
Hash背景
1、LM Hash,在早期的Windows操作系统中将明文密码转换为LM Hash保存在SAM文件中,因为LM Hash使用DES加密,密钥为硬编码,算法又存在缺陷,所以被废弃,为了保证系统兼容性可以自行开启。
2、NTLM Hash,在LM Hash算法被弃用时,NTLM Hash被用来进行Windows本地及远程身份验证的凭据,长度为32bit、由数字和字母组成。
aad3 表示 LMhash 没启用
18、域
域是计算机网络的一种形式,其中所有用户账户,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。
根域,网络中第一个域,一个域林只有一个根域。
域树,由多个域组合,形成连续的名字空间,比如:test.com、abc.test.com、dd.abc.test.com
域林,一个域林可以有多个域树
19、Active Directory
Active Directory,活动目录简称AD,是一个基于DNS并以树状的数据结构来组成网络服务存储了有关网络对象的信息,并以此作为基础对目录信息进行合乎逻辑的分层组织,让管理员和用户能够轻松地查找和使用这些信息。通常网域都只有一个,在中型或大型的网络中,域可能会有很多个,或是和其他公司或组织的AD相互链接。
20、组策略
组策略使管理员可以管理Active Directory中的计算机和用户。组策略保存为组策略对象(GPO),然后与诸如站点,域或组织单位(OU)之类的Active Directory对象相关联。组策略可以包括安全选项,注册表项,软件安装以及用于启动和关闭的脚本,并且域成员默认情况下每90分钟刷新组策略设置(对于域控制器,则为5分钟)。这意味着组策略在目标计算机上强制执行配置的设置。
组策略对象(Group Policy Object):链接到OU,Domain或Site(gPLink组策略链接),displayName,gPCFileSysPath(关联的GPO文件)。
组策略容器(GPC):包含 GPO状态和版本信息的活动目录对象,存储在活动目录中。
21、目录服务
目录服务 由一个目录服务器+LADP协议组成
特点
1、树状结构,类似文件目录。
2、它是为查询、浏览和搜索而优化的数据库,读性能强,写性能差,不支持事务处理、回滚等复杂功能。
22、LDAP
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP,它是基于X.500标准的轻量级目录访问协议。目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
LDAP常用关键字列表:
AD域、目录服务、LDAP的关系
AD域需要用到目录服务,域内信息都存在目录服务中
LDAP支持用户访问目录服务数据库
23、SMB
SMB(Server Message Block)被称为服务器消息块,又叫网络文件共享系统(CIFS)。它作为一种应用层协议,在Windows 2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。
主要功能:
服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件、打印机、串口等。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。
详细参考:https://blog.csdn.net/sunjiaoya/article/details/139478491
24、Network Logon (Type3 )
当帐户对远程系统/服务进行身份验证时,将发生网络登录。在网络身份验证期间,可重用凭据不会发送到远程系统。因此,当用户通过网络登录登录到远程系统时,该用户的凭据将不会出现在远程系统上以执行进一步的身份验证。这带来了双跳问题。
25、IPC (进程间通信)
IPC$是共享“命名管道”的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通首进行加密数据的交换,从NT/2000开始使用,利用这个连接,连接者可以得到目标主机上的目录结构、用户列表等信息。
- IPC$在同一时间内,两个IP之间只允许建立一个连接
- dir、copy、xcopy、move、type等参数都可以使用 UNC 路径
- NT/2000操作系统及以上在提供了pc$功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(c、d、e$……)和系统目录winnt或管理员目录(admin$)共享。
IPC空连接
对于NT,在默认安全设置下,借助空连接可以列举目标主机上的用户和共享,访问everyone权限的共享,访问小部分注册表等。在Windows Server 2000及以后作用更小,因为在Windows 2000 和以后版本中默认只有管理员有权从网络访问到注册表。
26、WMI
WMI由一系列对Windows Driver Model的扩展组成,它通过仪器组件提供信息和通知,提供了一个操作系统的接口。在渗透测试过程中,攻击者往往使用脚本通过WMI接口完成对Windows操作系统的操作,远程WMI连接通过DCOM进行。例如:WMIC、Invoke-WmiCommand、Invoke-WMIMethod等。另一种方法是使用Windows远程管理(WinRM)。
使用wmic识别安装到系统中的补丁情况
wmic qfe get description,installedOn
识别开机启动程序,包括路径
wmic startup list full
查看系统中网卡的IP地址和MAC地址
wmic nicconfig get ipaddress,macaddress
用户列表
wmic useraccount list brief
查看当前用户是否有屏保,延迟是多少
wmic desktop get screensaversecure,screensa
域控机器
wmic ntdomain list brief
登陆用户
wmic logon list brief
查看系统中开放的共享
wmic share get name,path
net share
查看系统开启的日志
wmic nteventlog get path,filename,writeable
查看系统中安装的软件及其版本
wmic product get name,version
服务列表
wmic service list brief | more
查看某个进程的详细信息(路径,命令行参数等)
wmic process where "ProcessId=6456" get ProcessId,Name,ExecutablePath,CommandLine