Pokud se zaměřujete na weby a máte nainstalovaný Kali linux, tak nástroj Nikto bude jeden z prvních, který začnete zkoumat. Tento článek vás provede architekturou a vybranými volbami tohoto nástroje.

K čemu je skener?

Nikto je skener na testování bezpečnosti webových serverů. Přesněji řečeno otestuje základní “dětské nemoci” konfigurace web serveru, nepřehlédne typické adresáře a soubory o kterých možná ani nevíte. Pokud vlastníte a provozujete web server, určitě tento nástroj vyzkoušejte. Nikdy není na škodu vědět, co všechno útočník může z takového testu zjistit.

Nikto je napsaný v Perlu a lze jej používat i na jiných operačních systémech než je Kali. Na domovské stránce projektu https://cirt.net/Nikto2 najdete kromě sekce ke stažení také dokumentaci, mailing list s archivy a v neposlední řade GitHub repositář.

Varování

Příklady s testovacími nástroji si obecně zkoušejte v izolovaných labech. Proč? Protože každý nástroj může mít chyby, nebo můžete špatně pochopit použití parametrů. Pokud použijete nástroj neautorizovaně, tj. bez písemného souhlasu vlastníka, a něco se stane, půjde vše na vaše triko. Často je web server sdílený a provozuje se na něm více webových stránek.

Nápověda

Otevřeme si terminál a spustíme program nikto bez parametrů. Z prvního výpisu můžeme vidět “krátkou” nápovědu s přehledem všech voleb. Hned v hlavičce vidíme verzi nástroje a chybovou hlášku, že jsme nepoužili povinný parametr pro specifikaci cílového serveru (ERROR: No host specified).

Jak je z výpisu vidět, každý parametr začíná znakem mínus. Matoucí znaménko plus za parametrem má evokovat, že se tento parametr nastavuje na nějakou hodnotu. Jak to přesně udělat se dozvíme v online dokumentaci nebo v úplné nápovědě přes parametr -H.

Architektura nástroje

Zjednodušeně můžeme říct, že nástroj posílá aplikační dotazy pomocí protokolu HTTP(S) a potřebuje jen správné definice dotazů.

Zásuvné moduly

Nikto podporuje zásuvné moduly “pluginy”, to jsou ucelené části kódu, které řeší logicky podobnou detekci, nebo zpracování výstupu. Pokud bychom se chtěli podívat na seznam podporovaných modulů, použijeme parametr -list-plugins.

Kromě jména modulu ve výpise najdeme i jeho stručný popis, to se hodí pro představu, co vše Nikto umí. Najdeme zde například moduly pro testování Drupalu, HTTP metod a modul Dictionary pro test obvyklých adresářů a souborů.

Verze modulů a databází

Každý zásuvný modul má většinou svoji databázi s definicemi aplikačních dotazů. Pod aplikačním dotazem si můžeme představit, například HTTP požadavek na ověření dostupnosti adresáře “phpmyadmin”. Pokud prošťouráme GitHub repositář, najdeme v něm adresář databases a soubor definic pro modul “dictionary”, který obsahuje seznam adresářů, které Nikto zkouší na web serveru objevit. V tomto souboru naleznete i slovo phpmyadmin.

Následující příklad vypíše seznam všech zásuvných modulů a jejich databází, včetně jejich verzí.

Aktualizace modulů a databází

Aktuální moduly a databáze mohou odhalit něco nového. Pokud si už dáme tu práci web server skenovat, má smysl zaktualizovat nástroj a jeho moduly. Nikto si umí sám zaktualizovat svoje zásuvné moduly a databáze pomocí volby –update. Bohužel tato funkcionalita dnes nefunguje, jak uvádí následující příklad.

Aktualizace selhala, protože na stránce projektu neexistuje adresář a ani soubor versions.txt pro verzi 2.1.6. Otázka je, zda autoři tuto adresu ještě udržují, protože z výpisů obsahu adresářů na serveru http://cirt.net/nikto/UPDATES/ to vypadá, že poslední verze se zde objevila v roce 2014.

