Kerberoast without pre-auth

Kerberoast without pre-auth

简介

常规的kerberoast是在拥有域内用户的权限后,申请TGS票据。通过爆破由service用户密码派生的密钥去尝试解密TGS票据,以此判断是否爆破用户密码成功。但是这一切都以pre-auth为前提,也就是需要用户完成第一次认证,不过由于存在设置了禁用预身份认证的用户,我们可以利用该用户直接执行Kerberoast攻击。

原理

用户在第一次请求TGT的时候其实是制定了服务的名称的,申请的服务就是krbtgt,这也是为什么bloodhound中可以看到kerberoastable用户中有krbtgt。返回给用户的TGT由指定的服务的密钥加密,默认情况下就是krbtgt的密钥,如果我们指定为另外一个服务用户,在我们的例子中是mssql/sql01,那么TGT便是由这个用户的密钥进行加密。这就是利用DONT_REQ_PREAUTH用户执行kerberoast攻击的核心原理。

下面用daiker大佬的工具进行测试,先测试需要预身份认证的用户是否可以利用AS-REQ去执行kerberoast攻击。我们先申请一个常规的tgt

勾选ENCTIMESTAMP、以及etypes中的rc4hmac。注意,上图中sname位的值是krbtgt/lab.local。响应包中可以看到sname值为krbtgt。

接下来修改krbtgt为mssql/sql01,用户sql_svc为mssql/sql01的service用户,再次发送请求。

可以看到票据中的sname已经变成了mssql/sql01,我们将票据导出,然后利用kali进行爆破。利用john的工具kribi2john将票据转换为可以爆破的字符串格式

保存hash到文件,利用hashcat爆破

成功爆破出密码为Welcome01,上图中显示用户名为administrator,但是其实那一部分并不影响爆破结果,真正影响结果的是最后的一大堆hash。这里爆破的实际上是用户sql_svc的密码。

这时候可能就有朋友要说了,这不是脱了裤子放屁吗?确实,如果我已经拥有了域内用户的权限,那么这样做确实很多余。但是如果我没有域内用户的权限,手头只存在一个DONT_REQ_PREAUTH的用户,同时我也知道对方机器的服务,那么实际上是可以利用这个用户执行kerberoast的。

下面我们用禁用了域身份认证的用户ssmith进行测试,同时开启wireshark监听报文。因为这个工具有bug,此类实验会闪退。

由于不需要预认证,所以不需要携带加密的时间戳,但是仍然需要指定加密类型,我选择的是rc4hmac。点击发包,然后成功闪退,可以看到认证成功,返回了票据

修改sname为mssql/sql01,再次发包

查看监听到的报文

sname已经变成了mssql/sql01,将ticket/enc-part复制出来按照特殊的格式处理,即可利用hashcat爆破

格式为

formatted_string = "${{krb5tgs}}${0}$*{1}${2}${3}*${4}${5}".format(encType, userName, domain, spn, cipherText[:32], cipherText[32:])

利用python生成字符串

encType = "23"
userName = "sql_svc"
domain = "lab.local"
spn = "mssql/sql01"
cipherText = "c7b4dd4d7abf9399ce441ea58085f49204f75ba1a49d53aa476fdb4aafb6444ee8103391165f8d32d25d445ffcbb113d8fa9e7db78e0c4d868ca5ff748a27258b4badbdc08d596d264199a1cdf44a89a053502c1213f113e934b2ac17f3e1d5fdfa4ae6fc4b06b54ef2d34d47fe03d9582e4f895c18a9f51ea9ee5204bbf005c1701a398b4b5fee965865f0bd1fc8e523e1f241fefa9284c610542a78023472496856ca0c53ab65c7bcb1e78f707b3132049494bc1e442c86f618673447469c5dfc58e9288bd01e297a3a1781a020c0d5bdea3453eefafda910b5d4bc5b4cde98b02417e3f82dc3125721792b1bec3fd1532027986ab68e19875a793a05ce1da994a79f0a1f7db9921552e6b5b358a70ec40b0925392aed310ebc02b9c25fa7162edb301691cbe085ee9ab4e0317c2260cc5e67502bf8326dece28353ef2b2955a7170354cf038611936709ca551b0c21f5709a1ec14e44105e055f5abf3632b4d85e0e5f354e2efb1ce58bcff2a239bbf6af71e6f67cee1a560addb69a8e4abacfcac18da55e89bd6a7e97bb4b80cf5798cb7b8b95e2f8be911aacb3b63b8202052bfef13835f042658392087c6e50c8d1343f066f686314f0e822b58dd9f0207048662a66b7250623d45b918e277875ea05fbe5794d7ca0d148c8305b8d24804dd64e07cd054b6f3d775d186184fcfef71907329eed2d40b632c640fc15bc78e00a2ebfaf0df86a0dd3d801d01490b7686af12cee6fcd98e108b8f3983b65af39e06a4e33a26c5ab099e8ae24eb38837e619a888dc40982afda6aa4cdccaa2d75dfe8a2232caa7087708d2905e9b6cee2253760fe0c6fb87b7f582cf05ca26ec378756972f19b5b4a1edca4c84405371404e68ae4c88a3f935da5f1c78d60fb297dc9fda48e12e5faf501a9e168247eeae3c17c992c3b57ed3ca241976fb982f2d60b933bdfb28c51ab76f8b9834c106767df3cb599f51be3b19954a2c219520f4abdc36b58618f5ced1b1a698aeddbd2380ee3c79fd358cf4a4f446249dd3468ce90299800c49547b8a20016dd5d08f0f59c15f90b6a844f18f0eab64d5e401684266e32fd2c6689375775c6e0b5efbe9162c913706547ab57dae49138f5855698d044b408594e72092f415ed518171b9720abe4ace213c5f414abe5626f5632b395aa004d247696b0c7fcbdfc0046c9463f52ae012b9ba8bc085ba390329231a8ea32bbba3a282bcc8514d39cf4178eedd60dbd569877973487a184f456f9dc60837d9ddca41e0ec244f42df8d2ed114960555f8f64ea2ff8c593e845550a234dfd96e"
formatted_string = "$krb5tgs${0}$*{1}${2}${3}*${4}${5}".format(encType, userName, domain, spn, cipherText[:32],
                                                               cipherText[32:])
print(formatted_string)

利用hashcat爆破

利用

域内票据玩弄工具Rubeus已经集成了利用DONT_REQ_PREAUTH用户执行kerberoast的功能

0 条评论
某人
表情
可输入 255