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

Burp Suite k penetračnímu testování (1.díl – Modul Proxy)

Autor: .cCuMiNn.   
26.6.2014

Při penetračních testech nebo při webhackingu je často potřeba zachytit HTTP komunikaci probíhající mezi browserem a webovým serverem. Tuto komunikaci můžeme chtít například upravit ještě před tím, než je odeslána na webový server, nebo použít jednotlivé requesty v následných testech. Využití modulu Proxy z multiplatformního a rozhodně všestranného nástroje Burp Suite bude tou nejlepší volbou.


Burp SuiteNástroj Burp Suite je napsán v Javě, díky čemuž je možné jej provozovat téměř na libovolném operačním systému. Aplikace se skládá z několika modulů, které dohromady tvoří velice všestranný a užitečný nástroj pro penetrační testování. V tomto seriálu se postupně naučíme s jednotlivými moduly pracovat, tak abychom je byli schopni během testů efektivně využívat. Je vhodné na tomto místě zmínit také skutečnost, že je Burp Suite dostupný ve dvou verzích: Free Edition, která je dostupná zdarma a Professional Edition, která je placená a cena licencí u ní není rozhodně levnou záležitostí. Je ovšem potřeba si říci, že pro valnou většinu úkolů si vystačíme s Free edicí, která má oproti placené verzi znepřístupněny pouze některé volby a nenajdeme v ní modul Scanner schopný vykonat většinu automatických testů na nás.

Modul Proxy

V tomto díle se zaměříme na pravděpodobně nejdůležitější z modulů, kterým je Proxy. Tento modul umožňuje pozastavovat a upravovat všechny requesty, které odesílá náš prohlížeč na webový server. K tomu, aby bylo možné tento nástroj využívat, si ale budeme muset nejprve správně nastavit volby sítě ve svém webovém prohlížeči. Začněme ale pěkně od začátku:

  • Stáhněte si Burp Suite ve verzi Free Edition z oficiálních stránek.
  • Pokud zatím nemáte nainstalováno runtime prostředí Java, stáhněte si instaler a proveďte instalaci ze stránek společnosti Oracle.
  • Spusťte nástroj Burp Suite
  • Nastavte si prohlížeč podle následujících instrukcí

Nastavení prohlížeče

Aby byl Burp Suite schopen zachytávat komunikaci webového prohlížeče, musíme svůj browser nastavit tak, aby ke své komunikaci využíval proxy na konkrétní adrese a portu. To, na jakém portu Burp Suite naslouchá, můžete ovlivnit po jeho spuštění na kartě Proxy/Options. Defaultně je zde nastaven port 8080, a pokud se vám tato hodnota nebije s komunikací jiných aplikací, není nutné ji měnit.

Ve svém webovém prohlížeči následně nastavíme stejné hodnoty, tedy adresu HTTP proxy: 127.0.0.1 a Port: 8080. Kde tuto volbu najdete v prohlížeči Firefox, ukazuje následující screenshot:

Burp Suite můžete spustit také na jiném stroji, než na kterém spouštíte webový prohlížeč, což najde využití například ve chvíli, kdy web procházíte z virtuálního počítače. V tom případě v browseru nastavíte místo adresy 127.0.0.1 IP adresu počítače, na kterém je Burp Suite skutečně spuštěn.

Pokud si budete přát zachytávat také HTTPS komunikaci, pak je nutné v prohlížeči nastavit stejné hodnoty i pro SSL. Více o šifrované komunikaci si povíme níže v textu věnovaném konfiguračním nabídkám modulu Proxy.

Poznámka: Ve chvíli, kdy Burp Suite vypnete, nebude možné používat webový prohlížeč k surfování po internetu, dokud i v něm použití proxy serveru v nastavení opět nevypnete. Abyste se vyhnuli poněkud zdlouhavému postupu při povolování a zakazování použití proxy serveru doporučuji vám použití některého doplňku prohlížeče, který vám do menu přidá přepínač, jímž použití proxy serveru nastavíte jediným kliknutím. Osobně pro tuto činnost využívám ve Firefoxu doplněk Swap Proxy.

