网易首页 > 网易号 > 正文 申请入驻

渗透技巧——通过Kerberos pre-auth进行用户枚举和口令爆破

0
分享至

在之前的文章《渗透基础——通过LDAP协议暴力破解域用户的口令》介绍了通过LDAP协议暴力破解域用户口令的方法,最大的特点是会产生日志(4625 - An account failed to log on)

而使用kerbrute通过Kerberos pre-auth进行暴力破解时不会产生日志(4625 - An account failed to log on),于是我对kerbrute做了进一步的研究,使用python实现了相同的功能,并且添加支持TCP协议和NTLM hash的验证。本文将要记录自己的研究过程和学习心得。

·kerbrute的介绍

·kerbrute的原理

·使用python实现kerbrute的细节

·开源代码pyKerbrute

·Kerberos pre-auth bruteforcing的检测

适用场景:从域外对域用户进行用户枚举和口令暴力破解

由于没有域用户的口令,所以无法通过LDAP协议枚举出所有域用户,而且使用LDAP协议进行暴力破解时会产生日志(4625 - An account failed to log on)

使用kerbrute有如下优点:

·使用Kerberos pre-auth bruteforcing的速度更快

·不会产生日志(4625 - An account failed to log on)

注:Kerberos pre-auth对应的端口默认为88

测试环境如下图:

kerbrute使用Go语言开发,github提供了编译好的文件,地址如下:

https://github.com/ropnop/kerbrute/releases

kerbrute主要包括以下两个功能:

1.用户枚举

用来验证用户是否存在,命令如下:

kerbrute_windows_amd64.exe userenum --dc 192.168.1.1 -d test.com user.txt

测试结果如下图:

适用场景:

不掌握域用户的口令,所以无法通过LDAP协议枚举出所有域用户,可以使用这种方式来验证用户是否存在

2.口令验证

在确定了用户存在以后,可以使用这个功能来验证口令是否正确,命令如下:

kerbrute_windows_amd64.exe passwordspray -d test.com user.txt DomainUser123!

测试结果如下图:

如果登录成功,会产生日志(4768 - A Kerberos authentication ticket (TGT) was requested),如下图:

我的想法是实现kerbrute的两个主要功能:用户枚举和口令验证。

通过python实现kerberos协议的部分我参考了pykek。

接下来通过抓包的方式获得kerbrute的数据包内容,然后通过python构造相同的数据包。

kerbrute使用UDP协议实现Kerberos pre-auth,用来对明文口令进行验证。

我在研究的过程中,发现通过TCP协议也能实现相同的功能,而且能够对NTLM hash进行验证。

1.使用python实现用户枚举

使用wireshark抓取kerbrute用户枚举功能产生的数据包。

使用UDP协议,用户枚举时发送的数据包内容如下图:

如果用户存在,返回的数据包内容如下图:

判断标志:error-code: eRR-PREAUTH-REQUIRED (25)

如果用户不存在,返回的数据包内容如图:

判断标志:error-code: eRR-C-PRINCIPAL-UNKNOWN (6)

接下来就是使用python实现发送UDP数据,发送的内容同kerbrute用户枚举时的数据包相同;接收返回内容,通过标志位来判断用户是否存在。

通过TCP协议也能实现相同的功能,只是数据包格式不一样。

TCP数据包前面要加一段字符串pack('>I', len(data))

具体的代码如下:

TCP:

def send_req_tcp(req, kdc, port=88):

data = encode(req)

data = pack('>I', len(data)) + data

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((kdc, port))

sock.send(data)

return sock

def recv_rep_tcp(sock):

data = ''

datalen = None

while True:

rep = sock.recv(8192)

if not rep:

sock.close()

raise IOError('Connection error')

data += rep

if len(rep) >= 4:

if datalen is None:

datalen = unpack('>I', rep[:4])[0]

if len(data) >= 4 + datalen:

sock.close()

return data[4:4 + datalen]

UDP:

def send_req_udp(req, kdc, port=88):

data = encode(req)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.connect((kdc, port))

sock.send(data)

return sock

def recv_rep_udp(sock):

data = ''

datalen = None

while True:

rep = sock.recv(8192)

if not rep:

sock.close()

raise IOError('Connection error')

data += rep

if len(rep) >= 4:

sock.close()

return data

2.使用python实现口令验证

