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

PTWA: Mapování aplikace

Autor: .cCuMiNn.   
29.11.2016

Tento text je součástí on-line testovací příručky, která pro vás na tomto serveru vzniká. Budeme rádi za vaše připomínky v komentářích a za vaši aktivní účast v doprovodných projektech.


Žádný útok není možné provést bez toho, aby měl útočník možnost zadat aplikaci svůj vstup. Dalo by se říci, že pokud útočníkům možnost zadávat vstupy odeberete, nebudou žádné útoky možné a Vy budete moci v klidu spát. I v takovém případě by zde ale určitá rizika stále přetrvávala. Útočníkovi by například stačilo, aby vytáhnul z elektrické zásuvky přívodní šňůru k systému, nebo aby udeřil do zařízení, které nepřebírá žádné vstupy, kladivem. Tímto způsobem by útočník způsobil DoS (odepření služeb). Žijeme ale v moderní, interaktivní době, a práci bez interakce, tedy vstupů, které jsou následovány odpovídajícím výstupem, si již ani nedokážeme představit.

Kdybychom neměli možnost vkládat aplikacím své vstupy, neexistoval by zde World Wide Web a informační technologie by byly pouze jakýmisi zprostředkovateli předem vybraných informací a reklamy. Při práci s výpočetní technikou nás dnes vstupy pronásledují na každém kroku. Pokud chcete na internetu navštívit nějakou webovou stránku, musíte nejprve zadat její adresu. Pokud na cílovém webu posunete vertikální posuvník níže, abyste si přečetli další část textu, nebo kliknete na odkaz, abyste se přesunuli na další stránku, vždy tím do systému vkládáte nějaký Váš vstup. A to se nezmiňuji o vyhledávacích polích, registračních a přihlašovacích formulářích, o e-shopech, ve kterých vkládáte vybrané zboží do nákupního košíku, nebo o interaktivních aplikacích, jejichž funkcionalita se stále více přibližuje desktopovým programům.

Vstupy jsou zkrátka všude, a každý z těchto vstupů může způsobit kompromitaci celého systému. Penetrační testování není tedy nic jiného, než testování těchto vstupů a odezev systému, jež jsou těmito vstupy vyvolány. Těžko proto testovat webovou aplikaci bez jejího důkladného zmapování a bez odhalení všech vstupů, kterými může zákeřný kód do aplikace, nebo serveru kdykoliv vstoupit, aby způsobil co možná největší škody.

Tato kapitola se bude věnovat technikám a postupům, jak co nejefektivněji a nejdůsledněji zmapovat webovou aplikaci tak, aby Vám žádný vstup nezůstal utajen a tím pádem nezkontrolován.

Hledání aplikací na stejném hostiteli

Dříve, než svou pozornost zaměříte na vyhledávání konkrétních vstupů, které testovaná aplikace přebírá od uživatelů, je nutné odhalit všechny dostupné zdroje (webové stránky, skripty, API rozhraní, apd.), ve kterých se mohou tyto vstupy nacházet. Ještě před tím je ale vhodné odhalit také další aplikace (domény) běžící na stejném hostiteli, neboť ty se často stávají nejslabším článkem řetězu, jenž tvoří celkovou bezpečnost.

Bezpečnostní test ostatních odhalených aplikací nebude s největší pravděpodobností obsahem objednaného testu. Díky tomu nebude jejich testování dokonce ani legální záležitostí, a bez souhlasu jejich provozovatelů byste se do něj proto neměli pouštět. Mnoho aplikací hostovaných na stejném hostiteli může ovšem představovat bezpečnostní riziko a i bez zjištění jejich konkrétních zranitelností a bez ověření možností vzájemného napadání hostovaných aplikací, byste měli na tuto hrozbu ve svém reportu upozornit. V případě, že získáte souhlas s otestováním ostatních hostovaných aplikací, nebo máte v případě veřejně dostupného webhostingu možnost objednat si na stejném serveru vlastní prostor, měli byste se pokusit také o ovlivnění cílové aplikace touto cestou. Podrobnostem testování na sdíleném hostingu bude později věnována samostatná kapitola. Nyní se blíže zaměříme pouze na jednotlivé možnosti, jak ostatní aplikace provozované na stejném hostiteli odhalit. Těmto aplikacím (doménám) budeme v dalším textu říkat sousedé.

