()
| 7913 | 'krb-downgrade': ['bg-red-950/60 border-red-800 text-red-300', '🛑 KERBEROS DOWNGRADE — a DES/RC4 ticket issued or AES stripped from a client'], |
| 7914 | 'spoof-conflict': ['bg-red-950/60 border-red-800 text-red-300', '🛑 Conflicting name answers — a poisoner racing the real owner'], |
| 7915 | 'smbv1-active': ['bg-red-950/60 border-red-800 text-red-300', '🛑 SMBv1 in active use — EternalBlue/WannaCry (MS17-010) vector'], |
| 7916 | poisoning: ['bg-red-950/60 border-red-800 text-red-300', '🛑 NAME POISONING — a host is answering LLMNR/NBT-NS (Responder/Inveigh)'], |
| 7917 | 'asrep-roast': ['bg-red-950/60 border-red-800 text-red-300', '🛑 AS-REP ROASTING — a Kerberos account with no pre-auth (offline-crackable hash)'], |
| 7918 | kerberoast: ['bg-red-950/60 border-red-800 text-red-300', '🛑 KERBEROASTING — a TGS-REQ forcing RC4 on a service SPN (crackable service ticket)'], |
| 7919 | unknown: ['bg-slate-800 border-slate-700 text-slate-400', '— Could not determine'], |
| 7920 | }; |
| 7921 | const _KRB_FINDING_STYLE = { |
| 7922 | kerberoast: 'text-red-300', |
| 7923 | 'asrep-roast': 'text-red-300', |
| 7924 | downgrade: 'text-red-300', |
| 7925 | 'weak-etype': 'text-amber-300', |
| 7926 | }; |
| 7927 | function _smbFillIfaces() { |
| 7928 | const sel = document.getElementById('smb-iface'); |
| 7929 | if (!sel || sel.dataset.filled === '1') return Promise.resolve(); |
| 7930 | return fetchAPI('/api/net/interfaces').then(x => { |
| 7931 | (x.interfaces || []).forEach(i => { |
| 7932 | const o = document.createElement('option'); |
| 7933 | o.value = i.name; |
| 7934 | const tag = i.type === 'wifi' ? ' (WiFi)' : i.type === 'ethernet' ? ' (LAN)' : (i.type ? ' (' + i.type + ')' : ''); |
| 7935 | o.textContent = i.name + tag; |
| 7936 | sel.appendChild(o); |
| 7937 | }); |
| 7938 | sel.dataset.filled = '1'; |
| 7939 | }).catch(() => {}); |
| 7940 | } |
| 7941 | async function runSmbWatch() { |
| 7942 | const out = document.getElementById('smb-results'); |
| 7943 | if (!out) return; |
| 7944 | const btn = (typeof event !== 'undefined' && event && event.target) ? event.target : null; |
| 7945 | const ifaceSel = document.getElementById('smb-iface'); |
| 7946 | const iface = ifaceSel && ifaceSel.value ? ifaceSel.value : ''; |
| 7947 | const secsEl = document.getElementById('smb-secs'); |
| 7948 | const secs = secsEl && secsEl.value ? secsEl.value : '20'; |
| 7949 | _ndBusy(btn, true, 'Listening…'); |
| 7950 | out.classList.remove('hidden'); |
| 7951 | out.innerHTML = '<p class="text-sm text-gray-400">Passively capturing SMB + LLMNR/NBT-NS/mDNS…</p>'; |
| 7952 | try { |
no test coverage detected