Celý postup nastavení, si můžete prohlédnout v následujícím videu:


Intercept: Pozastavujeme a měníme odchozí requesty

Když nyní budeme chtít navštívit nějakou webovou stránku (například kliknutím na odkaz), neměla by se nám požadovaná stránka načíst. Je to proto, že intercept modulu proxy v Burp Suite náš požadavek zastavil a nepředal jej dál webovému serveru. Nyní je tedy na nás, abychom se rozhodli, co s tímto požadavkem budeme chtít udělat. Přepneme se tedy do Burp Suite, kde uvidíme barevně zvýrazněné záložky Proxy a (nacházíme-li se v modulu Proxy) také záložku Intercept.

Klikneme-li na záložku Intercept, uvidíme ve spodní části obrazovky obsah našeho požadavku, který si můžeme prohlédnout a případně upravit v různých zobrazeních na jednotlivých záložkách:

  • Raw – zobrazuje celý požadavek v čitelném tvaru, tak jak odchází na webový server
  • Params – zobrazuje názvy a hodnoty předávaných parametrů. Zobrazeny jsou parametry předávané nejen ve formě GET a POST proměnných, ale i prostřednictvím cookies
  • Headers – zobrazuje HTTP hlavičky obsažené v requestu.
  • Hex – Stejně jako Raw zobrazuje celý obsah požadavku, tentokrát však v hexadecimálním zobrazení, tedy po jednotlivých bytech v hexadecimální podobě.

Pokud jsme v požadavku provedli požadované změny, nebo v něm žádné změny dělat nechceme, klikneme na tlačítko Forward, kterým finální podobu požadavku definitivně odešleme na stranu serveru.

Pokud se rozhodneme, že daný požadavek nechceme na server odeslat, ale chceme jej namísto toho z komunikace vyhodit, použijeme k tomu tlačítko Drop. Pokud ve frontě zachyceným požadavků žádný další pozastavený request nečekal, měla by spodní část obrazovky zůstat prázdná. Pokud však ve frontě čekal další pozastavený požadavek, opět můžeme provést jeho úpravu a tlačítkem Forward jej předat na webový server, nebo jej tlačítkem Drop zahodit.

Nechceme-li žádné další požadavky pozastavovat, využijeme k tomu tlačítko Intercept is on, čímž pozastavování deaktivujeme. I tak ale budou všechny požadavky browseru přesměrovávány přes Burp Suite a my si je budeme moci prohlížet v historii komunikace.

Poznámka: Pokud bychom zachytávání vypnuli přímo zakázáním použití proxy serveru v prohlížeči (např. doplňkem Swap Proxy), pak by Burp Suite naší komunikaci nezaznamenával, protože by přes něj vůbec neproudila.

Opětovné pozastavování requestů spustíme stejným tlačítkem, které tentokrát zobrazuje stav Intercept is off.

Actions

Posledním tlačítkem na stránce Proxy/Intercept je Action, které ukrývá nabídku mnoha činností, které můžeme s requestem také vykonat. Pojďme si přiblížit nejdůležitější z nich:

Burp Suite

  • Send to - Prvních několik možností, které začínají na „Send to…“ odesílají request do dalších modulů nástroje Burp Suite, které si představíme v dalších dílech seriálu.
  • Change request method – Touto volbou můžete přepínat mezi odesláním requestu metodou GET nebo POST. To znamená, že se změní uvedená metoda v HTTP hlavičce requestu, přidají/odeberou se některé HTTP hlavičky spojené s POST metodou, ale hlavně se přesunou samotné parametry mezi URL a tělem požadavku.
  • URL-encode as you type – Volba zapíná chování editoru, kdy při zapnuté volbě se určité znaky automaticky kódují pomocí URL kódování. Při vypnuté volbě jsou znaky zapisovány tak, jak je vkládáme.
  • Don‘t intercept request – Pod touto volbou se nachází ještě jedna menší subnabídka, pomocí které můžeme z dalšího pozastavování vypustit požadavky vedoucí na stejného hosta (doménu), IP adresu, nebo do stejného adresáře. Případně je možné vypustit ze stopování také požadavky vedoucí na shodnou příponu souborů (css, jpg, php, asp, …).
  • Do intercept –> Response to this request - Ve chvíli, kdy nás bude blíže zajímat nejen odchozí request, ale i odpověď na něj ze strany serveru, případně pokud budeme chtít i tuto responsi serveru před jeho zpracováním prohlížečem upravit, zvolíme právě tuto volbu. Samotná zachycená odpověď se zařadí do fronty, takže pokud čekalo na vyřízení v Interceptu ještě několik dalších requestů, nebuďde překvapeni, že se požadovaná odpověď serveru zobrazí teprve ve chvíli, kdy na ni přijde řada. Pokud byste chtěli požadavky později opět zachytávat je potřeba si říci, kde najdete seznam vámi přidaných výjimek. Je to na kartě Proxy/Options v oblasti s názvem Intercept Client Request, kterou popíši níže v tomto textu.
  • Význam ostatních možností z nabídky by měl být zřejmý.

