sqlmap
Úvod a kontext
sqlmap je v tomto projektu praktický hlavně ve chvíli, kdy už byla injection ručně potvrzená nebo je velmi silně naznačená a je potřeba z ní vytěžit maximum bez ručního skládání každého SQL dotazu. Není nejcennější jako nástroj na “hledání magické chyby”. Největší hodnotu má při systematickém využití už známé nebo dobře podezřelé SQL injection.
Na Breadcrumbs pomáhá dumpnout interní data přes lokální port forward. Na Controlu vytěží databázové účty a potom pomůže i se zápisem webshellu. Na Writeru kromě dumpu tabulek čte soubory přes DBMS. Na Cache vytahuje bcrypt hash administrátora OpenEMR. To je důležitý pattern: sqlmap tu není o “najdu zranitelnost”, ale o překladu potvrzené injection do dat, souborů nebo dalšího footholdu.
Co sqlmap v praxi řeší
sqlmap je automatizovaný nástroj pro využití SQL injection. Prakticky odpovídá na otázky:
- co lze přes potvrzenou injection z databáze přečíst,
- zda jde číst i soubory z hostu,
- zda jde zapsat webshell nebo jiný artefakt,
- a jestli injection vede k heslu, účtu nebo jinému přímému dopadu.
Právě tahle systematizace je jeho největší hodnota. Jakmile už je jasné, že parametr nebo request injekci skutečně nese, sqlmap výrazně zlevní další práci.
Nejčastější scénáře využití v tomto projektu
Dump databáze po potvrzené injection
Na Cache vznikne foothold do aplikace až po registraci a získání session cookie. Teprve potom dává smysl poslat sqlmap na konkrétní OpenEMR endpoint:
sqlmap "http://hms.htb/portal/find_appt_popup_user.php?providerid=&catid=1" \
--cookie="PHPSESSID=aadbaaitgfm6v1ddul7brldsou" --threads=10 \
-D openemr -T users_secure --dump
Tady je důležité, že nástroj neřeší celý útok. Hodnota leží v tom, že:
- session už existuje,
- parametr je známý,
- a cílem je vytáhnout konkrétní tabulku s autentizačními daty.
Výsledkem je bcrypt hash openemr_admin, který pak otevírá další vrstvu aplikace.
Přechod od dat k file-read
Na Writeru je dobře vidět, že sqlmap nemusí končit u dumpu tabulek. Po potvrzení injection dává smysl využít i DBMS file-read:
sqlmap -u http://10.10.11.101/administrative \
--data="uname=iron&password=man" --method POST -T users --dump
sqlmap -u http://10.10.11.101/administrative \
--data="uname=iron&password=man" --method POST --file-read=/etc/passwd
Praktický dopad je jiný než u čistě databázového dumpu:
- databáze dá hash a aplikační kontext,
- file-read dá přehled lokálních účtů a operačního systému,
- a dohromady z toho vzniká realističtější plán dalšího útoku.
Přechod od dumpu k file-write
Na Controlu má sqlmap ještě vyšší hodnotu, protože nezůstane u čtení. Po dumpu databázových účtů a prolomení hesla hector přichází další použití: SQL shell a zápis webshellu přes INTO OUTFILE.
sqlmap -u http://control.htb/search_products.php \
--data="productName=test" --headers "X-Forwarded-For: 192.168.4.28" --sql-shell
Tady je dobře vidět, proč je sqlmap praktický:
- nejdřív zúží, co v databázi vůbec je,
- potom pomůže s dalším SQL krokem,
- a nakonec poslouží jako most k file-write a stabilnějšímu footholdu.
Právě tenhle pattern souvisí i s článkem Zápis do prostoru, který se pak vykoná nebo použije pro autentizaci.
Lokální nebo interní injection přes tunel
Na Breadcrumbs je důležitá ještě jiná věc: sqlmap nemusí mířit na veřejný endpoint. Jakmile už existuje tunel nebo interně dostupná URL, pracuje stejně dobře i nad lokální službou:
sqlmap --dump -u "http://127.0.0.1:1234/index.php?method=select&username=administrator&table=passwords"
To je praktická připomínka, že hodnota nástroje neklesá ani po footholdu. Naopak někdy roste, protože interní rozhraní bývají méně chráněná a mají vyšší privilegia.
Kdy je sqlmap nejlepší volba
Největší smysl dává tehdy, když:
- už je injection potvrzená nebo velmi pravděpodobná,
- request je stabilní a dobře reprodukovatelný,
- a cílem není jen PoC, ale systematické vytěžení dopadu.
V těchto situacích je rychlejší a spolehlivější než ruční skládání každého dalšího dotazu.
Co sqlmap neumí vyřešit za vás
sqlmap:
- sám nerozhodne, jestli je injection opravdu relevantní,
- nepochopí za vás business kontext aplikace,
- a neříká, zda dumpnutá data povedou k reálnému účtu nebo dalšímu kroku.
Na Cache je výhra v bcrypt hashi administrátora. Na Writeru ve file-read. Na Controlu v kombinaci databázových dat a file-write. Bez čtení dopadu by byl výstup jen hromada databázových záznamů.
Nejčastější chyby při použití
Pouštění nástroje dřív, než je jasné, co vlastně ověřuje
Praktická chyba je začít od sqlmapu místo od ručního potvrzení injection nebo alespoň silné hypotézy. Pak se z něj stává hlučný skener místo přesného pracovního nástroje.
Zastavení u dumpu databáze
V projektu je opakovaně vidět, že skutečná hodnota často neleží v tabulkách samotných, ale v tom, co umožní dál:
- crack hashe,
- file-read,
- file-write,
- nebo přechod k jinému účtu.
Ignorování aplikačního kontextu
Stejný výstup může mít úplně jinou hodnotu podle toho, jestli jde o:
- lokální účet,
- aplikační admin hash,
- servisní konfiguraci,
- nebo cestu k zapisovatelnému webrootu.
Nejčastější praktické scénáře
Potvrzená SQL injection má vydat uživatele nebo hesla
Potvrzená SQL injection má otevřít čtení souborů
To je Writer.
Injection běží na interním nebo tunelovaném endpointu
To je Breadcrumbs.
Související články v projektu
- Rozbory: Cache, Control, Writer, Breadcrumbs, Fortress Jet
- Techniky: Zápis do prostoru, který se pak vykoná nebo použije pro autentizaci, Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji
Co si odnést do praxe
sqlmapje nejpraktičtější tehdy, když už injection není hypotéza, ale pracovní vstup pro systematické vytěžení dopadu.- Největší hodnotu má tam, kde nekončí u dumpu tabulek, ale otevírá file-read, file-write nebo další autentizační krok.
- Není to náhrada za pochopení aplikace. Je to nástroj, který z potvrzené SQL injection udělá rychlejší a přesnější workflow.
Další Související Články V Projektu
HTB Stroje
Techniky
- Údržbové skripty a provozní automaty jako zdroj přístupů
- Automatizované zpracování souborů a bezpečnostní pipeline
- File read a include varianty mimo klasické LFI