内网渗透学习的记录,本篇文章主要以Windows域环境为基础,记录了一些在内网渗透过程中需要知道的一些基本知识点,记录较为简练概括,方便以后自己扩展学习。
工作组是局域网中的一个概念,它是最常见的资源管理模式,简单是因为默认情况下计算机都是采用工作组方式进行资源管理的。将不同的电脑按功能分别列入不同的组中,以方便管理。默认情况下所有计算机都处在名为 WORKGROUP 的工作组中,工作组资源管理模式适合于网络中计算机不多,对管理要求不严格的情况。
工作组是指数台计算机在同一个内网中,在逻辑上都属于工作组,但是在工作组中的机器之间相互没有信任关系,每台机器的账号密码只是保存在自己的SAM文件中。那就意味着如果需要共享资源只能新建一个账号并指定相关资源授予该账号权限才可以完成共享。使得访问资源更有层次化,缺乏管理域控制机制。
在内网渗透过程中,注意:
1、工作组渗透时,多关注一些比如云桌面或杀软控制台等集权的系统,通过拿下这类集权系统控制所有终端。
2、一些服务器区的密码会有很多重复的情况, 所以在打服务器时,多抓密码。
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 中对用户账户的安全管理使用了安全账号管理器 SAM(security account manager)的机制,安全账号管理器对账号的管理是通过安全标识(SID)进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。
安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都是完全不同的。因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原来的权限。
SID即安全标识符,标识用户、组和计算机的唯一号码,当第一次创建用户时,将给网络上的每一个账户发布一个唯一的SID。
Windows2000 中 内部进程引进的是账号的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-用户ID
administrator RID为 500
用于特殊用途,一般不需更修改其杈限
与使用者关联的用户帐户 Administrator(管理员用户)
默认的管理员用户 Guest (来宾用户)默认是禁用的
内网渗透中常用:使用api把guest激活,修改密码,加入管理员组
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。
LocalService 帐户是服务控制管理器使用的预定义本地帐户。 它在本地计算机上具有最低权限,并在网络上提供匿名凭据。 可以在调用CreateService 和ChangeServiceConfig 函数时指定此帐户。 请注意,此帐户没有密码,因此将忽略你在此调用中提供的任何密码信息。
Local Service账户通常可以访问Local Service、Everyone组,还有认证用户有权限访问的资源。
以Local Service账户运行的服务主要有:Alerter、Remote Registry、Smart Card、SSDP,还有WebClient。
Network Service账户具有运行网络服务全新的计算机账户,账户是预设的拥有本机部分权限的本地账户,它能够以计算机的名义访问网络资源,但是他没有Local System 那么多的权限,以这个账户运行的服务会根据实际环境把访问凭据提交给远程的计算机。
Network Service账户通常可以访问Network Service、Everyone组,还有认证用户有权限访问的资源。
以Network Service账户运行的服务主要有:Distributed Transaction Coordinator、DNS Client、Performance Logs and Alerts,还有RPC Locator。
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
用户可以看做一个对象,它有很多的属性
displayname:用户展示的名称
obiectsid:用户的sid
userprincipalname:用户主体名称
samaccountname:sam账号的名称
whencreateds:用户创建时间(入职时间)
pwdlastset:密码最后修改时间(配合组策略,看该公司人员多久强制 重置密码)
lastlogon:用户最后登录时间(可以推断上下班时间)
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组内的成员,具有远程桌面的权限。
通讯组:不能控制对资源对访问,逻辑上将用户归纳,方便发件等
安全组:权限的集合,对组配置权限便于管理
用户帐户控制 (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 等级
完整性级别被设置为中
表现形式是:加入管理员组的用户,他的完整性级别被设置为中,用这个用户打开cmd 不能创建用户;右键用管理员打开cmd,弹出UAC认证框,点击同意,这时的完整性级别为高 ,就可以用来创建用户了。
如下图所示:
普通用户mathidla
一个普通用户的完整性级别:
以管理员权限打开cmd 查看
tips:如果你当前不是管理员组成员,会让你输入管理员凭证
UAC凭证提示:
现在的完整性级别
针对的是内置管理员组
1、进程已经拥有管理权限控制;
2、进程被用户允许通过管理员权限运行
3、未启用UAC
whoami /all
如果Integrity levels为medium integrity代表未过UAC
如果Integrity levels为high integrity代表过了UAC
当一个对象被创建时,系统将为其分配安全描述符,安全描述符包含了该对象的属主对该对象所配置的一些安全属性和策略
安全描述符由4部分组成:
摘:https://www.cnblogs.com/debug-me/p/6942480.html
1、当线程试图使用安全对象时,系统在线程执行进一步操作前执行访问检查的操作。在访问检查中,系统将线程访问权限中访问令牌的安全信息与安全对象的安全描述符进行比较。
2、系统检查对象的DACL,寻找与线程访问令牌中的用户和组SID相对应的ACE。系统检查每一项ACE直至本次访问被允许或者被拒绝或者没有更多的ACE可以去检查。可以想象,ACL可以拥有多个与访问令牌SID向适应的ACE。如果发生这样的情况,访问权限将是这些ACE的相加。例如,如果ACL中的一项ACE赋予一个组读的权限,另一项ACE则赋予这个组中一个成员写的权限,那么这个用户对这个对象拥有读和写的权限
1、无DACL 授予该对象的所有访问权限给任何用户
2、有DACL、无ACE 拒绝对该对象任意访问
1、谁对你有权限
2、允许/拒绝
3、有什么权限:读写执行、对属性读写执行、对特殊属性读写执行
4、是否可以被继承:下属组是否应用
Windows Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除
Access Token分为两种(主令牌、模拟令牌)
用户双击运行一个程序都会拷贝“explorer.exe”的Access Token。
用户注销后系统将会使主令牌切换为模拟令牌不会将令牌清除,只有在重启机器后才会清除。
我们平常所说的Session是指一次终端登录,这里的终端登录是指要有自己的显示器和鼠标键盘等
在XP时代每次终端登录才会创建一个Session
Vista后所有的服务程序都运行在Session0,其他终端会依次运行在session1,session 2...
Logon Session:它包括System登录,网络登录及活动交互登录
System,Local Service, xxx Account
每个Window Station对应一个Logon Session,也就是说通过Window Station,把不同的帐号进行隔离,防止他们相互影响。一个终端登录Session可以有多个Window Station,但只能有一个可交互的活动Window Station,也就是Winsta0
每个Window Station可以创建多个Desktop,我们平时和3个Desktop打交道比较多(WinLogon,Disconnect,Default),他们分别代表登录桌面,屏保桌面和我们工作的桌面。我们也可以自己通过CreateDesktop创建桌面,并通过SwitchDesktcp进行切换
UNC (Universal Naming Convention)
Long UNC
Example:\\?1C:\test\a.exe
如果在Long UNC文件名后面加一个空格,系统对文件名的判断将发生错误
type putty.exe > "\\?C:\test\mimikatz.exe " (这里有个空格)
使的mimikatz.ext 有putty的签名
LSASS是Windows用于实现身份验证,审核策略和其他与安全相关的任务的主要进程
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 没启用
域是计算机网络的一种形式,其中所有用户账户,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。
根域,网络中第一个域,一个域林只有一个根域。
域树,由多个域组合,形成连续的名字空间,比如:test.com、abc.test.com、dd.abc.test.com
域林,一个域林可以有多个域树
Active Directory,活动目录简称AD,是一个基于DNS并以树状的数据结构来组成网络服务存储了有关网络对象的信息,并以此作为基础对目录信息进行合乎逻辑的分层组织,让管理员和用户能够轻松地查找和使用这些信息。通常网域都只有一个,在中型或大型的网络中,域可能会有很多个,或是和其他公司或组织的AD相互链接。
组策略使管理员可以管理Active Directory中的计算机和用户。组策略保存为组策略对象(GPO),然后与诸如站点,域或组织单位(OU)之类的Active Directory对象相关联。组策略可以包括安全选项,注册表项,软件安装以及用于启动和关闭的脚本,并且域成员默认情况下每90分钟刷新组策略设置(对于域控制器,则为5分钟)。这意味着组策略在目标计算机上强制执行配置的设置。
组策略对象(Group Policy Object):链接到OU,Domain或Site(gPLink组策略链接),displayName,gPCFileSysPath(关联的GPO文件)。
组策略容器(GPC):包含 GPO状态和版本信息的活动目录对象,存储在活动目录中。
目录服务 由一个目录服务器+LADP协议组成
特点
1、树状结构,类似文件目录。
2、它是为查询、浏览和搜索而优化的数据库,读性能强,写性能差,不支持事务处理、回滚等复杂功能。
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP,它是基于X.500标准的轻量级目录访问协议。目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
LDAP常用关键字列表:
AD域、目录服务、LDAP的关系
AD域需要用到目录服务,域内信息都存在目录服务中
LDAP支持用户访问目录服务数据库
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
当帐户对远程系统/服务进行身份验证时,将发生网络登录。在网络身份验证期间,可重用凭据不会发送到远程系统。因此,当用户通过网络登录登录到远程系统时,该用户的凭据将不会出现在远程系统上以执行进一步的身份验证。这带来了双跳问题。
IPC$是共享“命名管道”的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通首进行加密数据的交换,从NT/2000开始使用,利用这个连接,连接者可以得到目标主机上的目录结构、用户列表等信息。
IPC空连接
对于NT,在默认安全设置下,借助空连接可以列举目标主机上的用户和共享,访问everyone权限的共享,访问小部分注册表等。在Windows Server 2000及以后作用更小,因为在Windows 2000 和以后版本中默认只有管理员有权从网络访问到注册表。
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