使用wireshark抓取kerbrute口令验证功能产生的数据包。

使用UDP协议,口令验证时发送的数据包内容如图:

相比用户枚举,在口令验证时多了一部分内容(padata)。

具体差异如下:

用户枚举发送的数据包格式如下图:

口令验证发送的数据包格式如下图:

所以在实现上需要添加padata段的内容。

如果口令正确,返回的数据包内容如下图:

如果口令错误,返回的数据包内容如下图:

具体的数据包结构可以参考RFC文档,地址如下:

https://tools.ietf.org/html/rfc1510#page-50

计算padata-value需要先将明文口令转换成NTLM hash再进行计算。

所以说这个位置不仅可以使用明文口令,也可以使用NTLM hash。

部分加密的python代码如下:

使用明文口令:

clearpassword = DomainUser123!

user_key = (RC4_HMAC, ntlm_hash(clearpassword).digest())

pa_ts = build_pa_enc_timestamp(current_time, user_key)

as_req['padata'][0]['padata-value'] = encode(pa_ts)

使用NTLM hash:

ntlmhash = e00045bd566a1b74386f5c1e3612921b

user_key = (RC4_HMAC, ntlmhash.decode('hex'))

pa_ts = build_pa_enc_timestamp(current_time, user_key)

as_req['padata'][0]['padata-value'] = encode(pa_ts)

完整的实现代码已上传至github,地址如下:

https://github.com/3gstudent/pyKerbrute

pyKerbrute是对kerbrute的python实现,相比于kerbrute,多了以下两个功能:

·增加对TCP协议的支持

·增加对NTLM hash的验证

pyKerbrute分为用户枚举和口令验证两个功能。

1.EnumADUser.py

用户枚举功能,支持TCP和UDP协议。

命令实例:

EnumADUser.py 192.168.1.1 test.com user.txt tcp

结果输出如下图:

2.ADPwdSpray.py

口令验证功能,支持TCP和UDP协议,支持明文口令和NTLM hash

命令实例1:

ADPwdSpray.py 192.168.1.1 test.com user.txt clearpassword DomainUser123! tcp

结果输出如下图:

命令实例2:

ADPwdSpray.py 192.168.1.1 test.com user.txt ntlmhash e00045bd566a1b74386f5c1e3612921b udp

结果输出如下图:

Kerbrute使用Kerberos pre-auth协议,不会产生日志(4625 - An account failed to log on)

但是会产生以下日志:

·口令验证成功时产生日志(4768 - A Kerberos authentication ticket (TGT) was requested)

·口令验证失败时产生日志(4771 - Kerberos pre-authentication failed)

本文对kerbrute进行了测试分析,使用python实现了相同的功能,并且添加支持TCP协议和NTLM hash的验证,开源代码,介绍脚本编写的细节,给出Kerberos pre-auth bruteforcing的检测方法。

本文为 3gstudent 原创稿件,授权嘶吼独家发布

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
大爆冷!湖人117-135黄蜂,本场谁是罪魁祸首,数据不会说谎!

大爆冷!湖人117-135黄蜂,本场谁是罪魁祸首,数据不会说谎!

刘哥谈体育
2026-01-16 14:32:46
贾国龙开撕罗永浩的真相

贾国龙开撕罗永浩的真相

首席品牌评论
2026-01-16 23:47:37
帮手全到齐,伊朗导弹库存暴增,中方及时声援,美英连夜通告撤军

帮手全到齐,伊朗导弹库存暴增,中方及时声援,美英连夜通告撤军

回京历史梦
2026-01-15 18:33:08
农村香烟突然卖不动了,这4个原因普遍存在,看看有没有你?

农村香烟突然卖不动了,这4个原因普遍存在,看看有没有你?

文雅笔墨
2026-01-16 12:41:40
罗晋携任素汐去祈福后,唐嫣连发三文表态,婚变传闻终于真相大白

罗晋携任素汐去祈福后,唐嫣连发三文表态,婚变传闻终于真相大白

瓜汁橘长Dr
2025-12-29 11:29:56
活到60岁我才懂:如果女人没有给过你这三样东西,说明她并不爱你

活到60岁我才懂:如果女人没有给过你这三样东西,说明她并不爱你

林林故事揭秘
2025-09-03 14:08:02
”经济学家吴晓求教授说:“老百姓都没收入了,还在刺激消费!这种做法是错误的!

