PTWA: Identifikace jazyka a frameworku

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: .cCuMiNn.
Datum: 20.7.2016
Hodnocení/Hlasovalo: 1.5/4

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.

Během identifikace operačního systému a webového serveru jste již pravděpodobně obdrželi dostatek indicií také k tomu, abyste dokázali správně určit jazyk, ve kterém je testovaná aplikace vytvořena. Na tomto místě si shrneme metody, pomocí kterých můžete tento jazyk dále identifikovat a případně správně určili také použitý framework.

Znalost použitého programovacího jazyka umožňuje testerovi mnohem lépe plánovat testovací případy a cílit na konkrétní slabiny, kterých se vývojáři programující v daném jazyce často dopouštějí. Mimo to, že se dozvíte typ použitého programovacího jazyka, zjistíte často i konkrétní verzi běžícího interpretu. Ten může, stejně jako ostatní použité součásti, obsahovat různé veřejně známé zranitelnosti, jejichž případnou existenci a možnost exploitace byste měli ověřit ve veřejných databázích zranitelností.

HTTP response hlavičky

HTTP response hlavičky jste zkoumali již při zjišťování verze operačního systému a webového serveru. Svou pozornost jste při tom věnovali hlavně HTTP hlavičce Server, která často prozradí i verzi běžícího interpretu programovacího jazyka. Nebude ale od věci zaměřit se i na ostatní obsažené hlavičky. Použitý jazyk nebo framework je totiž často prozrazován také například HTTP response hlavičkami X-Powered-By, nebo X-Generator, které by tak rozhodně neměly uniknout Vaší pozornosti.

Výpis HTTP komunikace s vloženou hlavičkou X-Powered-By

Defaultní chybové stránky

Pokud jste si důkladně prohlédli screenshoty defaultních chybových stránek, které byly uvedeny v předchozích kapitolách, mohli jste v nich vedle údaje o operačním systému nebo webovém serveru postřehnout i další zajímavé údaje, mezi které patří například instalované moduly a interprety jazyků včetně jejich přesných verzí. Postupy pro vyvolání defaultních chybových stránek již byly uvedeny rovněž dříve, a proto je zde nebudu znovu popisovat.

Patička defaultní chybové stránky prozrazuje také verzi PHP

Přípona souborů

Asi nejsnadnější způsob, kterým můžete identifikovat jazyk, ve kterém je aplikace vytvořena, poskytují koncovky souborů v URL. Jeden pohled na adresu Vám tak podá rychlou a poměrně přesnou informaci. Následující tabulka obsahuje několik příkladů adres, ze kterých lze použitý jazyk snadno rozpoznat.

Přípony souborů v URL prozrazují použité technologie
AdresaPříponaJazyk
http://www.example.cz/en/news.php?id=2.phpPHP
http://www.example.cz/news/news.jsp.jsp(x)Java
http://www.example.cz/details.asp?id=494.asp(x)ASP
http://www.example.cz/index.html.htmlHTML

Je důležité upozornit na skutečnost, že přípona nemusí vždy odrážet skutečnou realitu. To se týká hlavně použití přípony .html. Koncovka dokonce nemusí být uvedena vůbec, což je stále častější při použití „hezkých“ URL, které mohou mít například tento tvar: http://www.example.cz/clanky/zahranicni/vanoce

U „hezkých“ URL bývá častým zvykem, že se na jejich konec přidává právě koncovka .html, a to i v případě, kdy je pro tvorbu stránky použito některého dynamického jazyka. Pro odhalení této skutečnosti někdy stačí, pokud tester změní manuálně koncovku v adrese z .html za jinou. Pokud mu i pak bude zobrazen stejný obsah, může si být jist, že aplikace přidává tuto koncovku jen jako nepoužitý postfix.

