Beste leden,
Als ik bv een $_GET['x'] heb en die selecteer bv dit:
mysql_query("SELECT * FROM `[clans]` WHERE `name`='". $_GET['x'] ."'");
Welke data zouden ze hiermee los kunnen krijgen?
En wie weet hoe dat dan moet doen om data te verkrijgen/errors.
- Sql injection
-
19-03-2007, 17:44 #1
- Berichten
- 747
- Lid sinds
- 19 Jaar
Sql injection
Laatst aangepast door David C. : 22-05-2009 om 17:25
-
-
19-03-2007, 17:50 #2
- Berichten
- 245
- Lid sinds
- 19 Jaar
Zoals jij het hier beschrijft is het mogelijk om de hele inhoud van de tabel clans uit te lezen.
SELECT * FROM '[clans]' WHERE name = 'variabelex OR 'test' = 'test'
-
19-03-2007, 17:51 #3
- Berichten
- 77
- Lid sinds
- 19 Jaar
Volgens mij kan de _GET zo bewerkt worden dat je tabel gedropt wordt.
-
19-03-2007, 17:54 #4
- Berichten
- 625
- Lid sinds
- 19 Jaar
$x = mysql_real_escape_string($_GET['x']);
mysql_query("SELECT * FROM `[clans]` WHERE `name`='". $x ."'");
nu kunnen ze geen sql injection meer doen
-
19-03-2007, 18:00 #5
- Berichten
- 747
- Lid sinds
- 19 Jaar
Het is de bedoeling dat het wel mogenlijk is via een url dat ik dit kan testen.
Iemand interesse in het zoeken van sql injections in mijn script, per werkende injection betaal ik een bedrag. Bedrag ter overeenkomst.Laatst aangepast door David C. : 22-05-2009 om 17:25
-
20-03-2007, 10:21 #6
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Je bespaard je meer geld als je overal waar je een $_GET[] waarde in een mysql_query gebruikt hier alleen: mysql_real_escape_string() omheen te zetten, dan is hij al beveiligd tegen injecties.
-
20-03-2007, 11:15 #7
- Berichten
- 75
- Lid sinds
- 18 Jaar
wat staat het script?
-
20-03-2007, 11:15 #8
- Berichten
- 219
- Lid sinds
- 18 Jaar
En als ik dat bij elke query doe? Heeft dat nadelige gevolgen? Ik heb een mysql class dus dat zou ik er zo omheen kunnen bouwen en dan zou ik veilig moeten zijn?
-
20-03-2007, 11:31 #9
- Berichten
- 30
- Lid sinds
- 18 Jaar
In het voorbeeld zal er waarschijnlijk niet veel fout kunnen, aangezien je de waarde tussen ' en ' hebt staan. Op de meeste servers staat magic_quotes on, dus worden ' en " "geescaped". In dat geval kun je dus NIET 1' OR 1=1 /* toevoegen, aangezien je dan WHERE `name` = '`\'OR 1=1/*' krijgt.
-
20-03-2007, 16:07 #10
- Berichten
- 673
- Lid sinds
- 18 Jaar
*Laat Maar*
-
20-03-2007, 16:14 #11
ManagedWPHosting.nl
- Berichten
- 1.486
- Lid sinds
- 19 Jaar
htmlspecialchars slashes en intval anyone ??
-
20-03-2007, 17:12 #12
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Deze tutorial is misschien handig voor enkele onder ons:
http://www.phphulp.nl/php/tutorials/3/244/
-
20-03-2007, 17:28 #13
- Berichten
- 338
- Lid sinds
- 18 Jaar
Origineel gepost door J. Peters
In het voorbeeld zal er waarschijnlijk niet veel fout kunnen, aangezien je de waarde tussen ' en ' hebt staan. Op de meeste servers staat magic_quotes on, dus worden ' en " "geescaped". In dat geval kun je dus NIET 1' OR 1=1 /* toevoegen, aangezien je dan WHERE `name` = '`\'OR 1=1/*' krijgt.
-
20-03-2007, 20:46 #14
- Berichten
- 33
- Lid sinds
- 18 Jaar
Ik zou op deze code zo tientallen verschillende SQL injections kunnen toepassen. Van het droppen van een tabel, tot het totaal veranderen van allerlei data, tot het veranderen van je MySQL password, en in veel gevallen tot het droppen en maken van databases, het aanpassen van toegangsdata, etc.
Voor mij zou het geen probleem zijn om ze allemaal te exploiteren, mits je magic_quotes uit hebt staan, want dat lost veel problemen op. Dat neemt niet weg dat je nooit zomaar raw input in je SQL moet stoppen, want dat open gegarandeerd veel lekken, waaronder XSS (zie onder).
Verder zijn de magic_quotes of addslashes() zeker niet genoeg. Er zijn genoeg exploits te verzinnen om dit te omzeilen. Dit heeft te maken met encoding van karakters (bijvoorbeeld een " in UTF-8 word toch door veel MySQL's opgepikt als een end-of-query karakter). Gebruik dus voor SQL escaping altijd de functie die bij de database server past. Dus in het geval van MySQL is dat mysql_real_escape_string. Let op de real want deze zorgt ervoor dat de escaping wordt gebaseerd op de configuratie van MySQL.
Wanneer je alleen magic_quotes/addslashes/mysql_real_escape_string gebruikt om je SQL te beveiligen is dit nog steeds zeker niet voldoende. Door middel van UPDATE's en INSERT's kan een kwaadwillende gebruiker allerlei data toevoegen aan de database. Wanneer je deze data zonder htmlentities() output (wat gegarandeerd wel eens gebeurt) heb je daar weer een gigantisch XSS (Cross Site Scripting) lek. Als er XSS lekken in je normale pagina's (zichtbaar voor de bezoeker) zitten, kan de aanvaller dus javascript, java, ActiveX uitvoeren op jouw website. Als het lek ook in de admin interface zit wordt het nog veel erger, de javascript van de aanvaller kan dan bijvoorbeeld het wachtwoord veranderen van de ingelogde gebruiker en het naar een webserver van de aanvaller sturen.
Origineel gepost door ramon fincken
htmlspecialchars slashes en intval anyone ??
intval: Deze is zeker heel erg waterdicht, maar je krijgt er natuurlijk altijd een integer uit.Laatst aangepast door Albert Peschar : 20-03-2007 om 20:48 Reden: verkeerde functienaam
-
20-03-2007, 21:26 #15
ManagedWPHosting.nl
- Berichten
- 1.486
- Lid sinds
- 19 Jaar
* amen :)
intvals zijn erg mooi en je kan er ook nog fijne urls mee maken :
site.nl/c49/fietsen/
mod rewrite c[getal] => site.nl/categorie.php?cat_id=$1
$1 = 49 in dit geval :)
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic