Nedávno jsem tu psal článek o tom, jak se dostat na počítačích k uživatelem uloženým heslům. Tedy k těm, která si uživatel sám uloží pro přistup do sítě, nebo k webovým stránkám apod. Ono to je totiž občas potřeba promazat, pokud máte problémy s Windows ověřováním do NTLM, nebo Kerberos intranetových webů a nebo při správě Exchange serveru. Ale to nešlo o hacking.
A u článku padl dotaz, jak je to s hesly služeb a proč by se neměly používat administrátorské účty k provozování služeb, naplánovaných úloh, nebo třeba IIS AppPool pracovních procesů (mimochodem, český název na application pool je fond aplikací, což je totální nesmysl - když už, tak fond procesů)
Zaprvé, služba nikdy nemusí běžet pod členem doménové skupiny Domain Admins. Služba obvykle ani nemusí běžet ani pod členem lokální Administrators skupiny, což je ale v některých případech opravdu zapotřebí. Pořád se ale jedná jen o lokálního administrátora, nikoliv doménového (tedy nikoliv "celosíťového").
Za druhé, pokud takovou službu někdo hackne, nebo třeba jen pozmění obsah skritpu oné naplánované úlohy, tak má najednou oprávnění daná přesně tím účtem, pod kterým úloha, nebo služba právě pracuje.
A za třetí, jejich hesla jsou uložena v plain-textu.
Scénář
Máme počítač a na něm jsou služby (services.msc), naplánované úlohy (task scheduler) a případně IIS pracovní procesy (IIS application pool, fond aplikací), které běží pod nějakým doménovým uživatelem.
Jsem lokálním administrátorem. Jak zjistím jejich hesla?
Řešení
Jako základní premisu bych uvedl následující. Jestliže se ukládá heslo, ukládá se v plné (plain-text) formě. Ano, hesla v Active Directory, hesla lokálních uživatelů, nebo třeba logon cache verifikátory jsou uloženy pomocí MD4 (a v případě logon cache od Windows Vista už SHA-1) heše. Ale tato hesla musí být uložena v plné formě. Lokální administrátor je tedy musí být schopen zjistit.
Jak zjistím heslo IIS app poolu?
Řekněme, že se váš IIS app pool (fond aplikací) jmenuje například MujAppPool. Potom stačí z příkazové řádky zadat následující příkaz a heslo si prostě přečíst:
%windir%\System32\InetSrv\AppCmd.exe LIST APPPOOL MujAppPool /text:*
Jak zjistím heslo služby, která běží pod nějakým doménovým uživatelem?
Tohle je už trošinku složitější. Hesla služeb (services) jsou v registrech v klíči HKLM\Security\Secrets, kde jsou ale ještě dále skryta (obfuscate). Takže potřebujete trošku lepší nástroj. Stáhněte si Cain & Abel, což je takový hackerský prográmek, ovšem velice účinný.
Potom už stačí jen najít záložku Decoders (první záložka), vybrat na ní položku LSA Secrets a kliknout nahoře na čudlík Plus (Add to list):
Jak zjistím heslo naplánované úlohy, která běží pod nějakým uživatelským účtem?
Operace je podobná, jako v předchozím případě. Jenom musíte v nástroji Cain & Abel zvolit na záložce Decoders položku nazvanou Credential Manager.
A fičink.