Při použití „hezkých“ URL bývá většinou část adresy součástí konkrétní cesty ke skriptu, ale jiné její části po rozparsování spadají do oblasti proměnných. V uvedeném příkladu http://www.example.cz/clanky/zahranicni/vanoce se lze domnívat, že název clanky bude odkazovat na konkrétní skript, který má na svědomí zobrazení samotného textu, kdežto řetězce zahranicni a vanoce budou pravděpodobně proměnnými, které tento skript přejímá. Pokud byste v tomto chtěli mít jistotu a chtěli se dozvědět, jaké technologie jsou použity, můžete se pokusit načíst skript clanky přímo s použitím různých přípon: http://www.example.cz/clanky.php .php, .asp(x), .jsp(x). Ne vždy se Vám toto zdárně podaří, protože i samotné slovo clanky v cestě může být samo o sobě proměnnou. Pokud ale budete mít štěstí, a podaří se Vám přistoupit přímo ke skriptu, dospějete hned ke dvěma důležitým zjištěním. Budete vědět, jak se tvoří a parsuje URL adresa, a bude Vám známo, jaký jazyk byl použit při tvorbě aplikace.

U „hezkých“ URL se ještě chvíli zdržíme, abychom si popsali nejčastější způsob, jak lze v případě jejich použití zjistit skutečně použité přípony i v případě, že se Vám nebude dařit přidat příponu k jednotlivým částem použitým v URL. Tento způsob bude založen na skutečnosti, že kořenový adresář webu bude s největší pravděpodobností obsahovat soubor pojmenovaný index, nebo default. Stačí se tedy pokusit o přímé načtení takto pojmenovaného souboru s použitím různých přípon: http://www.example.cz/index.php (asp, aspx, jsp, jspx, html, htm, shtml a podobně). Zde nám bude výborným pomocníkem modul Intruder v nástroji Burp Suite, nebo nástroj DirBuster, který je na vyhledávání souborů primárně určen. DirBuster umožňuje vyhledávání souborů hrubou silou nebo pomocí slovníků. Pokud si tedy pro tento nástroj připravíte slovník, který bude osahovat soubor index nebo default s různými koncovkami, odvede DirBuster veškerou práci za Vás. Slovník může obsahovat také různé další často používané názvy souborů, které se používají například pro konfigurace, zálohy nebo administraci. Jedním spuštěním nástroje DirBuster tak provedete současně hned několik testů, čímž Vaše testování podstatně zefektivníte.

Použití nástroje DirBuster k vyhledání indexu

DirBuster ale není rozhodně jediným nástrojem svého druhu. Zkuste se podívat také na projekty Webslayer, nebo Dirb. Vhodné slovníky jsou pak často součástí těchto nástrojů, případně je můžete sehnat odděleně. Poměrně rozsáhlé slovníky najdete například v projektu FuzzDB.

Při hledání konkrétních přípon souborů Vám může práci velice usnadnit také vyhledávač Google. Aplikace, která používá „hezká“ URL, je totiž může používat pouze při zobrazování konkrétního obsahu. Samotná aplikace, ale může obsahovat také různá další API rozhraní, u kterých již nebyl kladen důraz na SEO optimalizaci, a ke kterým proto aplikace ze strany klienta přistupuje přímým voláním skriptů. Příkladem může být kalendář, který se plní daty na základě AJAXového volání, jež je směřováno na adresu http://www.example.cz/API/getCalendarData.php. Na toto volání byste časem během testování určitě sami narazili. Pokud Vám jde aktuálně ale pouze o rychlý sběr informací vedoucí ke zjištění programovacího jazyka, bude nejlepší položit vhodný dotaz na Google, který toto rozhraní bude mít s největší pravděpodobností již zaindexované. Odpovídající Google dork by vypadal takto:

Google dork prozrazující všechny php soubory na doméně example.cz

Poznámka: Využívání vyhledávače Google pro získávání nejrůznějších informací o testované aplikaci se nazývá Google hacking. Jedná se o velice důležitou dovednost, kterou by měl penetrační tester bezpodmínečně ovládat. Speciální dotazy, které se vkládají do vyhledávacího pole Google, aby ten vrátil citlivé informace o cílovém systému, se pak označují výrazem Google dorks.

Následující tabulka shrnuje nejčastěji používané přípony souborů, se kterými se na webových stránkách setkáte a jim odpovídající technologie.

Seznam přípon běžně používaných na webu
PříponaTechnologiePříponaTechnologie
.dostruts 1.x.jspJava Server Pages
.actionstruts 2.x.jspxJava Server Pages
.aspActive Server Pages (ASP).plPerl
.aspxASP.NET.rbRuby
.axdASP.NET.cgiCommon Gateway Interface
.asxASP.NET.pyPython
.asmxASP.NET.phpPHP
.cfmColdFusion.sweSiebel Web Extension
.htm(l)HyperText Markup Language.shtm(l)Server Side Includes (SSI)

