Am continuat eu da nu dupa cacatu ala sqli.php <?php // mysql_connect("localhost","root",""); mysql_select_db("sqli"); //schimbati datele session_start(); if(!isset($_SESSION['stage'])) $_SESSION['stage']=1; if(!isset($_SESSION['version'])) { $v=mysql_query("select @@version"); $r=mysql_fetch_array($v); $_SESSION['version']=$r[0]; } if(isset($_GET['id'])){ $Sql="SELECT * FROM news where id=".$_GET['id']; $version=$_SESSION['version']; $rez=mysql_query($Sql); switch($_SESSION['stage']){ case "1": if($rez!=false){ echo "Testeaza vulnerabilitatea adaugand dupa ?id=1 o simpla '<br>"; echo "Rezults: <br>"; $r=mysql_fetch_array($rez); echo $r['text']; }else{ echo mysql_error(); echo "<br>Bravo ai detectat vulnerabilitatea acum urmeaza sa afli cate coloane are primul select, introdu order by 1"; $_SESSION['stage']=2; } break; case "2": if($rez!=false){ $spl=explode("by ",strtolower(urldecode($_GET['id']))); echo "Bravo ai detectat vulnerabilitatea acum urmeaza sa afli cate coloane are primul select<br> Sunt mai mult de ".$spl[1]." coloane incerca sa mergi din 5 in 5 pana obtii eroarea Unknow column<br>"; echo "Rezults: <br>"; $r=mysql_fetch_array($rez); echo $r['text']; }else{ echo mysql_error().strpos(mysql_error(),"Unknown column"); if(strpos(mysql_error(),"Unknown column")!==false){ echo "<br>Ai introdus prea multe coloane coboara numarul pana nu mai obtii eroarea<br>"; } $_SESSION['stage']=3; } break; case "3": if($rez!=false){ if(strpos(strtolower(urldecode($_GET['id'])),"by 3")!==false) echo "Bravo ai reusit sa numeri toate coloanele! Spre exemplu daca ai gasit 6 coloane introdu mai sus and 0 union select 1,2,3,4,5,6<br>"; $_SESSION['stage']=4; echo "Rezults: <br>"; $r=mysql_fetch_array($rez); echo $r['text']; }else{ echo mysql_error(); if(strpos(mysql_error(),"Unknown column")!==false){ echo "<br>Ai introdus prea multe coloane coboara numarul pana nu mai obtii eroarea<br>"; } } break; case "4": if($rez!=false){ echo "Acum trebuie sa gasesti coloana vulnerabila. Ca sa o gasesti trebuie sa te uiti in sursa si sa vezi care din numarul din union apare in sursa.Incarca sa introduci @@version in loc de numarul care apare in sursa<br>"; $_SESSION['stage']=5; echo "Rezults: <br>"; $r=mysql_fetch_array($rez); echo $r['text']; }else{ echo mysql_error(); } break; case "5": if($rez!=false){ $r=mysql_fetch_array($rez); if(strpos($r['text'],"news")!==false&&strpos(strtolower(urldecode($_GET['id'])),"table_name")!==false){ echo "Felicitari domnule ai scos tabele acuma daca vezi acolo exista un tabel care se numeste username_sqli incarca sa vezi ce coloane are inlocuieste table_name cu column_name , information_schema.tables cu information_schema.columns , table_schema=database() cu table_name='username_sqli'<br>"; $_SESSION['stage']=6; }else echo "Ai scos versiunea acum incarca sa scoti numele tabelelor din baza de date principala, pentru asta inlocuieste @@version cu group_concat(table_name) iar dupa 6 introdu from information_schema.tables where table_schema=database()<br>"; echo "Rezults: <br>"; echo $r['text']; }else echo mysql_error(); break; case "6": if($rez!=false){ $r=mysql_fetch_array($rez); if(strpos($r['text'],"id")!==false&&strpos($r['text'],"pass")!==false&&strpos($r['text'],"user")!==false&&strpos(strtolower(urldecode($_GET['id'])),"column_name")!==false){ echo "Felicitari domnule ai scos numele coloanelor pe mine ma intereseaza ce contine user si pass.Pentru a face asta locuieste group_concat(column_name) cu concat(user,0x3a,pass) , from information_schema.columns si tot ce e dupa el cu from username_sqli<br>"; $_SESSION['stage']=7; }else echo "Ai scos tabelelor acuma daca vezi acolo exista un tabel care se numeste username_sqli incarca sa vezi ce coloane are inlocuieste table_name cu column_name , information_schema.tables cu information_schema.columns , table_schema=database() cu table_name='username_sqli'<br>"; echo "Rezults: <br>"; echo $r['text']; }else echo mysql_error(); break; case "7": if($rez!=false){ $r=mysql_fetch_array($rez); if(strpos($r['text'],"admin")!==false&&strpos($r['text'],"21232f297a57a5a743894a0e4a801fc3")!==false&&strpos(strtolower(urldecode($_GET['id'])),"from username_sqli")!==false){ echo "Ai reusit sa parcurgi tutorialul bravo!<br>"; $_SESSION['stage']=8; }else echo "Ai scos numele coloanelor pe mine ma intereseaza ce contine user si pass.Pentru a face asta locuieste group_concat(column_name) cu concat(user,0x3a,pass) , from information_schema.columns si tot ce e dupa el cu from username_sqli<br>"; echo "Rezults: <br>"; echo $r['text']; }else echo mysql_error(); break; case "8": if($rez!=false){ $r=mysql_fetch_array($rez); echo "Bravo ai parcurs tot tutorialul!<br>"; echo "Rezults: <br>"; echo $r['text']; }else echo mysql_error(); break; } }else echo "Seteaza ?id=1"; ?> dump.sqli (il rulati la phpmyadmin): -- phpMyAdmin SQL Dump -- version 4.1.12 -- http://www.phpmyadmin.net -- -- Host: 127.0.0.1 -- Generation Time: 09 Iun 2014 la 19:18 -- Server version: 5.5.36 -- PHP Version: 5.4.27 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Database: `sqli` -- -- -------------------------------------------------------- -- -- Structura de tabel pentru tabelul `news` -- CREATE TABLE IF NOT EXISTS `news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titlu` varchar(30) NOT NULL, `text` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Salvarea datelor din tabel `news` -- INSERT INTO `news` (`id`, `titlu`, `text`) VALUES (1, 'Articol', 'Acest articol este despre sql injection'); -- -------------------------------------------------------- -- -- Structura de tabel pentru tabelul `username_sqli` -- CREATE TABLE IF NOT EXISTS `username_sqli` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` varchar(40) NOT NULL, `pass` varchar(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Salvarea datelor din tabel `username_sqli` -- INSERT INTO `username_sqli` (`id`, `user`, `pass`) VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Avataje 1) este un script cu adevarat vulnerabil la sqli 2) nu este obligatoriu ca sa introduca exact sintaxa pe care o dai tu in indicatii ci doar rezultatul conteaza. L-am testat la mine si merge Ca sa o luati de la capat stergeti cookie-ul phpsessid.