Über 1800 Aufrufe meiner Webseite Hacker-Versuch?
bearbeitet von Robert B.Moin,
> Heute morgen 5:28 und 5:29 kamen 211 Aufrufe in dieser Form:
>
> /?TID=17540+%2F%2A%2A%2F%27%2F%2A%2A%2FOR%2F%2A%2A%2F1%2F%2A%2A%2FGROUP%2F%2A%2A%2FBY%2F%2A%2A%2FCONCAT%280x6167754e%2C%28SELECT%2F%2A%2A%2FMID%28IFNULL%28USER%28%29%2C%2F%2A%2A%2F0x20%29%2C1%2C55%29%29%2C0x7241306a%2CFLOOR%28RAND%280%29%2A2%29%29%2F%2A%2A%2FHAVING%2F%2A%2A%2FMIN%280%29%23--%2F%2A%2A%2F-
welcher Datentyp wird denn für den Wert von `TID` erwartet?
> In den SQL-Kommandos werden die Daten mit addslashes behandelt.
Das war, ist und wird niemals keine gute Idee (sein). Verwende
* [`mysqli_real_escape_string`](https://www.php.net/manual/en/mysqli.real-escape-string.php) **richtig**
* oder [prepared statements](https://www.php.net/manual/en/mysqli.prepare.php)
>
> Meldung 08.12.2021 22:21:27
>
> 1062: Duplicate entry 'aguNosmer@localhostrA0j1' for key 'group_key'
>
Bei so einer Fehlermeldung für „Garbage In“ würde ich aber sehr stutzig werden, denn es heißt nicht, dass eine offensichtlich falsche ID übergeben, sondern anderer SQL-Code ausgeführt worden ist. Das ist potenziell gefährlich!
> ~~~sql
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> # welche sprachen sind vorhanden?
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> SELECT
> ueb1.sprache
> FROM bia_uebersetzungen ueb1
> WHERE ueb1.tabelle = 'termine'
> AND ueb1.tabelle_id = '17540 /**/'/**/OR/**/1/**/GROUP/**/BY/**/CONCAT(0x6167754e,(SELECT/**/MID(IFNULL(USER(),/**/0x20),1,55)),0x7241306a,FLOOR(RAND(0)*2))/**/HAVING/**/MIN(0)#--/**/-'
> ~~~
Ich vereinfache mal:
~~~sql
SELECT ueb1.sprache
FROM bia_uebersetzungen ueb1
WHERE ueb1.tabelle = 'termine'
AND ueb1.tabelle_id = '17540 /**/'OR 1
GROUP BY CONCAT(0x6167754e,(
SELECT MID(IFNULL(USER(),0x20),1,55)),0x7241306a,FLOOR(RAND(0)*2))
HAVING MIN(0)
~~~
Ich wette, dass deine Intention vor dem `OR` in Zeile 4 endet.
> Allein, um die abzuwehren ist der Server ja beschäftigt.
Im Grunde genommen kann der Server schon das Handtuch (zurück-) werfen, wenn da keine gültige „TID“ ankommt – dafür muss kein einziges SQL-Statement ausgeführt werden.
> Aber kann das Schaden an den Daten anrichten?
Anscheinend kann da beliebiger SQL-Code eingeschleust werden, also lautet die Antwort *Ja*.
Viele Grüße
Robert