为研究针对ADFS的NTLM重放攻击而开发的POC工具

项目地址

https://github.com/praetorian-inc/ADFSRelay

概述

此存储库包括两个实用程序 NTLMParse 和 ADFSRelay。 NTLMParse 是一种实用程序,用于解码 base64 编码的 NTLM 消息并打印有关消息中的基础属性和字段的信息。 在研究特定 NTLM 实现的行为时,检查这些 NTLM 消息很有帮助。 ADFSRelay 是在研究针对 ADFS 服务的 NTLM 中继攻击的可行性时开发的概念验证实用程序。 此实用程序可用于执行针对 ADFS 的 NTLM 中继攻击。 我们还发布了一篇更详细地讨论 ADFS 中继攻击的博文 [1]。

NTLMParse 用法

要使用 NTLMParse 实用程序,您只需将 Base64 编码的消息传递给应用程序,它就会解码消息中的相关字段和结构。 下面给出的代码片段显示了调用 NTLMParse 时的预期输出:

➜  ~ pbpaste | NTLMParse
(ntlm.AUTHENTICATE_MESSAGE) {
 Signature: ([]uint8) (len=8 cap=585) {
  00000000  4e 54 4c 4d 53 53 50 00                           |NTLMSSP.|
 },
 MessageType: (uint32) 3,
 LmChallengeResponseFields: (struct { LmChallengeResponseLen uint16; LmChallengeResponseMaxLen uint16; LmChallengeResponseBufferOffset uint32; LmChallengeResponse []uint8 }) {
  LmChallengeResponseLen: (uint16) 24,
  LmChallengeResponseMaxLen: (uint16) 24,
  LmChallengeResponseBufferOffset: (uint32) 160,
  LmChallengeResponse: ([]uint8) (len=24 cap=425) {
   00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
   00000010  00 00 00 00 00 00 00 00                           |........|
  }
 },
 NtChallengeResponseFields: (struct { NtChallengeResponseLen uint16; NtChallengeResponseMaxLen uint16; NtChallengeResponseBufferOffset uint32; NtChallengeResponse []uint8; NTLMv2Response ntlm.NTLMv2_RESPONSE }) {
  NtChallengeResponseLen: (uint16) 384,
  NtChallengeResponseMaxLen: (uint16) 384,
  NtChallengeResponseBufferOffset: (uint32) 184,
  NtChallengeResponse: ([]uint8) (len=384 cap=401) {
   00000000  30 eb 30 1f ab 4f 37 4d  79 59 28 73 38 51 19 3b  |0.0..O7MyY(s8Q.;|
   00000010  01 01 00 00 00 00 00 00  89 5f 6d 5c c8 72 d8 01  |........._m\.r..|
   00000020  c9 74 65 45 b9 dd f7 35  00 00 00 00 02 00 0e 00  |.teE...5........|
   00000030  43 00 4f 00 4e 00 54 00  4f 00 53 00 4f 00 01 00  |C.O.N.T.O.S.O...|
   00000040  1e 00 57 00 49 00 4e 00  2d 00 46 00 43 00 47 00  |..W.I.N.-.F.C.G.|

以下是可用于测试的示例 NTLM AUTHENTICATE_MESSAGE 消息:

TlRMTVNTUAADAAAAGAAYAKAAAACAAYABuAAAABoAGgBYAAAAEAAQAHIAAAAeAB4AggAAABAAEAA4AgAAFYKI4goAYUoAAAAPqfU7N7/JSXVfIdKvlIvcQkMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwAQQBDAHIAbwBzAHMAZQByAEQARQBTAEsAVABPAFAALQBOAEkARAA0ADQANQBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDrMB+rTzdNeVkoczhRGTsBAQAAAAAAAIlfbVzIctgByXRlRbnd9zUAAAAAAgAOAEMATwBOAFQATwBTAE8AAQAeAFcASQBOAC0ARgBDAEcAVQA0AEcASABPADAAOAA0AAQAGgBDAE8ATgBUAE8AUwBPAC4ATABPAEMAQQBMAAMAOgBXAEkATgAtAEYAQwBHAFUANABHAEgATwAwADgANAAuAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABQAaAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABwAIAIlfbVzIctgBBgAEAAIAAAAIADAAMAAAAAAAAAABAAAAACAAABQaOHb4nG5F2JL1tA5kL+nKQXJSJLDWljeBv+/XlPXpCgAQAON+EDXYnla0bjpwA8gfVEgJAD4ASABUAFQAUAAvAHMAdABzAC4AYwBvAG4AdABvAHMAbwBjAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBjAG8AbQAAAAAAAAAAAKDXom0m65knt1NeZF1ZxxQ=

ADFSRelay 用法

ADFSRelay 的唯一必需参数是要作为 NTLM 中继攻击目标的 ADFS 服务器的 URL。 三个可选参数是 -debug 用于启用调试模式,-port 用于定义服务应侦听的端口,以及 -help 用于显示帮助菜单。 下面给出了一个示例帮助菜单:

➜  ~ ADFSRelay -h
Usage of ADFSRelay:
  -debug
        Enables debug output
  -help
        Show the help menu
  -port int
        The port the HTTP listener should listen on (default 8080)
  -targetSite string
        The ADFS site to target for the relaying attack (e.g. https://sts.contoso.com)
➜  ~

参考

[1] https://www.praetorian.com/blog/relaying-to-adfs-attacks/

请登录后发表评论

    没有回复内容