Zpět na seznam článků     Číst komentáře (2)     Verze pro tisk

Enumerace souborů s krátkým názvem na IIS

Autor: .cCuMiNn.   
21.9.2016

Webový server IIS od Microsoftu trpí již od své páté verze zranitelností Microsoft IIS tilde vulnerability, která útočníkům umožňuje enumerovat názvy složek a souborů uložených na zranitelném serveru. Umožňuje ale i jiné věci.


Zranitelnost, o které je řeč, neumožňuje zjistit názvy úplně všech souborů v dané složce, ale pouze těch, které jsou uloženy společně se svým zkráceným názvem používaným v dobách DOSu, tedy ve formátu 8.3 (8 znaků pro název souboru a 3 znaky pro jeho příponu). Přestože moderní Windows umožňují ukládat názvy souborů dlouhé až 255 znaků, stále v nich zůstává kvůli zpětné kompatibilitě implicitně nastaveno také ukládání jmen souborů v jejich krátkém tvaru. Soubory, jejichž názvy se do této velikosti vejdou, krátký název uložen nemají a není možné je popsanou metodou enumerovat. Ovšem vzhledem k tomu, že na IIS jsou hostovány nejčastěji dotnetové soubory s koncovkou .aspx, která má 4 znaky, máme poměrně slušnou naději, že nám tilda enumerace poskytne dat více než dost.

Výpis složky po zadání příkazu DIR /X

Jak se tvoří krátké názvy souborů

Windows generuje krátké názvy z dlouhých následujícím způsobem:

  • Z názvu souboru jsou odstraněny speciální znaky a mezery: . " / \ [ ] : ; = ,
  • Za příponu je brána do úvahy pouze část za poslední tečkou. VeliceDlouhy_nazevSouboru.123.456.789.txt => THISIS~1.TXT
  • Pokud je posledním znakem v názvu souboru tečka, je tato ignorována This is a really long filename.123.456.789. => THISIS~1.789
  • Windows zkrátí název souboru bez přípony na 6 znaků, přidá za něj znak tildy (~) a číslici "~1." Pokud by došlo ke vzniku názvu, který již existuje, použijí se další číslovky "~2," "~3,".
  • Windows zkrátí délku přípony na 3 znaky.
  • Všechna písmena ve vzniklém názvu jsou převedena na velká.
  • Windows vytváří krátký název souboru i v tom případě, kdy původní název byl kratší než 8 znaků, ale obsahoval mezery. A file.doc => AFILE~1.DOC

Jak funguje IIS tilde enumerace

Nyní už vás možná zajímá, jak vlastně funguje samotná Tilde enumerace? Celý útok je založen na možnosti přístupu k souborům skrze názvy souborů obsahující wild cards (znaky * a ?), nebo-li hvězdičkovou notaci. Například: http://www.example.cz/soub*.*. Pro dlouhé názvy souborů podobné přístupy fungovat nebudou, kdežto při použití krátkých (8.3) názvů, kdy ve svém výrazu použijeme tildu následovanou číslicí, bude server vracet rozdílné výsledky v případě, kdy soubor existuje, a když ne.

Víme, že krátké názvy souborů obsahují vždy znak tilda ~ následovaný číslicí, např. dlouhý název default.aspx by byl ve zkrácené podobě zapsán jako DEFAUL~1.ASP. V hvězdičkové notaci by tento soubor odpovídal zápisu: *~1.* (tedy cokoliv před tildou, pak tilda, jednička, tečka a cokoliv za tečkou). Budeme-li chtít zjistit, zda nějaký soubor na serveru odpovídá uvedenému zápisu s wild cards, zkusíme navštívit adresu:

http://www.example.cz/*~1.*/.aspx

Ptáte se, proč je na konec přidaná koncovka .aspx? Důvod je prostý, aby byl požadavek předán ke zpracování dot netu. V případě, kdy je webový server zranitelný, vrátí nám jiný výsledek (status kód 404) v případě, kdy soubor existuje a jiný výsledek (status kód 400), pokud soubor neexistuje. Abychom tedy byli schopni rozpoznat, zda je server na tilda enumeraci náchylný, musíme ještě otestovat, nějaký jiný výraz, jemuž určitě nebude žádný soubor na serveru odpovídat, např. qwxqwx~9.qwx, tedy

http://www.example.com/qwxqwx~9.qwx/.aspx

Prvnímu odkazu tedy bude odpovídat libovolný soubor se zkráceným zápisem, který bude v daném adresáři nalezen, kdežto druhému odkazu žádný. Porovnání výsledků nám dá odpověď na to, zda je server zranitelný, či nikoliv.

Jakým způsobem je tedy možné enumerovat soubory uložené na serveru? Jednoduše se budeme ptát, zda existuje soubor, který začíná znakem “a”. Pokud ne, zeptáme se, zda existuje soubor začínající na “b”, atd.

Zjištění prvního znaku
http://www.example.cz/a*~1.*/.aspx
http://www.example.cz/b*~1.*/.aspx
http://www.example.cz/c*~1.*/.aspx

V případě, že nějaký takový soubor existuje můžeme se hned ptát na to, zda existuje soubor, jehož první dva znaky jsou “ba”, pak “bb”, “bc” a tak dale, až do odhalení druhého znaku. Podobně bychom našli také třetí až poslední znak zkráceného názvu všech souborů v dané složce.