Vpravo od tlačítka Action najdete ještě jedno vstupní pole, do kterého si můžete vložit vlastní poznámku ke zpracovávanému requestu, nebo odpovědi, a můžete si zde také vybrat pro request i určitou barvu, kterou se označí řádek v historii.

Intercept: Pozastavujeme a měníme odpovědi serveru

Jak jsme si uvedli při popisu volby Do intercept, kterou jsme mohli zvolit během zpracování requestu, umožňuje nám Burp Suite měnit obsah nejenom odchozích requestů, ale příchozích odpovědí. Jakmile dojde k pozastavení odpovědi serveru, změní se v Interceptu některé nabídky. Ze záložek možného způsobu zobrazení například ubyde karta Params, a naopak přibydou jiné záložky podle typu vráceného obsahu, jejichž význam je následující:

  • HTML - Záložka se zobrazí ve chvíli, kdy jsou vrácená data MIME typu text/html a my jejím prostřednictvím budeme schopni prohlédnout a případně upravit HTML kód stránky, ještě před tím, než jej předáme ke zpracování prohlížeči.
  • Render – Na kartě Render máme možnost si zobrazit vrácené obrázky, nebo si nechat zde můžeme prohlédnout HTML stránku, tak jak by ji zobrazil webový prohlížeč. Bohužel má render programu Burp Suite problém se zpracováním znaků národních abeced, a tak texty na zobrazené stránce nemusí být vždy bez problémů čitelné.

Z menu dostupného kliknutím na tlačítko Action vypadne při zpracovávání odpovědi pochopitelně volba Do intercept, a volba Don‘t intercept request se změní na Don‘t intercept response.

History

Vedle Interceptu, který slouží k pozastavování a úpravě obsahu komunikace před jejím reálným předáním cílovému systému, najdete v modulu Proxy další z důležitých funkcí, kterou je historie (karta HTTP history). Na této záložce si můžete prohlédnout seznam všech requestů/responsí, které proudily mezi vaším prohlížečem a webovým serverem v době, kdy jste v něm měli použití proxy serveru nastaveno.