Rozhraní zobrazující hostované aplikace

Provozovatel webového serveru může na webových stránkách zveřejňovat seznam aplikací (domén) běžících na konkrétním serveru. Tento seznam může být buďto veřejný, nebo slouží pouze pro interní potřeby provozovatele. Mimo názvy domén může takový seznam obsahovat například i diskový prostor obsazený jednotlivými aplikacemi, nebo statistiku jejich využívání procesoru. Pokud je takový seznam veřejně dostupný, bude na něj pravděpodobně nasměrován odkaz ze stránek, jako jsou FAQ, z nápovědy a podobně. Pokud existují skripty, které podobnou statistiku zobrazují, ale tyto skripty nejsou linkované, pak Vám nezbyde, než se je pokusit dohledat slovníkovým útokem. Příklady několika názvů těchto umístění, se kterými se můžete v praxi setkat, uvádím v následující tabulce.


Časté umístění statistik
/awstats//statistics/
/stat//webstat/
/stats//web-stat/
Server-status

Asi nejčastějším skriptem, se kterým se setkáte, je modul webového serveru Apache pojmenovaný server-status, jehož výstup najdete na URL adrese http://www.example.cz/server-status. Vzhledem k tomu, že by přístup k uvedeným informacím neměl mít každý, je logické, že bude mnohdy Váš pokus o přístup odmítnut se stavovým kódem 403 Forbidden. Budete-li mít ale štěstí, zjistíte nejenom názvy některých vhostů, ale například i URL, které Vám měly zůstat utajeny. Jak ukazuje následující obrázek, obsahuje totiž server-status naposledy navštívená URL hostovaných domén, mezi nimiž se tak mohou vyskytnout také administrátorská rozhraní, pokud je právě přítomen administrátor některé z aplikací. Výstupu Server-status se dokonce někdy používá pro odhalení serverů darknetu, které jsou často hostovány na stejných serverech, jako běžné služby.

Výstup modulu Server-status

Reverzní překlad IP adresy

Kromě toho, že lze DNS servery využít pro překlad doménových jmen na IP adresy, měli by mít všechny A záznamy na DNS také svůj protějšek v podobě záznamů PTR. Ty se používají pro zpětný překlad IP adresy na doménové jméno a jsou často využívány například při kontrole spamu v elektronické poště. Budete-li hledat další aplikace na stejném hostiteli, rozhodně byste proto neměli reverzní dotaz do DNS opomenout. Leckdy se sice dozvíte pouze pořadové číslo serveru nebo jeho interní označení, které nadefinovala hostingová společnost. Jindy ale můžete zjistit například nejvýznamnější doménu běžící na daném serveru, nebo rovnou celou řadu na adrese hostovaných domén.

Pro zjištění reverzního záznamu si teoreticky ve většině případů vystačíte pouze s příkazovou řádkou a nástrojem ping, kdy prvním pingnutím testované domény zjistíte IP adresu serveru a následným spuštěním téhož nástroje s přepínačem -a proti zjištěné IP adrese, pak odhalíte reverzní DNS záznam.

Zjištění reverzního DNS záznamu nástrojem ping
C:\>ping www.clankyvaukci.cz
Příkaz PING na clankyvaukci.cz [193.150.13.9] - 32 bajtů dat:
Odpověď od 193.150.13.9: bajty=32 čas=39ms TTL=51

C:\>ping -a 193.150.13.9
Příkaz PING na hacker-consulting.cz [193.150.13.9] - 32 bajtů dat:
Odpověď od 193.150.13.9: bajty=32 čas=33ms TTL=51