Zjištění druhého znaku
http://www.example.cz/ba*~1.*/.aspx
http://www.example.cz/bb*~1.*/.aspx
http://www.example.cz/bc*~1.*/.aspx

Ve chvíli, kdy máte k dispozici zkrácený název souboru, nemáte ještě vyhráno, protože pouze se znalostí krátkého názvu k souboru přistoupit nemůžete.

Se zkráceným názvem se k souboru nedostanete
http://www.example.com/dbconn~1.inc

Musíte tedy najít odpovídající dlouhý název souboru. Ten můžete buďto odhadnout, nebo jej můžete získat za pomoci hrubé síly, nebo slovníku. V tomto nám mohou být nápomocny například nástroje Burp Suite či DirBuster. Mnohdy ale stačí se pouze zeptat Googlu, který zná odpověď na vše, a tedy možná i na to, jaký je dlouhý název pro hledanou zkrácenou verzi.

Ve chvíli, kdy správně určíte dlouhý název souboru a budete mít práva pro jeho zobrazení, nic Vám již nebrání v zobrazení jeho obsahu.

S dlouhým názvem už je to jiná pohádka
http://www.example.com/dbconnect.inc

Tento útok projde také Basic a Windows autentizací. Přestože by v jiných případech bylo pro zjištění obsahu takto chráněné složky potřeba znát přístupové údaje, v případě Tilde enumerace tomu tak není.

Zranitelnost nebo vlastnost?

Uvedená zranitelnost byla poprvé zveřejněna v roce 2012, přestože Microsoft o ní byl informován již v roce 2010, a byla funkční na serverech s běžícím IIS verze 5.0 a 6.0. Pokud se tedy nyní ptáte, zda mělo dnes (v roce 2016), kdy se s těmito verzemi setkáme pouze sporadicky, vůbec smysl tuto zranitelnost zmiňovat, pak věřte, že ano. Tato zranitelnost je tady totiž s námi stále a i v IIS 7.5 nebo IIS 8.5 je ji možné využívat ke sběru informací. Jediné, co se od roku 2012 změnilo, je, že již nemůžeme k enumeraci používat HTTP metodu GET, ale musíme sáhnout k některé jiné metodě, která je na serveru povolena, např. TRACE, OPTIONS, DEBUG a podobně.

Automatické nástroje

Pokud Vám uvedený postup připadá zdlouhavý, nemusíte zoufat. Bylo již vytvořeno několik automatických scannerů. Poměrně rychlým nástrojem je například IIS ShortName Scanner vytvořený v Javě, jehož hlavní předností je schopnost enumerace skrze množství rozličných HTTP metod a uspěje tak i na serverech s novějším IIS 7.x nebo 8.x. Drobnou nevýhodou je snad pouze to, že nástroj po skončení enumerace vypíše pouze krátké názvy souborů, bez toho, aby nabídl nějakou možnost zjištění jejich protějšků v původní dlouhé variantě.

Druhým známým scannerem je nástroj Tilde enum napsaný v pythonu, který si sice poradí pouze se servery verzí 5.x a 6.x, ale za to umí krátké názvy souborů pomocí slovníku otestovat na jejich původní dlouhé ekvivalenty.

Obrana

Chcete-li chránit svůj IIS server před výše popsanými útoky, můžete filtrovat výskyt konkrétních znaků, jako je tilda nebo hvězdička v URL. Druhou a pravděpodobně lepší variantou obrany je vypnutí generování krátkých názvů samotným systémem, což lze provést následujícím způsobem:

Zakázání vytváření krátkých názvů na všech NTFS oddílech

Změna hodnoty v klíči:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem NtfsDisable8dot3NameCreation nastavit na 1

Zakázání generování krátkých názvů na konkrétních discích
C:\>FSUTIL.EXE 8dot3name query D:
Stav svazku pro možnost Disable8dot3 má hodnotu 0 (vytváření názvů ve formátu 8.3 je povoleno).
Stav registru pro možnost NtfsDisable8dot3NameCreation je 2, výchozí hodnota (Nastavení úrovně svazku).
Na základě dvou výše uvedených nastavení je vytváření názvů ve formátu 8.3 na svazku D: povoleno.
     
C:\>FSUTIL.EXE 8dot3name set D: 1
Chování názvů ve formátu 8.3 bylo úspěšně nastaveno.
     
C:\>FSUTIL.EXE 8dot3name query D:
Stav svazku pro možnost Disable8dot3 má hodnotu 1 (vytváření názvů ve formátu 8.3 je zakázáno).
Stav registru pro možnost NtfsDisable8dot3NameCreation je 2, výchozí hodnota (Nastavení úrovně svazku).
Na základě dvou výše uvedených nastavení je vytváření názvů ve formátu 8.3 na svazku D: zakázáno.

Po té, co možnost generování krátkých názvů zakážete, je ještě nutné všechny soubory zkopírovat a nahradit novými kopiemi původní obsah.

Není od věci také zakázat na serveru všechny nepoužívané HTTP metody jako jsou TRACE, OPTIONS, DEBUG a podobně.

Reference

Microsoft IIS tilde character “~” Vulnerability/Feature Short File/Folder Name Disclosure
Tilde enumeration
IIS Short File Name Disclosure is back! Is your server vulnerable?


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 3/2

1  2  3  4  5    
(známkování jako ve škole)