Beste phphelpers,
hoe moet je een sql injection uitvoeren in een url,
als je bijvoorbeeld deze link hebt:

http://www.hackthissite.org/missions/realistic/4/products.php?category=1

en je weet dat een tabelnaam email heet en de db heet ook email. Hoe kan je dan alle emailadressen (dus de variabele 'email' in de db) weergeven door middel van een sql injection? Hoe en wat moet je dat dan achter categorie=1 plakken? Union, of select?
Wie kan het mij duidelijk uitleggen hoe het werkt,

Met vriendelijke groet,
Tom


ps:
dit werkte niet:

Http:// ..... ?category = 1 UNION ALL SELECT *,*,* FROM email
=1 OR 1=1

of

=1' OR 1='1

voor het geval er met quotes in de query wordt gewerkt.

Maar goed, je moet wel heel erg stom zijn om anno 2008 nog steeds niets tegen SQL-injection te doen. Zorg voor 1 goede methode om te escapen en gebruik deze ALTIJD, ook als je denkt dat het niet nodig is. Prepared statements en stored procedures kunnen de boel nog net even iets veiliger maken, maar het begint met veilig escapen.

Ps. SQL-injection met een DELETE of DROP is natuurlijk veel indrukwekkender!
@pgfrank: Maar een mysql_real_escape();
moet daar dan je SQL in ? (Insert lala ..).
Want daar kom ik niet aan uit.
Nee, die functie gebruik je over de variabelen die je wilt beveiligen:
<?php
$sNaam = mysql_real_escape_string($_POST['naam']);
$sQuery = "
SELECT *
FROM tabel
WHERE naam = '".$sNaam."'
";
?>
ps. Zie ook de SQL Beginnershandleiding.
Ja dit lijstje ken ik wel:

' or 0=0 --

" or 0=0 --

or 0=0 --

' or 0=0 #

" or 0=0 #

or 0=0 #

' or 'x'='x

" or "x"="x

') or ('x'='x

' or 1=1--

" or 1=1--

or 1=1--

' or a=a--

:P

Maar ik wil graag weten hoe het werkt in een url, als je in de URL balk wat veranderd, hoe moet je dat intypen en gebruiken?
Nee, daar komen de variabelen in te staan. Voorbeeldje van een update-query met een waarde uit een POST-formulier en een waarde uit de url:
<?php
$query = "
UPDATE
tabelnaam
SET
kolom = '".mysql_real_escape_string($_POST['veldnaam']."'
WHERE
id = '".mysql_real_escape_string($_GET['id']."';
";
?>
Data door de user verstuurd is nooit te vertrouwen!

@Tom: Heb je wel de magic_quotes uitgezet? Die zooi heb je niet nodig, maar je moet dan wel op een andere manier de boel beveiligen. Wil je SQL-injection testen, zul je dit dus uit moeten zetten.

Daarnaast zul jij wel iets moeten uitvoeren wat ook effect heeft op de getoonde data. Met een SELECT en UNION extra data ophalen is leuk en aardig, maar wanneer de resultaten niet worden gefetcht in de PHP-code, zul je dit dus niet op het scherm zien. Ga maar eens klooien met een DELETE of inloggen zonder wachtwoord. Dat is veel leuker!

Ps. Voor FireFox zijn leuke tools te krijgen om data aan te passen in formulieren e.d.
Je kunt dmv SQL injectie extra commando's aan de query toevoegen. Je kunt dus wel alle adressen selecteren maar dat betekent nog niet dat je ze ook kunt tonen. Dan moet de PHP code daar ook nog eens geschikt voor zijn!

Het komt erop neer dat je een zodanige string invoert dat je query er bijvoorbeeld zo uit komt te zien:

SELECT *
FROM tabel
WHERE id = 1 OR 1 = 1

Oftewel, alle records worden nu opgehaald. Op deze manier kun je natuurlijk ook de query afsluiten met een ; en tegelijkertijd een tweede query laten uitvoeren. DROP of DELETE queries zijn hier fijne voorbeelden van...

Maar goed, zorg dus altijd dat gebruikers input beveiligd is voordat je deze in een query gebruikt...

ps. @Frank: je mist 2x een ) in je query ;-)
Deze pagina is een test pagina voor leden om te zien of je achter de emailadressen kan komen dmv een sql injectie in de $_GET.
dus: http://www.hackthissite.org/missions/realistic/4/products.php?category=1
en daarachter de sql injectie om alle emailadressen te achterhalen, maar wat is hier dan verkeerd aan:

Http://www.hackthissite.org/missions/realistic/4/products.php?category=1 UNION ALL SELECT *,*,* FROM email
???

gr tom


ps, die plugins heb ik al voor ff zoals firebug, tamper data, en modify headers, maar ik wil weten hoe zo'n url er uit komt te zien voluit getypt.
En waarom zou dit script het resultaat van jouw hack moeten gaan fetchen en tonen? Dat zal zelden het geval zijn.

voer een DELETE uit om te zien of je kunt hacken.
@ pgFrank,
dit script is een script door de site zelf opgesteld, het is een hack site die je alle bugs leert in een website en die hebben het zo aangepast dat als jij die goede code gebruikt dat je dan ziet "mission completed" en de resultaten worden getoond, dat hebben ze zo gemaakt. Maar ik wil weten hoe je het dus in je url verwerkt.
gr tom
Tom, lees nou mijn post nog eens en ga gewoon wat dingen proberen. Schrijf zelf een kleinscriptje waarin je een gegeven GET variabele echot om te zien hoe een ingevulde waarde eruit komt.

Reageren