das Thema kennen wahrscheinlich viele Websites-Betreiber: die Versuche per SQL Injection eine Website zu hacken. Bei einzelnen Seiten habe ich eigen entwickelte CMS im Einsatz, so dass Script Kiddies, die fertige Snipplets verwenden, nicht weiterkommen; zumindest scheint es bisher niemandem gelungen zu sein Mein Script fängt fehlerhafte Eingaben weitgehend ab (hoffe ich mal), z.B. wenn anstelle Zahlen bei id eingegeben werden. Und diese fehlerhaften Eingaben sammle ich inzwischen, um zu schauen, was passiert.
Offen gestanden verstehe ich aber viele der Eingaben nicht bzw. erkenne nicht den Sinn dahinter. Kann mir da jemand mal weiterhelfen????
Hier ein paar Beispiele, immer voran id=
<pl=urhfbvgn'));select%20pg_sleep(3);%20--%20
<pl=(select%20convert(int%2cchar(65)))
-1));select pg_sleep(5); --
-1; waitfor delay \'0:0:10\' --
-1\" OR 3+822-822-1=0+0+0+1 --
-1 OR 3+254-254-1=0+0+0+1
-1\' OR 3*2<(0+5+777-777) or \'8MW8sg1J\'=\''
Allein heute hatte ich auf einer meiner Seiten über 800 solcher Codes und ich würde einfach gern verstehen, was damit erreicht werden soll.
In der ersten zeile wird einfach nur gemessen ob SQL injections bei dir moeglich sind und ob du postgresql verwendest (pg_sleep).
Wenn ja, dann wartet PostgreSQL (und damit der webserver bevor er die seite zurueckgeben kann) seite 3 sekunden. - wenn nicht, dann kommt der server schon vorher mit einer fehlermeldung zurueck.
Der angreifer will wahrscheinlich nur ohne viel aufwand austesten bei welchen seiten seine angriffe erfolg haben koennten.
Den rest verstehe ich auch nicht ganz. char(65) = A, und das wird versucht nach INT zu convertieren? Ich habe nur mal schnell nachgesehen, und scheinbar gibts in postgres keine allgemeine "convert" funktion (dafuer aber to_int(), to_char(), to_date() usw.). Ich weiss aber, das die convert funktion unter MySQL existiert, aber da benutzt man sie eigentlich nur um texte z.b. von russisch nach utf8 umzuwandeln. Auf die idee, sowas fuer ascii chars zu verwenden bin ich noch nicht gekommen.
Der rest ist nur ein paar nummern zusammenzaehlen und miteinander zu vergleichen. Mit dem OR dazwischen wird geprueft, ob mindestens eine der anweisung davon TRUE zurueckgibt.
Das endergebniss der ganzen abfrage sollte dann entweder 0 oder 1 sein.
Ich wuerde mal raten dass der angreifer versucht herrauszufinden ob du eine bestimmte version verwendest, die irgendwelche bugs hat die in spaeteren versionen gefixt wurden. Damit kann er besser beurteilen welche bugs und exploits bei dir moeglicherweise funktionieren, und welche nicht.
Ich vermute, dass lediglich versucht wird herauszufinden welche Datenbank verwendet wird für SQL-Injections. Daher eben die spezifischen Befehle (nur mySQL/nur Postgres).