Az SQLMap eszköz minden penetrációs tesztelő eszköztárában megtalálható. Ez az egyik legnépszerűbb és leghatékonyabb eszköz, ha SQL injekciós sebezhetőség kihasználásáról van szó, amely maga is az OWASP Top 10 sebezhetőség listájának élén áll. Az SQL-injekciós sebezhetőség megerősítésétől kezdve az adatbázis nevének, tábláinak, oszlopainak kinyeréséig és a teljes rendszer megszerzéséig számos célra használható.
Ebben a cikkben az SQLMap különböző típusú parancsait fogjuk látni, amelyek jól jöhetnek az SQL-injekció különböző forgatókönyveinek kihasználása során.
Az SQLMap letölthető a következő linkekről:
Windows
Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Demó célokra ezt a gépet használom a Vulnhubról.
Nézzük meg az SQLMap eszköz alapvető használatát GET és POST kérésekre.
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 a vizsgálathoz
-p: paraméter a vizsgálathoz
*: A beolvasandó paraméter (ha a -p kapcsoló nincs megadva)
POST Request
Megadhatjuk a POST kérés testében átadott adatokat az SQLMap eszköz általi beolvasáshoz.
sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user
-data = POST data
Egy másik lehetőség, hogy a Burp kérést egy fájlba másoljuk, és azt átadjuk az SQLMapnak.
sqlmap -r <path to the request file>
Lépjünk egy kicsit előre, hogy megértsük az SQLMap eszköz által biztosított egyéb lehetőségeket.
POST bejelentkezési oldalak átvizsgálása
A POST bejelentkezési oldalakat a GET/POST kérés HTTP fejlécében átadott cookie fejléc engedélyezi. A post bejelentkezési oldal(ak) átvizsgálásához meg kell adnunk az érvényes cookie-t az SQLMap számára.
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”cookie értéke”
/admin/index.php?id=1 egy post bejelentkezési oldal.
Hasonlóképpen, sok oldal a User-Agent vagy Referrer fejléc által védett. Ugyanez szerepelhet a parancsban:
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
Kiegészítésképpen a user-agent fejlécet a -random-agent opcióval randomizálhatjuk.
CRAWL
Crawl egy fontos opció, amely lehetővé teszi az SQLMap eszköz számára a weboldal feltérképezését a gyökérhelytől kezdve. A feltérképezés mélységét a parancsban lehet meghatározni:
sqlmap -u http://192.168.202.160/ -crawl=1
-crawl: A feltérképezendő mélység meghatározása. (Példa: A 2 meghatározásával az eszköz legfeljebb két könyvtárat fog feltérképezni)
Ha ki akarunk zárni bármilyen oldalt a crawler hatóköréből, akkor a -crawl-exclude segítségével definiálhatjuk. Ez egy hasznos opció, ha egy bejelentkezés utáni oldalt mászunk át.
sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”cookie value” -crawl-exclude=”logout”
Ez a parancs három könyvtárig átmássza a weboldalt, és kizár minden olyan URL-t, ahol a “logout” kulcsszó jelen van.
Amint az alábbiakban látható, az SQLMap feltérképezte a webhelyet, de kizárta a logout URL-t.
Futtassuk le ugyanezt a parancsot a -crawl-exclude opció nélkül:
Az alábbiakban látható, hogy ha a -crawl-exclude nincs megadva, az SQLMap feltérképezte a logout URL-t. Ez lehetővé tenné a meglévő munkamenet érvénytelenítését (a kijelentkezés miatt), és nem fejezné be a keresést.
SQLMap Through Proxy
Meghatározhatjuk egy proxy adatait, ahonnan átengedjük a kérést. Ha a kérést egy proxy eszközön, például a Burp-en keresztül akarjuk továbbítani, indítsuk el a Burp Suite-ot, és konfiguráljuk úgy, hogy a localhost-on fusson a 8080-as porton. Most használjuk a következő SQLMap parancsot:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″
Most gondoljunk egy olyan forgatókönyvre, ahol az olyan sqlinjection kulcsszavak, mint OrderBy és Union feketelistán vannak a szerveren. Az ilyen típusú implementációkat a camel casing technikával megkerülhetjük. Az SQLMap segítségével küldjük a forgalmat a Burp-nek, és a Burp “match and replace” funkcióját használjuk a fenti korlátozás megkerülésére.
A Match and Replace funkció a Burp “Options” fülén, a “Proxy” fül alatt található.
Ez ellenőrzi, hogy a kérés tartalmaz-e olyan kulcsszót, mint az “union”. Ha igen, akkor helyettesítse “UnIoN”-ra.”
Egy olyan forgatókönyvben, ahol az alkalmazás csak proxy-kiszolgálón keresztül érhető el, ugyanezt a következő paranccsal lehet meghatározni:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=username:password
Batch
A batch parancs a nem interaktív munkamenetekhez használható. Amikor megpróbálunk valamit átvizsgálni, az SQLMap kérhet tőlünk bemeneti adatokat a vizsgálat során: például a crawl funkció használata során az eszköz megkérdezi a felhasználót, hogy az azonosított URL-t át akarja-e vizsgálni. Ha a -batch van megadva a parancsban, az eszköz egy alapértelmezett értéket használ, hogy a felhasználó megkérdezése nélkül folytassa a keresést.
Form
Az -form opcióval együtt megadható egy űrlapmezőt tartalmazó oldal URL címe (mondjuk bejelentkezési oldal), hogy elemezze az oldalt és vezesse a felhasználót az azonosított mezők tesztelésére.
Most a nagyszámú űrlapmezőt tartalmazó oldalak hatékonyan tesztelhetők a -form és a -batch opció együttes használatával. Ez elemzi az oldalt, ellenőrzi az űrlapmezőket, és automatikusan megadja a bevitelt a felhasználó nevében.
Ha a teljes alkalmazást kell átvizsgálni, a crawl opció a form és a switch opcióval együtt használható.
Threads
A threads opcióval a felhasználó meghatározhatja az SQLMap eszköz által küldendő egyidejű kérések számát. Ezzel csökkenthető a teljes tesztelési idő. Ezt nem szabad nagyobb értéken tartani, mivel ez befolyásolhatja az eredmény pontosságát.
Kockázat és szint
A kockázat lehetővé teszi az eszköz által használt hasznos terhek típusát. Alapértelmezés szerint az 1. értéket használja, és a 3. szintig konfigurálható. A 3. szint, amely a maximális, tartalmaz néhány nehéz SQL-lekérdezést.
A szint határozza meg az elvégzendő ellenőrzések/hasznos teher számát. Az érték 1-től 5-ig terjed. Az 5, amely a maximális érték, nagyszámú hasznos terhet tartalmaz a vizsgálatban.
A kockázatot és a szintet ajánlott növelni, ha az SQLMap az alapértelmezett beállítások mellett nem képes felismerni a befecskendezést.
Verbose
Ha látni szeretnénk az eszköz által küldött hasznos terhet, használhatjuk a verbose opciót. Az értékek 1-től 6-ig terjednek.
Adatbázis-felszámolás
Amint tudjuk, hogy az SQLMapot elsősorban SQL-injekció kihasználására használják, lássunk néhány parancsot az adatbázis SQL-injekcióra sebezhető alkalmazáson keresztül történő felszámolásához.
1. -dbs:
2. Most már megvan az adatbázis neve. A “photoblog” adatbázis táblázatának kinyeréséhez futtassuk a következő parancsot:
3. A “users” táblázat oszlopadatainak kivonatolásához futtassa a következő parancsot:
4. A “users” táblázat adatainak dumpolásához használja a -dump parancsot:
5. A “users” táblázat adatainak dumpolásához használja a -dump parancsot. Az aktuális adatbázis-felhasználó azonosításához:
6. Az aktuális adatbázis nevének azonosításához:
7. A jogosultságok, szerepek azonosítása, és ha az aktuális DB felhasználó a DB admin:
Bypassing WAF Using Tamper Script
Néhányszor találkozunk olyan forgatókönyvvel, ahol az alkalmazás a webalkalmazás tűzfal (WAF) mögött marad. Annak ellenőrzéséhez, hogy a webhelyet védi-e a WAF, a következő opciókat használhatjuk:
-identify-waf
Amikor a WAF azonosítva van, a tamper script segítségével megtámadhatjuk a WAF által védett alkalmazásokat. A tamper script módosíthatja a kérést, hogy elkerülje a WAF felismerését. A szkriptek az /usr/share/sqlmap/tamper/ könyvtárban találhatók.
Rendszerparancsok futtatása
Az OS/rendszer szintű parancsokat akkor tudjuk futtatni, ha az aktuális adatbázis-felhasználó DBA jogokkal rendelkezik. A következő opciókat használhatjuk:
Linux szerver esetén:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell
Windows szerver esetén:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>
SQL lekérdezések futtatása
Az SQL utasítást az adatbázisban a következő parancsokkal futtathatjuk:
sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell
Egyéb lehetőségek
Egyéb lehetőségek:
1. HTTP-hitelesítéssel, például Basic, NTLM és Digest hitelesítéssel védett oldal vizsgálata:
sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred “admin:admin”
2. Kulcsalapú hitelesítéssel védett oldal vizsgálata
sqlmap -u http://example.com/admin.aspx -auth-file=<path to PEM certificate or private key file>
3. A támadó IP-k véletlenszerűvé tétele (ez olyan esetekben segíthet, mint például a WAF-felismerés, vagy amikor a támadó forrás elrejtése megnehezítené az IP lenyomozását).
A Tor anonimitás alapértelmezett hálózatának használata:
sqlmap -u http://example.com/admin.aspx -tor
Tor port definiálása:
sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy port>
4. Ha késleltetésre van szükség az egyes HTTP-kérések között:
sqlmap -u http://example.com/admin.aspx -delay=1 #1 másodperc késleltetés
5. Ha egy oldal CSRF tokennel van védve, akkor ugyanezt beleírhatjuk a parancsba:
sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>
Second-Order SQL injection: Az SQL-befecskendezésnek ebben a típusában az SQL payload az adatbázisban tárolódik, és később, egy másik oldal elérésekor visszakereshető. Megadunk egy URL-címet, amelyet az SQLMap eszköz minden egyes injektálás után lekérdez. Az SQLMap eszközt a következő parancsokkal utasíthatjuk az injektálás tesztelésére:
sqlmap -r /root/Desktop/Burp.txt -second-order “http://target/vulnerbalepage.php”
A Burp.txt fájl tartalmazza azt a kérést, amelyre az injektálást el kell végezni.
-második sorrendű “URL” tartalmazza azt az URL-t, amelyet az SQLMap minden egyes injektálás után meg fog keresni.