Ovšem vzhledem k tomu, že může být IP adrese nastaveno více PTR záznamů, může příkaz ping vracet nepříliš uspokojivé výsledky. Přesněji řečeno, při každém dotazu Vám může vracet odlišný výsledek podle toho, který PTZ záznam se mu právě připlete do cesty. Mnohem lepší bude obrátit se pro získání všech PTR záznamů na nějaký jiný nástroj, například nslookup.

Použití nástroje nslookup pro získání PTR záznamů
C:\ >nslookup -query=ptr 185.8.237.45
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Neautorizovana odpoved:
45.237.8.185.in-addr.arpa       name = hacking.cz
45.237.8.185.in-addr.arpa       name = cracking.cz
45.237.8.185.in-addr.arpa       name = mail.hacking.cz
45.237.8.185.in-addr.arpa       name = mail.minigambler.com
45.237.8.185.in-addr.arpa       name = minigambler.com
45.237.8.185.in-addr.arpa       name = phreaking.cz
45.237.8.185.in-addr.arpa       name = minigambler.cz
45.237.8.185.in-addr.arpa       name = mail.soom.sk
45.237.8.185.in-addr.arpa       name = mail.cker.cz
45.237.8.185.in-addr.arpa       name = soom.sk
45.237.8.185.in-addr.arpa       name = hacking.sk
45.237.8.185.in-addr.arpa       name = mail.phreaking.cz
45.237.8.185.in-addr.arpa       name = mail.pentester.cz
45.237.8.185.in-addr.arpa       name = cker.cz
45.237.8.185.in-addr.arpa       name = mail.cracking.cz
45.237.8.185.in-addr.arpa       name = mail.hacking.sk
45.237.8.185.in-addr.arpa       name = mail.minigambler.cz
45.237.8.185.in-addr.arpa       name = pentester.cz

V Linuxu můžete obdobným způsobem použít také nástroj host.

Použití nástroje host pro získání PTR záznamů
host -t PTR 185.8.237.45

Defaultní stránka serveru

Po té, co si přeložíte doménové jméno na IP adresu hostujícího serveru, měli byste tuto IP adresu navštívit prostřednictvím internetového prohlížeče. Není-li totiž server vhodně nakonfigurován, může Vám zobrazit defaultní uvítací stránku, která může obsahovat nejen verzi webového serveru, jak bylo zmíněno již v kapitole věnované průzkumu prostředí, ale může obsahovat také odkazy na všechny hostované aplikace, nebo zobrazovat seznam adresářů, ve kterých jsou zdrojové soubory jednotlivých aplikací uloženy. Příkladem takového chování je například WAMP server, jehož domovské stránky vyhledáte na Google pomocí tohoto dorku:

Google dork pro vyhledání domovských stránek WAPMserveru
intitle:"wampserver homepage"

Defaultní stránka WAMP serveru prozrazující uložené projekty

Dolování dat z DNS

Aby bylo doménové jméno veřejně dostupné, musí mít svůj platný záznam v systému DNS. Ten zajistí nasměrování návštěvníků na správný server vždy, když toto doménové jméno zadají do adresního řádku svého webového prohlížeče. Když se nad tím zamyslíte, existují tak v systému DNS záznamy pro všechny domény, a tyto záznamy obsahují také informaci o tom, na které IP adrese se hostující server nachází. Stačí tedy najít možnost, jak se systému DNS zeptat tak, aby Vám po zadání konkrétní IP adresy sdělil všechny domény, které jsou s danou IP adresou spojeny.

Tak jednoduché to ovšem mít nebudete. DNS je totiž hierarchickou strukturou, ve které jednotlivé uzly obsahují pouze záznamy o doménách, které jsou mu přiděleny a případně odkazy na podřízené DNS servery, jež jsou zodpovědné za překlady domén nižších řádů. V systému DNS existuje jedna kořenová doména zapisovaná tečkou, jejímiž podřízenými uzly jsou domény prvního řádu (například .com, nebo .cz) označované také jako domény nejvyšší úrovně, nebo-li Top-Domain Level (TLD). Těmto doménám jsou podřízeny domény druhého řádu, kterým zase podléhají domény řádu třetího (subdomény), a tak dále. Stejným způsobem, jako se pomocí domén nižších řádů větví doménová jména, štěpí se také DNS servery, které jsou za konkrétní úroveň zodpovědné. V realitě tak pro každou doménu může být autoritativní jiný DNS server, který se stará o překlad konkrétní domény na IP adresu, nebo se odvolává na další DNS server, který má na starosti nižší úrovně dané domény v uvedené hierarchii.