Pojďme si stručně popsat rozložení obrazovky při prohlížení historie:

  • Filtry – Kliknutím do tohoto řádku, který najdete hned pod záložkami jednotlivých karet, vyvoláte nabídku, ve které můžete ovlivnit, které záznamy v seznamu requestů uvidíte a které nikoli. Můžete si tak snadno vyfiltrovat pouze relevantní záznamy bez zbytečného balastu okolo. Pravděpodobně nemá smysl procházet dopodrobna všechny volby, protože je jejich význam pravděpodobně každému zřejmý. Popíši zde tedy pouze dvě z nich, které tak samozřejmé nejsou, a které se budou často hodit:
    • Show only in-scope items – Protože ve Free edici není dostupné filtrování na základě konkrétních řetězců (což je opravdu škoda), budeme k filtrování requestů na konkrétní domény využívat právě tuto volbu. Zvolíme-li možnost Show only in-scope items zobrazí se nám pouze ty požadavky, které směřují na domény, které jsme si předem přidali do Scope. Samotné přidání se provede pravým myšítkem na konkrétním záznamu v seznamu requestů volbou Add to scope. Odebrání probíhá obdobným způsobem volbou Remove from scope.
    • Show only parameterized requests – V seznamu requestů zobrazí pouze ty požadavky, jejichž součástí jsou GET nebo POST proměnné. To znamená, že předávají serveru hodnoty, které by neměly uniknout oku testera.
  • Seznam requestů – V této oblasti najdeme seznam požadavků odeslaných naším prohlížečem. Nenechte se zmást, pokud by jejich řazení nebylo chronologické tak, jak requesty postupně opouštěly váš prohlížeč. Řazení totiž můžete ovlivnit kliknutím na záhlaví odpovídajícího sloupce. Dejte si také pozor, zda nemáte zapnuté filtrování, které ze seznamu vypouští konkrétní požadavky.
  • Request/Response – Ouška karet Request a Response nám umožňují přepínat se mezi zobrazením obsahu odeslaného požadavku směrem na server a zobrazením odpovědi, kterou na tentýž požadavek vrátil webový server.
  • Zobrazovací módy – Zobrazovací módy jsme si již jednou představili při popisu práce s Interceptem. Nemá tedy smysl zde znovu jednotlivé volby rozebírat.
  • Vyhledávání – V nejspodnější části obrazovky pak najdeme ještě vstupní pole sloužící pro vyhledání konkrétního řetězce v obsahu requestu nebo response.

Rozbalovací menu nad jednotlivými záznamy

Pokud nad konkrétním záznamem v seznamu requestů kliknete pravým tlačítkem myši, vyvoláte kontextové menu obsahující kromě jiných následující volby:

Burp Suite

  • Show response in browser – Zvolíme-li tuto volbu, bude nám zobrazen dialog, ve kterém si můžeme do schránky uložit zástupné URL pro zvolený request. Pokud toto URL následně vložíme do address baru prohlížeče a odešleme, zobrazí nám Burp Suite v prohlížeči odpověď, kterou jsme na původní request od serveru obdrželi. V zobrazeném dialogu máme také možnost zaškrtnout volbu, aby se při budoucích výběrech volby Show response in browser zástupný odkaz uložit do schránky přímo bez zobrazení dialogu.
  • Request in browser ->
    • In orriginal session – Podobně jako v předchozím případě u volby Show response in browser nám Burp Suite vrátí zástupný odkaz, který můžeme zkopírovat do adresního řádku prohlížeče. V tomto případě nám ovšem Burp Suite nevrátí původní odpověď serveru, ale nechá prohlížeč odeslat novou kopii požadavku. In original session znamená, že bude během požadavku použito stejné SID (identifikátor relace), jako u původního požadavku.
    • In current session – Rozdíl oproti předcházející volbě je pouze v tom, že při odeslání kopie požadavku bude použito aktuální SID uložené v prohlížeči.
  • Show new history window – Volba otevře nové okno se seznamem dříve odeslaných requestů. Vhodné například ve chvíli, kdy potřebujeme vyhledávat rozdíly v sekvencích odesílaných požadavků.
  • Add comment – Ke každému requestu si můžeme uložit poznámku, která se následně zobrazí v samostatném sloupci seznamu. Na základě poznámek můžeme také filtrovat zobrazené requesty, abychom odfiltrovali nežádoucí balast. Sluší se říci, že poznámky můžeme k jednotlivým záznamům vkládat i přímo v seznamu kliknutím do sloupce comment.
  • Highlight – Jednotlivé řádky v seznamu requestů si touto volbou můžeme obarvit pro snadnější orientaci.
  • Delete item – Pokud pro nás není konkrétní záznam relevantní, můžeme jej touto volbou ze seznamu requestů trvale odstranit.
  • Clear history – Tato volba kompletně vymaže seznam zachycené komunikace, a my tak můžeme začít zachytávání s „čistým štítem“.
  • Význam ostatních nabídek by měl být zřejmý.

WebSocket history

Další ze záložek dostupných v novějších verzích Burp Suite je WebSocket History. Na této kartě můžeme prohlížet komunikaci předávanou pomocí HTML5 technologie WebSocket.

