Welkom gast! Aanmelden Registreren


Waardering:
  • 0 stemmen - gemiddelde waardering is 0
  • 1
  • 2
  • 3
  • 4
  • 5
[tut]Hoe maak je je retro Exploitfree?[/tut]
#1
Hallo RN'ers.
Mijn naam is Schiz0ide en ga jullie vandaag iets leren over je retro exploit free maken.
Ik hoor veel mensen klagen dat zij dit niet kunnen en daar voor andere mensen in dienst nemen. Vanaf vandaag hoef jij dat niet meer te doen!

Ik ga het met jullie hebben over de volgende dingen:
~ De mysql_real_escape_string() function
~ De htmlspecialchars() function
~ De strip_tags() function
en last but not least the stripslashes() function.

Voorbeeld van hoe het niet hoort:
PHP-code:
<?php
/* De html shit sla ik over, dat kunnen jullie wel */
$username $_POST['username'];
$password $_POST['password'];

if(isset(
$_POST['submit'])) 
{
   
$query mysql_query("SELECT * FROM users where username='{$username}' and password='{md5($password)}'");
   if(!
mysql_num_rows($query) < 1)
   {
     
//login succes
   
}


Oke dit is echt "een worst-case scenario".
Omdat wij de data van de user, rechtstreeks door de database laten gaan kan de user allerlei kwade codes invoeren.
Bijvoorbeeld: 'or 1=1-- bij username en gewoon een random password.
Omdat 1 altijd gelijk aan 1 is word het door sql/php gezien een correcte username/password en er wordt zo ingelogd!

Dit kunnen wij heel makkelijk voorkomen door middel van de mysql_real_escape_string();
Maar wat doet deze functie eigenlijk? Voor een SQL injectie heb je 1 heel erg belangrijke factor, namelijk de '. En de escape functie zet er automatisch een / achter zodat er als het ware over heen gelezen wordt. Onze login ziet er nu als volgst uit:

PHP-code:
/* De html shit sla ik over, dat kunnen jullie wel */
$username mysql_real_escape_string($_POST['username']);
$password mysql_real_escape_string($_POST['password']);

if(isset(
$_POST['submit'])) 
{
   
$query mysql_query("SELECT * FROM users where username='{$username}' and password='{md5($password)}'");
   if(!
mysql_num_rows($query) < 1)
   {
     
//login succes
   
}


Okay dat is 1 van de velen vulnerabilities opgelost. Op naar de volgende vulnerability namelijk XSS. Het is vrij irritant als een user, op de een of andere manier een persistant (voor iedereen) zichtbare XSS weet te verkrijgen. Dit doen zij door misbruik te maken van ;, <script>, ' en /.
Gelukkig bestaan er in PHP functies die al deze elementen escapen zodat een XSS aanval niet meer mogelijk is.
Laten we ons oude login system maar eens pimpen om xss attack te voorkomen.
We zullen nu een functie toevoegen aan dit script, om kostbare "lines of code" te besparen en het voor jullie wat makkelijker te maken!:
PHP-code:
/* De html shit sla ik over, dat kunnen jullie wel */
function Clean($data)
{
$data mysql_real_escape_string(htmlspecialchars(strip_tags(stripslashes($data))));
}

$username Clean($_POST['username']);
$password Clean($_POST['password']);

if(isset(
$_POST['submit'])) 
{
   
$query mysql_query("SELECT * FROM users where username='{$username}' and password='{md5($password)}'");
   if(!
mysql_num_rows($query) < 1)
   {
     
//login succes
   
}


Op het eerste oog lijkt het misschien vreemd, maar al die functies achter elkaar maakt xss/ssi/sqli vrijwel onmogelijk.
Dit moet je in feite bij alle user inputted $_GET en $_POST variables doen. Ik hoop dat dit jullie een beetje inzicht heeft gegeven in exploit free maken.

credits: 100% mij
 
#2

mooie tut Happysmile
bedankt dat je dit met ons wilt delen Tounge

 
#3
Iets wat ik was vergeten..
Je kan ook in je core.php alles globaal filteren bijvoorbeeld

PHP-code:
//dit is je core.php of hoe het is genoemd idc
$_POST mysql_real_escape_string(htmlspecialchars(strip_tags(stripslashes($_POST))));
$_GET mysql_real_escape_string(htmlspecialchars(strip_tags(stripslashes($_GET)))); 
 
#4
(29-11-2012, 23:00)Sir.Schiz0ide schreef: Iets wat ik was vergeten..
Je kan ook in je core.php alles globaal filteren bijvoorbeeld

PHP-code:
//dit is je core.php of hoe het is genoemd idc
$_POST mysql_real_escape_string(htmlspecialchars(strip_tags(stripslashes($_POST))));
$_GET mysql_real_escape_string(htmlspecialchars(strip_tags(stripslashes($_GET)))); 
Ik persoonlijk vind die wel fijn :d.
 
#5
Mooi dat je ook voor andere mensen het mogelijk maakt om hun hotel exploitfree te maken!
 
#6
Mooi man, goede tutorial! Jammer dat like weg is...
 
#7
Nice Man !!!!!!
 
#8
bump. Kwil niet dat deze thread dood gaat xD
 
#9

Bedankt, heb deze gebruikt bij mij formulierontvangst Lmao!

kippetje
 
#10
stripslashes(); alleen gebruiken als magic quotes enabled is. Het is een overbodig filter. Het globaliseren van een filter is ook goed van toepassing.

Instead using MySQL, use MySQLi or PDO. MySQL is to be deprecated.

Bijvoorbeeld:
PHP-code:
function filter($val)
{
 if(
get_magic_quotes_gpc()) {
   
$val stripslashes($val);
 }
 
$val htmlspecialchars(mysql_real_escape_string($val));

 return 
$val;


Dit zal het wel moeten doen.
Morsmordre
 
  




Leden die dit momenteel bekijken: 1 gast(en)