V praxi to pro nás znamená, že abychom se systému DNS mohli zeptat, které domény jsou hostovány na konkrétní IP adrese, museli bychom se zeptat všech existujících DNS serverů a jejich odpovědi sloučit. Jednotlivé záznamy se totiž, jak jsem se snažil naznačit, nenachází na jednom jediném serveru, nýbrž jsou rozprostřeny plošně na jednotlivých serverech, kterých je na internetu nespočet. Jisté řešení, o němž se nyní zmíním, zde ale přesto existuje.

Obchodníci s DNS záznamy

Na Internetu existuje celá řada registrátorů domén, u nichž lze pořídit novou doménu. Tito nám k ní často ochotně nabídnou také vedení DNS záznamů. Někteří registrátoři pod sebou mají klidně i miliony zaregistrovaných domén společně se všemi jejich DNS záznamy. Není se čemu divit, že se na internetu vyskytly také společnosti, které od těchto velkých registrátorů informace o DNS záznamech odkupují, díky čemuž dokáží námi požadované informace alespoň v omezené míře poskytnout.

Jiné služby se zase rozhodly jít cestou procházení internetu a sběru informací o IP adresách, na kterých se konkrétní domény nachází. Vedením rozsáhlé databáze s těmito informacemi jsou proto rovněž schopny zodpovědět na dotaz, které aplikace byly spatřeny na určité IP adrese. Asi nejznámějším on-line nástrojem tohoto typu je domaintools.com, o kterém se traduje, že zmapoval celý internet. Jeho plné informace jsou ovšem k dispozici pouze pro platící zákazníky.

Následující tabulka uvádí odkazy na některé z těchto služeb.


On-line nástroje poskytující seznam vhostů na stejné IP adrese
http://reverseip.domaintools.com/
http://www.ipneighbour.com/
http://ipv4info.com/tools/all-domains-on-ip/
http://www.tcpiputils.com/domain-neighbors
http://www.yougetsignal.com/tools/web-sites-on-web-server/
http://ip-my.net/reverse.html
https://dnsdumpster.com/
https://pentest-tools.com/information-gathering/find-virtual-hosts

Uvedených on-line služeb existuje nepřeberné množství, přičemž mohou poskytovat velice rozdílné výsledky. Stojí proto za to, nechat si IP adresu serveru vyhledat také Googlem a projít si alespoň některé vrácené výsledky. Můžete narazit na nějakou zde neuvedenou službu, která bude mít k dispozici informace, jež uvedené služby neměly.

VHOST bez záznamu v  DNS

Na webovém serveru mohou být vedle veřejně dostupných aplikací také jejich testovací verze, či aplikace na doménách, které již exspirovaly, nebo jsou naopak teprve v přípravě. Takové aplikace jsou na serveru sice dostupné, ale nemají platný záznam v DNS. Server může být nakonfigurován například tak, aby zpracovával požadavky na doménu test.example.com, ale vzhledem k tomu, že tato doména nemá platný záznam v DNS, tak po zadání této adresy do adresního řádku prohlížeče obdržíte pouze strohou zprávu, že server neexistuje. Abyste aplikaci běžící na takové doméně mohli navštívit, museli byste znát IP adresu hostujícího serveru a při přístupu k němu byste museli zajistit předávání doménového jména v HTTP hlavičce Host. Pro překlad doménových jmen, která nemají platný záznam v DNS, je proto vhodné použít soubor hosts, kam zapíšeme odpovídající hodnoty.

