Kezdőoldal » Számítástechnika » Programozás » Mi az SQL injection lényege?

Mi az SQL injection lényege?

Figyelt kérdés
írnátok egy rövid PHP kódot ami SQL injection-nal támadható

2013. máj. 27. 22:14
 1/5 anonim ***** válasza:
100%

A lényege, hogy lefuttatsz olyan kódot is az adatbázis szerveren, amit nem lenne szabad.

(Módosítod a bementet.)


Példát nem írok, mivel a netes kismillió példa kód és leírás van hozzá.

2013. máj. 27. 22:18
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
100%

Van egy formod:

<input name=user/>

<input name=password/>

És php-ben így ellenőrzöd:

SELECT * FROM `users` WHERE `user`=\'$_POST['user']\' AND `pass`=\'$_POST['pass']\'

Tegyük föl ezt írod be jelszónak:

' OR 1=1 OR ''='

Így az sql ez lesz:

SELECT * FROM `users` WHERE `user`='józsi' AND `pass`='' OR 1=1 OR ''=''

És ezzel a jelszót el fogja fogadni

2013. máj. 27. 23:05
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
100%

A sql injection lényege az, hogy a bemeneti mezőben egy sql kekérdezést hozunk létre úgy, hogy az eredeti lekérdezést lezárjuk és olyan feltételt hozunk létre amig mindig teljesül.

A fenti példa csak egy kis töredéke annak amit alkalmaznak a próbálkozók

A próbálkozást azért említettem mert mára már nagyon egyszerűen ki lehet titlatni az ilyesmit php-ből

mysql_real_escape függvénnyel vagy PDO-s lekérdezéssel ezek mind kivédhetők, bár sok weboldal van még ma is ami támadható ilyennel,

Mutatok egy php kódot ami tényleg támadható így:

<form name="form1" method="GET" action=control.php">

<input type=text name="username" id="username">

<br><input type="password" id="password">

<input type="submit" value="Belépés">

a control.php legyen ez:

<?php

$host="localhost"; // mysql szerver neve

$username=""; // Mysql felhasználónév

password=""; // mysql jelszó

$db_name="test"; // adatbázis név

$tbl_name="members"; // adatbázis jelszó


// csatlakozunk a szerverhez

mysql_connect("$host", "$username", "$password")or die("NEM sikerül csatlakozni az adatbázishoz");

mysql_select_db("$db_name")or die("Nem létező tábla");


// felhasználónév és jelszó beolvasása a formból

$myusername=$_GET['username'];

$mypassword=$_GET['password'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";

$result=mysql_query($sql);

?>


Na akkor támadjuk ezt a lekérdezést sql injekcióval.

Írjuk be a felhasználónévbe ezt:

admin

a jelszó helyére pedig ezt

'or '1'='1'

Mi lesz a lekérdezésben:

$sql="SELECT * FROM $tbl_name WHERE username='admin' and password=''or '1'='1''";

Tehát ha kiértékeljük ezt a kifejezést:

akkor látható, hogy ha ismerjük az admin jelszavát, akkor be tudunk lépni ugyanis, az első ' aposztroffal lezártuk a lekérést ezután pedig sqlban beírtunk egy olyan kifejezést ami mindig teljesül.

De legyünk egy kicsit kö..ögök a szerver tulajával és csináljunk egy elég durva lekérdezést.

A felhasználónév legyen megint admin.

A jelszó helyére pedig írjuk ezt:

' DROP TABLE \$tbl_name or '1'='1'

Ezt gyak törölte az adatbázist

Mutatok jobbat amikor a full adatbázist lelophatjuk egy lekérdezéssel:

Felhasználónév legyen most ez:

' or '1'='1' and SHOW tables --

Az -- a kommentezés jelölésére szolgál magyarán ez akkor is jó ha nem ismerjük az adatbázist.

Innentől kezdve bármilyen lekérdezést meg lehet csinálni.

Persze az kommentezésnél nem mindegy a sql szerver típusa mindehol más a komment jelölése.

Vannak helyzetek ahol a szerver nem ad vissza táblát, sőt sniffer nélkül még csak észre sem veszed, hogy ad vissza eredményt egy lekérdezés( konkrétan csak egy bool típusú adatot tudzs kiszedni belőle 1. szerepel az adatot karakter vagy nem), ilyenkor más egyéb programnyelven is kell tudni, hogy le lehessen kérdezni adatot, mert itt valamilyen keresés alkalmazásával lehet megtudni az adott user jelszavát.

Meg aztán ha hash-elve van a jelszó, akkor meg kell próbálnui visszafejteni. Erre sokféle adatbázis van.

Ha akarsz kísérletezni ezzel, akkor rakj fel magadnak egy WAMP szervert( vagy ha linuxos vagy akkor LAMP szervert), készíts egy login scriptet és próbáld ki őket. A Bool típusúhoz pedig az echozásnál ha jó egy lekérdezés akkor nem irsz ki semmit, ha rossz akkor pedig egy Access dineidot.

A jelszó kiszedésére pedig jó egy logaritmikus keresés is.

2013. máj. 28. 11:33
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
Nekem a böngészőm alapból levéde a ' jeleket a bemenetben.
2013. máj. 29. 09:14
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Az lehet ( szokták javascripte is védeni az oldalt. Vagy vannak rá pluginok is)

De nem csak böngészőből lehet inputboxnak adatot küldeni.

Vannak erre szakosodott proxy-k is.

2013. máj. 29. 09:26
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!