Options

Poslední karta dostupná v modulu Proxy je, jak její titulek napovídá, věnovaná různým definicím a nastavením používaným v tomto modulu.

Proxy Listeners

S touto nabídkou jsme se seznámili již v úvodních částech tohoto článku, kdy jsme nastavovali samotnou komunikaci mezi prohlížečem a nástrojem Burp Suite. Na tomto místě definujeme, na jakých portech a na kterých lokálně dostupných adresách bude Burp Suite naslouchat příchozí komunikaci. U jednotlivých záznamů lze nastavit také přeposílání requestů na jiné hosty nebo porty.

Můžeme zde také importovat/exportovat certifikáty, které bude Burp Suite používat při zachytávání SSL komunikace. V případě, že nepoužijeme žádné vlastní certifikáty, bude Burp Suite používat implicitní certifikáty a webový prohlížeč bude při zahájení šifrovaného spojení zobrazovat upozornění na neplatný certifikát pro konkrétní doménu. To nás ale nemusí příliš trápit. Bude stačit, když použití těchto certifikátů odsouhlasíme.

Intercept Client Requests

I o této nabídce již padla výše v textu zmínka. Záznamy uvedené v této tabulce se starají o filtrování pozastavovaných requestů. Všechny requesty, které si přejeme pozastavovat pomocí Interceptu musí odpovídat právě zde uvedeným pravidlům. Ve chvíli, kdy požadavek odpovídat nebude, nedojde ani k jeho pozastavení.

Použití pravidel je podmíněno zaškrtnutím volby Intercept requests based on the following rules. Pokud tuto volbu odškrtneme, nebudou uvedená pravidla použita. Stejně tak je možné zapínat/vypínat konkrétní pravidla zaškrtnutím volby Enabled u každého z nich.

Volba Automaticlly update Content-Lenght header when the request is edited je velice důležitá a měli bychom ji vždy nechat zatrženou. Pokud provedeme jakoukoliv změnu v těle POST požadavku, Burp Suite spočítá jeho novou délku a upraví na základě ní hodnotu v HTTP hlavičce Content-Lenght. Bez zaškrtnutí této volby by Webový server zůstal viset při čekání na další data, pokud bychom jich odeslali méně, než uvádí tato hlavička, nebo by je v případě našeho rozšíření nezpracoval všechny.

Intercept Server Responses

Volba definující pravidla pro pozastavování příchozích odpovědí od serveru. Nastavení je obdobné jako u Intercept Client Requests.

Intercept WebSockets Messages

Dvě jednoduché volby, které určují, zda má Intercept pozastavovat zprávy předávané prostřednictvím technologie WebSocket z browseru na server, respektive ze serveru prohlížeči.

Response modification

Volby, které určují některé automatické úpravy v HTTP odpovědích před tím, než jsou předány ke zpracování prohlížeči.

  • Unhide hidden form fields – Zamění hodnotu atributu type u formulářů z hidden na text. Díky tomu budou skrytá pole formulářů ve webové stránce viditelná.
  • Enable disabled form fields – Vypnutá pole formulářů, které by jinak nebylo možné editovat budou při zaškrtnutí této volby plně editovatelná.
  • Remove input field length limits – Odstraní ze vstupních polí formulářů atribut maxlength, který je zodpovědný za omezení délky vkládaného řetězce.
  • Remove JavaScript form validation – Odstraní z formulářů jejich validaci pomocí JavaScriptu. Tato volba se může často hodit, pokud se potřebujeme zbavit automatické kontroly vkládaných dat, ale nemůžeme z důvodu funkčnosti aplikace kompletně zakázat použití JavaScriptu.
  • Remove all JavaScript – Odstraní z webové stránky veškeré kódy JavaScriptu.
  • Remove <object> tags – Odstraní z vebové stránky všechny tagy <object>.
  • Convert HTTPS links to HTTP – Ve všech odkazech ve webové stránce nahradí protokol HTTPS protokolem HTTP.
  • Remove secure flag from cookies – Odstraní z cookies příznak secure, který by jinak zabránil prohlížeči v odesílání cookies nešifrovaným kanálem.