Příklad zápisu v souboru hosts pro překlad doménového jména na IP adresu
192.168.1.38   test.example.cz

Odhalení skutečnosti, že jsou na serveru obsluhovány požadavky na tyto domény, může být velice obtížné, ne-li nemožné. Jejich existenci může ale prozradit například defaultní uvítací stránka serveru, nebo na ně můžete narazit v historických záznamech on-line služeb zmíněných v předchozích odstavcích. Pokud budete chtít otestovat dostupnost těchto služeb na webovém serveru, pak se Vám zde uvedené informace mohou ale zcela jistě hodit.

Alternativní jména v SSL certifikátu

Společnost, která si pro svou doménu nechá vystavit SSL certifikát, jej často bude chtít využívat pro více než jednu doménu. Důvodem může být například dopředu známá skutečnost, že se aplikace bude brzy stěhovat na novou doménu. Mnohem častější bude ale skutečnost, že společnost nechce platit a spravovat velké množství certifikátů pro všechny jednotlivé domény. SSL certifikáty s rozšířenou platností počítají a umožňují uvést další domény, pro které bude certifikát rovněž platný. Tyto se uvádí jako alternativní jména subjektu.

Ukázka použití alternativních jmen v SSL certifikátu

Narazíte-li proto na testovaném serveru na stránky načítané protokolem HTTPS, zkuste se blíže podívat na jejich certifikáty, zda tyto neobsahují právě alternativní doménová jména. Jejich samotná přítomnost sice ještě neznamená, že jsou tyto alternativní domény provozovány na stejném serveru, nemalá pravděpodobnost zde ale zcela jistě je.

Aplikace běžící na nestandardních portech

Ne všechny webové aplikace musí nutně běžet na portu 80. Některé, zvláště pak ty, které nejsou určeny široké veřejnosti, mohou být spuštěny na nestandardních portech. Určitě byste proto neměli vynechat test, při kterém se pomocí webového prohlížeče připojíte na všechny ostatní otevřené porty serveru, jež jste zjistili nástrojem Nmap během průzkumu prostředí. Vedle běžných aplikací můžete tímto způsobem často odhalit různá API rozhraní, nebo přístup do administrace webové aplikace.

Spuštění vlastního skriptu na cílovém serveru

V případě, že je testovaný server veřejným hostingem, na němž si můžete pronajmout vlastní prostor, nebo na kterém se nachází aplikace zranitelná na Remote Code Execution, můžete se o zjištění hostovaných domén pokusit také přečtením obsahu některých speciálních souborů uložených na serveru. Na linuxových serverech je v naprosté většině případů možné získat seznam domén ze souboru /etc/passwd, a to buď jeho přímým načtením, nebo budeme-li se bavit o PHP a nasazené restrikci v podobě open_basedir voláním funkce posix_getpwuid(), není-li její použití zakázáno.

PHP skript pro výpis uživatelských účtů z /etc/passwd
  1. <?php
  2.     for ($i = 0; $i < 6000; $i++) {
  3.         if (($usr = @posix_getpwuid($i)) != NULL) {
  4.             echo $usr["name"]."<br>";
  5.         }
  6.     }
  7. ?>

V případě, že takto zjištěná uživatelská jména budou mít s názvy domén jen pramálo společného, můžete se pokusit také o načtení logů webového serveru, souborů s konfigurací statistik, nebo konfigurace vhostů. Můžete také zkusit vylistovat adresáře, ve kterých jsou hostované aplikace uloženy, například /var/www, /home/hosting/, /srv/web/, atp. Úspěch těchto variant ovšem silně závisí na konfiguraci serveru. Případná omezení se ale dají často obejít použitím vhodného exploitu, neboť servery sdílených webhostingů běží na nejaktuálnějším softwaru spíše výjimečně.


Tento text je součástí on-line testovací příručky, která pro vás na tomto serveru vzniká. Budeme rádi za vaše připomínky v komentářích a za vaši aktivní účast v doprovodných projektech.
Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.17/12

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