Ja, zelfs de besten maken fouten.
Ik heb zonet ontdekt dat ik een sql injectie foutje had gemaakt in Onlinegamemanager.com => Start your own free game! ***
De fout kwam doordat een bepaalde functie een waarde controleerde, maar aangezien deze controle enkel in die ene functie zat, heb ik er niet aan gedacht dit een jaar later in een andere nieuwe functie ook te doen.
Ik ging er vanuit dat de input werd gefilterd in het begin van het script en heb dit niet gecontroleerd.
Ik merkte dit doordat er hoge load was op de mysql database en er veel nginx foutmeldingen waren opeens op een van mijn servers.
Deze url werd aangeroepen bv in de logs:
pagina.php?parameter=de11111111111111111111111111%27 UNION SELECT CONCAT(CHAR(100,100,100),CHAR(91,88,93),GROUP_CONCAT(t.email),CHAR(91,88,88,93)) FROM (SELECT email FROM main.`options` WHERE `email` LIKE char(37,64,37) LIMIT 845,20)t limit 0,1 -- /* order by %27as
Dit toont verder ook aan dat de persoon al vrij veel te weten was gekomen van mijn database structuur:
hij wist de juiste tabel naam, welke velden in die tabellen zaten en was er bijna achter hoe de gegevens eruit te krijgen.
Had ik 5 minuten later gereageerd, had hij alle gegevens in de tabel kunnen binnenhalen.
Hij heeft wel wat buit gemaakt waarschijnlijk, een aantal email adressen, maar ik was er gelukkig snel bij.
Zo te zien heeft hij vooral de oudere email adressen gestolen, welke voor 95% niet meer werken.
Een tweede aanval zag er zo uit:
=-4802%27 UNION ALL SELECT (SELECT CONCAT(0x71726e6571%2CIFNULL(CAST(email AS CHAR)%2C0x20)%2C0x6d697279656c%2CIFNULL(CAST(pass AS CHAR)%2C0x20)%2C0x7168696471) FROM main.%60%5Busers%5D%60 LIMIT 859%2C1)%23
Ik zie pass erin staan, maar zo noemt dat veld niet. Ik denk dus niet dat hij het wachtwoord heeft kunnen stelen.
Dat is bovendien ook uniek encrypted per user, met aparte salts. Oef.
De query had gelukkig ook een LIMIT 1 op het einde, waardoor hij rij per rij eruit diende te halen.
Wil je mee op onderzoek wie het was?
Dit zijn de aanvallende ip's:
- xxx.ip.telfort.nl => Klacht ingediend bij Telfort, eigenaar ip krijgt waarschuwing
- xxx Hostname:killerbasement.tk => af laten sluiten
(Ip's verwijderd)
Conclusie:
- reageer meteen in geval je opeens snel veel foutmeldingen hebt in je logs
- kijk meteen naar welke queries er draaien op dat moment en hou je ogen open voor rare dingen
- gebruik een LIMIT 1 op je queries waar nodig
- altijd denken aan sql injectie
Krijgen jullie die 2de query terug vertaald naar mensentaal?