Match and Replace

Tato sekce může být poměrně užitečná, pokud si budeme přát automatické nahrazování některých výrazů v requestech nebo v odopovědích. Na základě regulárních výrazů můžeme nahradit libovolný obsah kdekoliv v hlavičkách, nebo v tělech požadavků/odpovědí. Přednastaveny jsou například regulární výrazy pro automatickou změnu User-agenta, cookies, apd.

SSL Pass Trough

Na tomto místě můžeme definovat cíle, u kterých nemá docházet pro SSL komunikaci k zachytávání komunikace. Můžeme se tím vyvarovat chybovým hlášením ze strany klienta, případně jejímu plnému odmítnutí. Komunikace mezi browserem a zde uvedenými cíly bude probíhat napřímo a nebude tedy zaznamenána ani historii.

Miscellaneous

V této oblasti najdeme různá další nastavení, jimiž můžeme ovlivnit chování modulu Proxy při předávání komunikace.

  • Use HTTP/1.0 in requests to server – Ve všech odchozích požadavcích nastaví HTTP protokol na verzi 1.0
  • Use HTTP/1.0 in response to client - Ve všech příchozích odpovědích nastaví HTTP protokol na verzi 1.0
  • Set response header „Connection: close“ – Do všech příchozích odpovědí přidá HTTP hlavičku Connection: close, která vynutí uzavření spojení ze strany prohlížeče
  • Unpack qzip / deflate in requests – Rozbalí komprimovaná data v požadavcích prohlížeče pro jednodušší čtení a úpravu komunikace.
  • Unpack qzip / deflate in responses - Rozbalí komprimovaná data v odpovědích serveru pro jednodušší čtení a úpravu komunikace.
  • Disable web interface at http://burp – Vypne webový interface nástroje Burp Suite, který je dostupný na adrese http://burp. Pozor: Při vypnutí této volby nebude možné využít opětovného odeslání requestů nebo zobrazení původní odpovědi z kontextového menu v historii.
  • Suppress Burp error messages – Potlačení chybových zpráv programu Burp Suite
  • Dissable logging to history and site map – Vypne ukládání zachycené komunikace do historie
  • Enable interception at startup – Nastavení chování interceptu při spuštění programu Burp Suite

Podrobnější nápovědu k jednotlivým volbám lze vždy vyvolat kliknutím na ikonu s otazníkem, kterou najdete u každá sekce.

Web interface Burp Suite

Není-li v nastavení vypnuto webové rozhraní nástroje Burp Suite, můžete se přímo z prohlížeče dostat na toto webové rozhrání zadáním adresy http://burp. Nejdůležitější součástí tohoto rozhraní je zcela jistě historie, ze které můžete pomocí odkazů velice jednoduše opakovat odeslání jednotlivých requestů.

Ukázka práce s Burp Suite

Práce s modulem Proxy v nástroji Burp Suite je intuitivní a velice jednoduchá. Pro jistotu ale dodávám ještě krátké video zachycující základní operace. Pokud by nebylo ani tak vše jasné, rád zodpovím vaše dotazy v komentářích.


Využití Burp Suite pro zachytávání cizí komunikace

Ač není Burp Suite primárně určen pro toto použití, je to jedna z možných variant využití modulu Proxy. Pokud by kdokoliv rozchodil Burp Suite na počítači s veřejnou IP adresou (případně by použil přesměrování portů, nebo pokud by se oběť nacházela ve stejné lokální síti) a podařilo by se mu nastavit v prohlížeči své oběti proxy server na svou IP adresu, pak by mohl Burp Suite bez problémů využít také k odposlechu a úpravě cizí komunikace.

No a pokud se ptáte, jak se dá proxy v cizím počítači nastavit, tak existuje několik možností:

  • Malwarem
  • Osobním přístupem k PC
  • Přidáním vašeho proxy serveru na veřejný seznam volně dostupných proxyn


BTW: Už víte, proč není rozumné se přes free web proxy servery připojovat za účelem zvýšení své anonymity? :)


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

Social Bookmarking

     





Hodnocení/Hlasovalo: 1/18

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