Nástroj SQLMap nechybí ve výbavě žádného penetračního testera. Je to jeden z nejoblíbenějších a nejsilnějších nástrojů, pokud jde o zneužití zranitelnosti SQL injection, která sama o sobě zaujímá přední místo v seznamu 10 nejzranitelnějších zranitelností OWASP. Od potvrzení zranitelnosti SQL injection až po extrakci názvu databáze, tabulek, sloupců a získání celého systému jej lze použít k mnoha účelům.
V tomto článku si ukážeme různé typy příkazů SQLMap, které se mohou hodit při využívání různých scénářů SQL injection.
SQLMap lze stáhnout z následujících odkazů:
Windows
Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Pro demonstrační účely používám tento stroj z Vulnhubu.
Podívejme se na základní použití nástroje SQLMap při požadavcích GET a POST.
sqlmap -u http://site-to-test.com/test.php?id=1 -p id
sqlmap -u http://site-to-test.com/test.php?id=1*
-u: URL ke skenování
-p: parametr ke skenování
*:
POST požadavek
Můžeme poskytnout data předávaná v těle POST požadavku ke skenování nástrojem SQLMap.
sqlmap -u http://site-to-test.com/admin/index.php -data=“user=admin&password=admin“ -p user
-data = POST data
Jiným způsobem je zkopírovat požadavek Burp do souboru a ten předat nástroji SQLMap.
sqlmap -r <cesta k souboru s požadavkem>
Půjdeme trochu dopředu, abychom pochopili další možnosti, které nástroj SQLMap poskytuje.
Skenování přihlašovacích stránek POST
Přihlašovací stránky POST jsou autorizovány hlavičkou cookie, která se předává v hlavičce HTTP požadavku GET/POST. Chceme-li skenovat přihlašovací stránku (stránky), musíme aplikaci SQLMap poskytnout platný soubor cookie.
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=“hodnota cookie“
/admin/index.php?id=1 je přihlašovací stránka.
Podobně je mnoho stránek chráněno hlavičkou User-Agent nebo Referrer. Tu můžeme zahrnout do příkazu:
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php
Případně můžeme hlavičku user-agent randomizovat pomocí volby -random-agent.
CRAWL
Crawl je důležitá volba, která umožňuje nástroji SQLMap procházet webové stránky, a to od kořenového umístění. Hloubku procházení lze definovat v příkazu.
sqlmap -u http://192.168.202.160/ -crawl=1
-crawl: Definujte hloubku procházení. (Příklad: Definování 2 umožní nástroji procházet až dva adresáře)
Pokud chceme z rozsahu crawleru vyloučit nějakou stránku, můžeme definovat pomocí -crawl-exclude. Tato možnost je užitečná, pokud procházíme stránku s přihlášením k příspěvku.
sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=“hodnota cookie“ -crawl-exclude=“logout“
Tento příkaz projde web až do tří adresářů a vyloučí všechny adresy URL, kde se vyskytuje klíčové slovo „logout“.
Jak vidíte níže, nástroj SQLMap prošel webovou stránku, ale vyloučil adresu URL pro odhlášení.
Spustíme stejný příkaz bez volby -crawl-exclude:
Jak je vidět níže, když není definována volba -crawl-exclude, SQLMap prošla adresu URL odhlášení. To by umožnilo zneplatnit existující relaci (kvůli odhlášení) a nedokončit skenování.
SQLMap přes proxy
Můžeme definovat údaje proxy, odkud povolíme průchod požadavku. Pokud chceme požadavek předat přes proxy nástroj, jako je Burp, spusťte Burp Suite a nakonfigurujte jej tak, aby běžel na localhostu na portu 8080. Nyní použijte následující příkaz SQLMap:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=“http://localhost:8080″
Nyní si představte scénář, kdy jsou klíčová slova sqlinjection jako OrderBy a Union na serveru na černé listině. Tyto typy implementací můžeme obejít pomocí techniky camel casing. K odeslání provozu do Burpu použijeme SQLMap a k obejití výše uvedeného omezení použijeme funkci „match and replace“ Burpu.
Funkci Match and Replace naleznete na kartě „Options“ v záložce „Proxy“ Burpu.
Tato funkce zkontroluje, zda požadavek obsahuje klíčové slovo jako „union“. Pokud ano, pak jej nahraďte slovem „UnIoN.“
V případě, že je aplikace přístupná pouze prostřednictvím proxy serveru, lze totéž definovat pomocí následujícího příkazu:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=“http://localhost:8080″ -proxy-cred=username:password
Batch
Příkaz batch se používá pro neinteraktivní relace. Když se snažíme něco prohledat, může se nás SQLMap během skenování zeptat na vstupní údaje: například při použití funkce procházení se nástroj zeptá uživatele, zda chce prohledat identifikovanou adresu URL. Pokud je v příkazu definována možnost -batch, nástroj použije výchozí hodnotu a bude pokračovat bez dotazování uživatele.
Form
Lze zadat adresu URL stránky s formulářovým polem (například přihlašovací stránku) spolu s možností -form, která stránku analyzuje a vede uživatele k testování identifikovaných polí.
Nyní lze efektivně testovat stránky s velkým počtem formulářových polí pomocí možnosti -form a -batch společně. Tím se stránka rozebere, zkontrolují se formulářová pole a automaticky se zadá vstup jménem uživatele.
Pokud je třeba prověřit celou aplikaci, lze použít možnost crawl spolu s form a switch.
Threads
Volba threads umožňuje uživateli definovat počet souběžných požadavků, které má nástroj SQLMap odeslat. Tím by se zkrátila celková doba testování. Neměla by být ponechána vyšší hodnota, protože to může mít vliv na přesnost výsledku.
Risk a úroveň
Risk umožňuje určit typ zátěže, kterou nástroj používá. Ve výchozím nastavení se používá hodnota 1 a lze ji nakonfigurovat až do úrovně 3. Úroveň 3, která je maximální, zahrnuje některé těžké dotazy SQL.
Úroveň určuje počet kontrol/platidel, které se mají provést. Hodnota se pohybuje v rozmezí 1 až 5. Hodnota 5, která je maximální, zahrnuje do kontroly velký počet payloadů.
Riziko a úroveň se doporučuje zvýšit, pokud nástroj SQLMap není schopen odhalit injekci ve výchozím nastavení.
Verbose
V případě, že chceme vidět payload odesílaný nástrojem, můžeme použít možnost verbose. Hodnoty se pohybují od 1 do 6.
Vyčíslení databáze
Jak víme, SQLMap se používá hlavně pro zneužití SQL injection, podívejme se na některé příkazy pro vyčíslení databáze prostřednictvím aplikace zranitelné vůči SQL injection.
1. -dbs:
2. Nyní máme k dispozici název databáze. Chcete-li vypsat tabulku pro databázi „photoblog“, spusťte následující příkaz:
3. Chcete-li extrahovat údaje o sloupcích z tabulky „users“, spusťte následující příkaz:
4. Chcete-li vypsat data pro tabulku „users“, použijte příkaz -dump:
5. Chcete-li vypsat data pro tabulku „users“, použijte příkaz -dump:
5. Pro identifikaci aktuálního uživatele databáze:
6. Pro identifikaci aktuálního jména databáze:
7. Identifikace oprávnění, rolí a zda je aktuální uživatel DB správcem DB:
Obcházení WAF pomocí Tamper Scriptu
Mnohdy se setkáváme se scénářem, kdy je aplikace držena za webovým aplikačním firewallem (WAF). Chceme-li zkontrolovat, zda je web chráněn systémem WAF, můžeme použít následující možnosti:
-identify-waf
Pokud je systém WAF identifikován, můžeme pomocí tamper skriptu napadnout aplikace chráněné systémem WAF. Tamper skript může upravit požadavek tak, aby unikl detekci WAF. Skripty se nacházejí v adresáři /usr/share/sqlmap/tamper/.
Spouštění systémových příkazů
Příkazy na úrovni operačního systému/systému můžeme spustit, pokud má aktuální uživatel databáze práva DBA. Můžeme použít následující možnosti:
Pro server Linux:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell
Pro server Windows:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>
Spouštění dotazů SQL
Dotaz SQL na databázi můžeme spustit následujícími příkazy:
sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell
Další možnosti
Mezi další možnosti patří:
1. Skenování stránky chráněné autentizací HTTP, jako je Basic, NTLM a Digest:
sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred „admin:admin“
2. Skenování stránky chráněné autentizací založenou na klíči
sqlmap -u http://example.com/admin.aspx -auth-file=<cesta k souboru s certifikátem PEM nebo soukromým klíčem>
3. Skenování stránky chráněné autentizací založenou na klíči. Náhodná změna IP adresy útočníka (to může pomoci v případech, jako je detekce WAF, nebo když by skrytí zdroje útoku zvýšilo obtížnost dohledání IP adresy).
Pro použití výchozí anonymní sítě Tor:
sqlmap -u http://example.com/admin.aspx -tor
Pro definování portu Tor:
sqlmap -u http://example.com/admin.aspx -tor-port=<port proxy serveru Tor>
4. V případě, že se vám nepodařilo zjistit, zda se jedná o anonymní síť Tor, můžete se obrátit na jiný server. Pokud je požadována prodleva mezi jednotlivými požadavky HTTP:
sqlmap -u http://example.com/admin.aspx -delay=1 #1 sekunda prodlevy
5. Pokud je stránka chráněna CSRF tokenem, můžeme jej zahrnout do příkazu:
sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>
Injekce SQL druhého řádu: Při tomto typu injekce SQL je užitečné zatížení SQL uloženo v databázi a později načteno při přístupu na jinou stránku. Uvádíme adresu URL, kterou si nástroj SQLMap vyžádá po každé injekci. Nástroji SQLMap můžeme dát pokyn k otestování této injekce pomocí následujících příkazů:
sqlmap -r /root/Desktop/Burp.txt -second-order „http://target/vulnerbalepage.php“
Burp.txt obsahuje požadavek, na který má být provedena injekce.
-second-order „URL“ obsahuje URL, na kterou bude SQLMap přistupovat po každé injekci.
Závěr
.