Naproti tomu GitHub repositář je daleko živější. Zkrátka automatická aktualizace nebude fungovat a jediná možnost jak dostat aktuální verzi nástroje Nikto je přes GitHub.

Test web serveru (-h)

Konečně se dostáváme k testu web serveru. Pomocí parametru -h definujeme IP adresu, nebo doménové jméno cílového web serveru, který chceme testovat. Pokud neuvedeme parametr pro port, použije se výchozí hodnota 80, viz. následující výpis.

Skener Nikto nám radostně hlásí chybějící ochranné hlavičky proti anti-Clickjackingu a Cross-site Scriptingu (XSS).

Dále nám skener hlásí, že našel webový server Apache ve verzi 2.4.10, která už je zastaralá. Mezi zajímavé informace patří objevené adresáře /tools, /manual, /icons, /wordpress a hlavně /phpmyadmin, což je webová aplikace pro správu databází MySQL.

Nastavení bázové URL adresy

Nikto je primárně skener webového serveru. Můžeme mít však potřebu testovat jen určitou bázovou URL adresu. To se hodí v situaci, kdy server odpovídá jen na specifické URL adresy a na ostatní dotazy reaguje stavovým kódem HTTP 404. Nikto umí definovat kořenovou URL adresu pomocí parametru -root.

Bohužel z výstupu nástroje Nikto žádný rozdíl nepoznáme a musíme si zapnout podrobný výpis přes volbu Display s hodnotou V (zjištěno z podrobné nápovědy, označuje “Verbose”).

Po nějaké době, až se na řadu dostane modul “dictionary”, můžeme vidět sadu HTTP GET požadavků, které v URL začínají prefixem /wordpress.

Z výpisu je dále vidět, že Nikto od webového serveru dostává odpovědi se stavovým kódem 404, což znamená, že daný soubor nebo adresář na serveru nebyl nalezen.

Skenovací techniky (-T)

Nikto můžeme parametrem –Tunning (-T) omezit, aby prováděl pouze vybrané testy. Podrobná nápověda zmiňuje celkem 16 typů nastavení. My si otestujeme pouze SQL injektáž (volba 9). Podrobný výpis (Display -V) necháme zapnutý.

Z podrobného výpisu vidíme, že Nikto spustil základní testy proti web serveru a pak se na posledním řádku bezhlavě pustil do zkoušení SQL injection (UNION ALL SELECT).

Falešné nálezy

Nikto je bezvadný nástroj, ale jeho výsledky je třeba brát s rezervou. Nástroj je tak dobrý, jak jsou jeho dotazy a pravidla na zpracování odpovědi. Například moderní webové aplikace použivající JSON v těle HTTP odpovědi skener matou. Z tohoto důvodu nálezy dále ověřujeme. Můžeme použít testovací nástroj Burp Suite nebo webový prohlížeč v kombinaci s vývojářským panelem FireBug.

Úplná nápověda (-H)

Nakonec si ještě vyzkoušíme volání úplné nápovědy s parametrem -H. Na první pohled vidíme, že jsou zde dokumentované nejen parametry, ale také jeho hodnoty. Pokud byste chtěli vidět i příklady použití parametrů, musíte do online dokumentace.

Závěr

V článku jsme vysvětlili k čemu se hodí sken web serveru a z popisu architektury už víme, že srdcem nástroje jsou moduly a jejich databáze definic s aplikačními dotazy.

Ukázali jsme si celkem tři případy skenování: plný sken webserveru, sken na bázovou URL adresu a sken s přednastavenou metodou skenování. Nakonec jsme nakousli téma falešných nálezů.

Máte vlastní tipy pro tento nástroj? Využíváte jeho slovníky nebo píšete vlastní uživatelské databáze? Podělte se o svoje zkušenosti a napište nám na email nebo na facebook.

To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku nebo si chcete vyzkoušet nikto skener, rád uvidím na hacking kurzech.