Jména session cookies

V defaultním nastavení používají dynamické jazyky standardní názvy pro cookies, které slouží pro identifikaci relací. Jedná se o ty cookies, které obsahují session ID (SID). Aplikace Vám často nastaví tato cookie automaticky při první návštěvě její libovolné stránky. Jindy Vám toto cookie pošle ale teprve ve chvíli, kdy se snažíte přistoupit do části webu chráněné autentizací, nebo až po Vašem úspěšném přihlášení. Projděte tedy nejprve několika stránkami aplikace, navštivte stránku s přihlašovacím formulářem, a máte-li tu možnost, zaregistrujte se a přihlaste. Ve chvíli, kdy Vám aplikace přiřadí session ID a Váš prohlížeč si jej uloží do cookie, budete moci všechny cookies náležející testované doméně vidět v HTTP komunikaci. Mezi HTTP hlavičkami, které Váš prohlížeč odesílá webovému serveru, vyhledejte hlavičku Cookie, která obsahuje jednotlivé cookie oddělené středníkem. Vystačíte si tedy například s nástrojem Burp Suite.

Zobrazení odesílaných cookies pomocí nástroje Burp Suite

Průzkum a práci s cookies Vám ale velice usnadní k tomu určené doplňky do webového prohlížeče. Osobně používám doplněk Cookies Manager+ pro Firefox, ve kterém si snadno vyfiltrujete pouze cookies patřící testované doméně.

Doplněk Cookies Manager+ pro Firefox, session cookie pojmenované PHPSESSID prozrazuje použití PHP

Následující tabulka uvádí přehled několika defaultních nebo často používaných názvů cookies, které Vám umožní snadno identifikovat použitý programovací jazyk nebo framework.

Přiřazení některých častých názvů cookies ke konkrétní technologii
Jazyk, frameworkJméno (session) cookie
PHPPHPSESSID
PHPSESSIONID
JavaJSESSIONID
JSPSESSIONID
JSESSION_ID
JSESSID
ASPASPSESSIONID
ASPSESSION-ID
ASP.NETASP.NET_SessionID
ASPXAUTH
ASPXANONYMOUS
ColdFusionCFID
CFTOKEN
Nettenette-browser
CakePHPCAKEPHP
Laravellaravel_session

Meta tagy, komentáře a indicie ve zdrojovém kódu

Různé frameworky si „dělají reklamu“ tím, že vkládají svůj podpis do HTTP response hlaviček, nebo jej zanechávají v hlavičkách webových stránek v podobě meta tagů. Některé vkládají svůj podpis i do patiček webových stránek a v horším případě dokonce ve svém licenčním ujednání zakazují tento podpis odebrat. Pokud tedy budete chtít identifikovat použitý framework, určitě se vydejte cestou průzkumu HTTP hlaviček v komunikaci a prohlédněte si zdrojový kód webových stránek. V něm se zaměřte na meta tagy, různé podpisy v patičce stránek a komentáře. Pokuste se také vyvolat chybové zprávy, které o použitém frameworku dokáží mnohé napovědět.

Chybová zpráva poskytnutá Nette frameworkem

Patička stránky prozrazující použití frameworku Nette včetně jeho verze

Bylo řečeno, že ve zdrojovém kódu máte svou pozornost věnovat mimo jiné komentářům. Některé z nich totiž přidává automaticky právě framework a ty tak dokáží poskytnout zajímavé informace. Následující tabulka uvádí některé příklady řetězců, na základě kterých je možné konkrétní framework identifikovat. Na tomto místě zmíním opět ještě nástroj Wappalyzer, který je při identifikaci použitých technologií výtečným pomocníkem. Více si ale o jeho databázi signatur povíme až v příští kapitole věnované identifikaci webové aplikace.

Výskyt řetězců v HTML kódu může prozradit použitý framework
Řetězec v HTML kóduFramework
<!-- BC_OBNW -->Business Catalyst
<!—ZKZK
<!-- START headerTags.cfmAdobe ColdFusion
__VIEWSTATEMicrosoft ASP.NET