”经济学家吴晓求教授说:“老百姓都没收入了,还在刺激消费!这种做法是错误的!

张晓磊
2025-11-07 11:34:05
“两岸统一”突破点不在马英九,也不在国民党,可能在这个人身上

“两岸统一”突破点不在马英九,也不在国民党,可能在这个人身上

趣文说娱
2026-01-12 17:36:51
油烟直排造成大气污染 北京烤肉刘被罚7000元

油烟直排造成大气污染 北京烤肉刘被罚7000元

信网
2026-01-16 07:16:44
湖北某光伏公司快倒闭了!

湖北某光伏公司快倒闭了!

黯泉
2026-01-16 22:16:46
美媒叹息:中国几百万“剽窃”美国熔盐堆技术,如今技术反超10年

美媒叹息:中国几百万“剽窃”美国熔盐堆技术,如今技术反超10年

牛牛叨史
2026-01-15 02:48:46
北京多场“京味”活动鼓励市民到京郊过年

北京多场“京味”活动鼓励市民到京郊过年

新京报
2026-01-15 18:28:05
重庆一死者被定为三人恶势力成员引争议,曾被检方认定为微罪不诉,发回重审后成黑社会骨干

重庆一死者被定为三人恶势力成员引争议,曾被检方认定为微罪不诉,发回重审后成黑社会骨干

大风新闻
2026-01-16 17:00:04
优质“蛋白质”排行榜!大豆排倒数第1,虾肉才排第4,第一名很多人都不知道

优质“蛋白质”排行榜!大豆排倒数第1,虾肉才排第4,第一名很多人都不知道

美食格物
2025-12-29 16:58:15
上海崇明区政协原党组副书记张荣,被开除党籍!沉迷赌博,大搞权钱交易

上海崇明区政协原党组副书记张荣,被开除党籍!沉迷赌博,大搞权钱交易

上观新闻
2026-01-15 18:24:11
A股:刚刚,中央一部门发声,释放一信号,下周两个关键位定生死

A股:刚刚,中央一部门发声,释放一信号,下周两个关键位定生死

云鹏叙事
2026-01-17 00:00:06
有男生愿意吗?湖南一独生女招上门女婿,给10万彩礼孩子跟女方姓

有男生愿意吗?湖南一独生女招上门女婿,给10万彩礼孩子跟女方姓

唐小糖说情感
2026-01-15 19:32:55
河南省离退休人员超600万,人均养老金能有3000元吗?一起算一下

河南省离退休人员超600万,人均养老金能有3000元吗?一起算一下

暖心人社
2026-01-16 20:41:43
向太太敢说了!向华强今年已经78了,但是她和向华强还有X生活!

向太太敢说了!向华强今年已经78了,但是她和向华强还有X生活!

心静物娱
2025-12-24 11:02:28
台媒指大S离世一年,汪小菲与徐家重开协商,抚养费之争出现转机

台媒指大S离世一年,汪小菲与徐家重开协商,抚养费之争出现转机

手工制作阿歼
2026-01-17 04:56:32
2026-01-17 06:00:49
嘶吼RoarTalk incentive-icons
嘶吼RoarTalk
不一样的互联网安全新视界
8127文章数 10545关注度
往期回顾 全部

科技要闻

贾国龙与罗永浩被禁言,微博CEO回应

头条要闻

罗永浩、贾国龙微博账号均被禁言

头条要闻

罗永浩、贾国龙微博账号均被禁言

体育要闻

全队身价=登贝莱,他们凭什么领跑法甲?

娱乐要闻

李湘翻车,早就有迹可循!

财经要闻

清流|酒店商家在携程和美团之间沦为炮灰

汽车要闻

方程豹品牌销量突破30万辆 2026年还将推出轿跑系列

态度原创

本地
亲子
游戏
艺术
公开课

本地新闻

云游内蒙|黄沙与碧波撞色,乌海天生会“混搭”

亲子要闻

精神科医生:家长的“为你好”也可能对孩子造成创伤

十三年后,《逆战:未来》想为所有逆行者们找回青春"/> 主站 商城 论坛 自运营 登录 注册 十三年后,《逆战:未来》想为所有逆行者们找回青春 廉颇 2...

艺术要闻

齐白石画头毛驴当马卖,卖了1300万,网友:笑喷了!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版