login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[SQL] Query In een Query

Offline Badeendjey - 11/11/2007 16:46 (laatste wijziging 11/11/2007 16:46)
Avatar van BadeendjeyNieuw lid Hallo,

Ik ben me eens wat verder aan het verdiepen in SQL injection, zodat ik mijn veiligheid in php scripts kan verbeteren.
Dus zat ik eens rond te kijken naar een Query in een Query de mogelijkheid.

dit is geen verkeerde query:

  1. <?php
  2. mysql_query("select a.news_id from news as a where a.news_id = 1 AND 1=(SELECT COUNT(*) FROM blabla) and a.news_online <= now() and (a.news_offline > now() or a.news_neverexpire = 1");
  3. ?>


Er wordt een query (De 'AND 1=(SELECT COUNT(*) FROM blabla)'), in de query uitgevoerd.
Dus als dat mogelijk is, dan is een insert/update/delete toch ook wel mogelijk vroeg ik mij dan af, alleen dan krijg ik foutmeldingen?

Hoe kan je dan een insert/update/delete query uitvoeren, in een andere query?

Bedankt,

3 antwoorden

Gesponsorde links
Offline Ibrahim - 11/11/2007 16:55
Avatar van Ibrahim PHP expert een insert/update/delete query is niet mogelijk, als je logisch nadenkt snap je ook wel waarom 
Offline ranco - 11/11/2007 16:58 (laatste wijziging 11/11/2007 17:02)
Avatar van ranco PHP gevorderde @Psycho: Dit kan wel. Lees de link onderaan mijn post maar eens.

Vaak wordt een OR statement gebruikt. Hierdoor krijg je bijvoorbeeld bij je inlogscherm een code die grofweg zo gaat:
(Gebruiker probeert een injection):

  1. SELECT * FROM gebruikers WHERE Gebnaam=$_POST AND Wachtwoord=$_POST.


In die laatste post, voor het wachtwoord, kun je dan in het wachtwoordveld het volgende invullen:

'Or r=1'; Deze wordt altijd als true beschouwd, en voila, je bent ingelogd. Omdat R de waarde 1 heeft gekregen en daarom dus waar is. Die OR command zorgt ervoor dat gekozen kan worden tussen twee eisen waaraan een select moet voldoen. Een correct wachtwoord en gebruikersnaam, of 2=2. Dit laatste is altijd het geval.

Voorkom dit door de invoervelden te filteren voor injections. Dit doe je zo:
  1. $nieuwe_gebnaam = mysql_real_escape_string($_POST["gebnaam"]);


Edit: Zie deze post van microsoft. Staat het duidelijk in uitgelegd:
http://msdn.mic...LInjection/
Offline Badeendjey - 11/11/2007 17:07 (laatste wijziging 11/11/2007 17:08)
Avatar van Badeendjey Nieuw lid ok, hoe het te voorkomen etc dat snap ik wel.
Verder over hoe de login, dat snap ik ook nog wel dat ' '1'='1'.

Maar ivm bijv. bij mijn school, was ik wat aan het koekeloeren op de site. En kwam ik deze sql error tegen:
  1. Invalid SQL [SELECT a.news_id FROM news AS a WHERE a.news_id = test AND a.news_online <= now() AND (a.news_offline > now() OR a.news_neverexpire = 1) AND a.news_active = 1 ] 1054-Unknown COLUMN 'test' IN 'where clause'


(die 'test' heb ik ingevuld in de ?id= hoor)

Waaruit ik dus opmaak dat de query dit is:
  1. SELECT a.news_id FROM news AS a WHERE a.news_id = $_GET['id'] AND a.news_online <= now() AND (a.news_offline > now() OR a.news_neverexpire = 1) AND a.news_active = 1


Aan de error is ook al te zien dat magic quotes uitstaat.
Dus met die '1=(SELECT COUNT(*) FROM users)' ben ik erachtergekomen dat de table users bestaat.

Dus wil ik natuurlijk een user inserten in de users table.
En dat zou ik willen weten hoe dat te doen 

Hopelijk snapen jullie me nu beter 
Dusja, is het mogelijk om op een alternatieve manier te inserten?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s