2013. augusztus 8., csütörtök

SQL Injection

Mi is az Sql injection?
Az Sql injection egy olyan támadás,amivel sérülékeny sql szerverekből lehet kibányászni hasznos információkat pl.: felhasználóneveket, jelszavakat, jelszó hasheket stb...
De mielőtt elkezdenénk tisztázzunk valamit. Ez a támadás nem minden oldalnál működik mert nem minden SQL szerver sérülékeny csak az a sérülékeny ahol lusta volt az admin.  
A cikkben én a DVWA-t fogom támadni. (A DVWA letölhető innen.) Kezdjük is el. A Sql Injection mezőnél,van egy kis sor ahova be kell írni egy id-t most nem fogunk szabályoskodni hanem lopjunk id-t egyből. :D
Írd be, hogy  or 1=1 # és láss csodát ha hibás az sql szerver akkor vissza fog adni pár jó dolgot de ezzel simán be lehet lépni 1 sql szerverbe or 1=1 belépésnek és jelszónak beírod és akkor ha hibás be fog engedni.
Most azt írtam be,hogy or 1=1 # és sok mindent adott :D
Ezután próbáljunk meg még 1 dolgot ha tudod,hogy sebezhető írd be ezt 4' order by 1 # és akkor vissza fogja adni a negyedik user-t az admin által mert by 1 # és az admin az első mindig :D
Most ha meg akarod tudni pontosan milyen típusú az Sql szerver és adatbázis és nincs kedved elővenni az nmapot akkor irb be ezt: ' and 1=1 union select database(),version() #
Most meg kellene tudni milyen táblák vannak az adott szerveren ehhez írd be ezt:' and 1=1 union select null,table_schema from information_schema.tables #
Most meg is vannak a táblák de elég ez nekünk? NEM ! :D
Nézzük meg milyen user használja azt a táblát. Ehhez ezt kell beírni ' and 1=1 union select table_name,table_schema from information_schema.tables where table_schema='kiválasztott tábla' #
Ezután meg lehet nézni azt, hogy milyen felhasználók vannak a kiválaszott adatbázisban. Nézzük is meg. Írd be, hogy ' and 1=1 union select first_name,password from adabázis.users #
Még lehet fájlokat beolvasni mondjuk el lehet lopni vele a rendszer felhasználók hasheit és azt visszafejteni és akkor már be lehet jelentkezni s sok mindent csinálni. Írd be ezt és ha nincs megtagadva a hozzáférés akkor tied a jelszófájl tartalma. :)
' union SELECT 1, load_file('/etc/passwd') # ha ez megvan és kiadta vissza lehet őket fejteni most ha még nem volt elég akkor lopjunk pár usert az adatbázisból :)
' union SELECT table_name, column_name FROM information_schema.columns WHERE table_schema != 'mysql' AND table_schema != 'adatbázis' #
De ezt kézzel szerintem nem kényelmes csinálni vannak különböző eszközök amik meg tudják tenni ezt helyettünk.... :)