Page 1 of 1

Multimod sms sistemos SQL_Injection fix

Posted: 2013 Jul 01 14:32
by V1LKAS
Taigi aha aka rafak, nėr labai talentingas užkamšant sql_injection skyles, taigi populiariausia sms sistema
http://paslaugos.multimod.lt/scripts/smsv2/ taipogi yra "kiaura it rėtis".

Trumpai apie SQL_Injection: tai toks hack medodas kuriuo aklai galima gauti mysql duomenų bazės duomenis.

Nedidelis fix nuo to. Kodą įrašome į order.php failą pačiame viršuje, prieš <?php

Code: Select all

<?php  $ip = $_SERVER['REMOTE_ADDR'];  $time = date("l dS of F Y h:i(worry) A");  $script = $_SERVER[PATH_TRANSLATED];  $fp = fopen ("[WEB]SQL_Injection.txt", "a+");  $sql_inject_1 = array(";","'","%",'"'); #Whoth need replace  $sql_inject_2 = array("", "","","""); #To wont replace  $GET_KEY = array_keys($_GET); #array keys from $_GET  $POST_KEY = array_keys($_POST); #array keys from $_POST  $COOKIE_KEY = array_keys($_COOKIE); #array keys from $_COOKIE  /*begin clear $_GET */  for($i=0;$i<count($GET_KEY);$i++)  {  $real_get[$i] = $_GET[$GET_KEY[$i]];  $_GET[$GET_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_GET[$GET_KEY[$i]]));  if($real_get[$i] != $_GET[$GET_KEY[$i]])  {  fwrite ($fp, "IP: $ip\r\n");  fwrite ($fp, "Method: GET\r\n");  fwrite ($fp, "Value: $real_get[$i]\r\n");  fwrite ($fp, "Script&#058; $script\r\n");  fwrite ($fp, "Time: $time\r\n");  fwrite ($fp, "==================================\r\n");  }  }  /*end clear $_GET */  /*begin clear $_POST */  for($i=0;$i<count($POST_KEY);$i++)  {  $real_post[$i] = $_POST[$POST_KEY[$i]];  $_POST[$POST_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_POST[$POST_KEY[$i]]));  if($real_post[$i] != $_POST[$POST_KEY[$i]])  {  fwrite ($fp, "IP: $ip\r\n");  fwrite ($fp, "Method: POST\r\n");  fwrite ($fp, "Value: $real_post[$i]\r\n");  fwrite ($fp, "Script&#058; $script\r\n");  fwrite ($fp, "Time: $time\r\n");  fwrite ($fp, "==================================\r\n");  }  }  /*end clear $_POST */  /*begin clear $_COOKIE */  for($i=0;$i<count($COOKIE_KEY);$i++)  {  $real_cookie[$i] = $_COOKIE[$COOKIE_KEY[$i]];  $_COOKIE[$COOKIE_KEY[$i]] = str_replace($sql_inject_1, $sql_inject_2, HtmlSpecialChars($_COOKIE[$COOKIE_KEY[$i]]));  if($real_cookie[$i] != $_COOKIE[$COOKIE_KEY[$i]])  {  fwrite ($fp, "IP: $ip\r\n");  fwrite ($fp, "Method: COOKIE\r\n");  fwrite ($fp, "Value: $real_cookie[$i]\r\n");  fwrite ($fp, "Script&#058; $script\r\n");  fwrite ($fp, "Time: $time\r\n");  fwrite ($fp, "==================================\r\n");  }  }   /*end clear $_COOKIE */  fclose ($fp);  ?>

Kitas variantas, tai visus kintamuosius escapint stringu, tai reiktų visus naudojamus kintamuosius priskirti iš naujo, pvz

Code: Select all

$username = mysql_real_escape_string($_POST['username']);

Re: Multimod sms sistemos SQL_Injection fix

Posted: 2013 Jul 12 22:39
by psychical
Visos sistemos dalinamos nemokamai turi skylių, galiu neabejoti manoji irgi... Tačiau pokolkas to niekas nerado, kaip ir aš pats... O dėl taisymo tai prmo variantogalėjai net nerodyt nes naudos iš to 0, antras variantas veiks tik tuo atveju, jei tu būsi prisijungęs prie MySQL, jei toje vietoje prie MySQL neprisijungiama, nevertėtų nevertėtų to skubinti, mysql_real_escape_string() ši komanda 5.5.0 PHP versijoje bus panaikinta, aišku ne daug kas ją atsinaujins, tačiau vertėtų žiūrėti labiau į ateitį, o žiūrint labiau į ateitį patariama naudot addslashes(), aišku, kaip jau minėjau mysql_real_escape_string() irgi yra gerai, tačiau žiūrint į ateitį, mano pasiūlymas geresnis.

Re: Multimod sms sistemos SQL_Injection fix

Posted: 2013 Jul 13 01:16
by V1LKAS
Pirmas variantas tik tam, kad tam tikros paieškos programos, kurių šiuo metu tikrai yra nemažai, tiesiog nerastų skylių, bet kokiu aatvėju taip išvengsi +90% problemų, aišku jeigu susidursi su specialistu tai tikrai nk nepadės :)

Re: Multimod sms sistemos SQL_Injection fix

Posted: 2013 Jul 21 20:56
by Chemodan
Pirmas variantas veikia , nes ji jau senei nauduojau...