Evt. SQL-Injection in meinem Script möglich?

#0
17.01.2009, 18:10
...neu hier

Beiträge: 3
#1 Hallo,

Mich hat gerade ein potentieller Hacker angeschrieben, dass ich auf meiner Seite eine Sicherheitslücke hätte, die man ausnutzen konnte.

Das hat mich natürlich interessiert, und wenn jemand schon so nett ist mich anzuschreiben, schreibe ich auch zurück.

Auf die Frage wie man sie jedoch nun ausnutzen kann, bekam ich immer nur als Antwort dass es 100% möglich ist.

Meiner Ansicht nach ist es aber keine Sicherheitslücke, da man sie auch nicht ausnutzen kann. Es lässt sich einfach kein vernünftiger SQL-Befehl einschleußen.

Aber trotzdem würde ich gerne euch fragen, evt. wisst ihr mehr.

Die Abfrage sieht wie folgt aus:

PHP Code


<?php
INSERT INTO PR_SEARCHLOG 
(SEARCHTERM,RESULTS,SOUNDEX_ID,IPVALUES ('123',750,'61850','[B]sql-injection[/B], xxx.xxx.xxx.xxx')
?>



123, 750, 61850 sind einfach Werte, die in die DB eingetragen werden.
xxx.xxx.xxx.xxx steht für die IP des Users.
Und bei "sql-injection" wird die Eingabe nicht gefiltert.

Nun dachte ich an eine IF-Abfrage, aber geht ja nicht, sonst erhält man subquery returns more than 1 row...

Wo ist da eine Lücke? Ich überlege jetzt seit einer vollen Stunde.

P.S. BENCHMARK ist auf meinen Server deaktiviert.

Schonmal danke.
Seitenanfang Seitenende
17.01.2009, 21:04
Member
Avatar Gool

Beiträge: 4730
#2 Um da genaueres herausfinden zu können, bräuchte man noch die Adresse Deiner Webseite. Allein aus dem SQL-Befehl wird man kaum was erkennen können.

Eine SQL-Injection erfolgt in der Regel bei der Übergabe von Variablen an ein Script, welches auf eine SQL-Datenbank zugreift. Entweder modifiziert man die Variablen direkt in der URL (aus script.php?insert='Hallo Welt' wird ein script.php?insert=');?>', wodurch dann der Rest des PHP-Scripts angezeigt werden könnte, wo durchaus Passwörter und Tabellen-Namen drin stehen könnten, mit denen man noch mehr Unfug treiben kann) oder über eine Eingabe in einem ungesicherten Formular (dann gibt man );?> ein und erhält das gleiche Ergebnis wie mit der ersten Methode). Meine Beispiele sind nur exemplarisch und bedeuten nicht, dass sie im konkreten Fall funktionieren könnten. Auf jeden Fall ist es anzuraten, variable Werte, die in einem SQL-Befehl eingetragen werden, vorher noch gegen schädliche Eingaben zu filtern.

Du solltest dies hier evtl. mal durchlesen: http://de2.php.net/htmlentities
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
17.01.2009, 23:17
...neu hier

Themenstarter

Beiträge: 3
#3 Danke Gool
Hättest du dazu evt. ein Beispiel, bei dem das mit ;?> funktioniert?

denn ich kann mir das schwer vorstellen ehrlich gesagt.

gruß.
Seitenanfang Seitenende
18.01.2009, 00:23
Member
Avatar Gool

Beiträge: 4730
#4 hmmm... müsste ich selbst was basteln... aber ich hab ja Zeit ;) Und es interessiert mich ja auch ein wenig... ich melde mich dann wieder ;)
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
18.01.2009, 01:18
Member
Avatar Gool

Beiträge: 4730
#5 Sorry, ich krieg da auf die Schnelle nix brauchbares gebastelt. Aber vielleicht sind folgende Links interessant?

http://de.wikipedia.org/wiki/SQL_Injection
http://www.online-tutorials.net/security/sql-injection/tutorials-t-93-218.html
http://www.heise.de/security/Giftspritze--/artikel/43175

Sehr interessant sind auch die Videos zum Thema:
http://video.google.de/videosearch?q=sql+injection&sourceid=navclient-ff&rlz=1B3GGGL_deDE258DE286&um=1&ie=UTF-8&sa=X&oi=video_result_group&resnum=5&ct=title#
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Dieser Beitrag wurde am 18.01.2009 um 01:38 Uhr von Gool editiert.
Seitenanfang Seitenende
18.01.2009, 08:36
Moderator
Avatar hevtig

Beiträge: 2286
#6 Auch folgende Links könnten interessant sein:
http://board.protecus.de/t23636.htm
http://board.protecus.de/t22173.htm?highlight=injection
http://board.protecus.de/t29562.htm?highlight=injection
__________
Woher soll ich wissen was ich denke, bevor ich höre was ich sage??
Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+!
Seitenanfang Seitenende
18.01.2009, 09:16
...neu hier

Themenstarter

Beiträge: 3
#7 Ich danke euch, werde mich informieren. Kann ja auch einfach das ganze schützen, dann passt es auch. Aber evt. finde ich die Technik ja trotzdem noch heraus. wenn nicht, auch egal..

Zitat

Sorry, ich krieg da auf die Schnelle nix brauchbares gebastelt. Aber vielleicht sind folgende Links interessant?
Meinst du damit die SQL-Injection oder das Beispiel mit ;?> einschleußen?

Danke und ein schönen Sonntag noch!
Seitenanfang Seitenende
20.01.2009, 16:41
...neu hier

Beiträge: 2
#8 So wies oben steht wird in der Benutzereingabe mit ");?>" das php-Script beendet, quasi mitten in der SQL-Querry, alles hinter dem Script wird als html ausgegeben, also in deinem Fall entsprechend die IP-Adresse eines Benutzers.

2. wenn es moeglich ist ungefilterten Input in die DB einzubasteln, kann man auch herrlich JS-Code einbauen ... je nachdem, fuer was dieses Feld dann genutzt wird ... bsw als Inhalt von nem Textareafeld (laesst sich in nem Angriff schnell herausfinden, zumal ja nur ein Feld Eingaben zu liefern scheint), kann man ohne weiteres das Textarea mit Eingabe von "</textarea><script type=text/javascript>alert(1)</script>" beenden, das hat ein leeres Textarea in der DB zur Folge, gefolgt von einem fest eingebauten JS-Code, der dank nicht vorhandener Validierung quasi vollkommen beliebig sein kann (abhaengig von der Feldlaenge in der DB). Der oben angegebene Bsp-Code sollte heoretisch in ein standard-40-Zeichen DB-Feld locker reingehen ...

Jetzt sucht sich der Angreifer noch ne Moeglichkeit, evtl bei nem anderen User nen gefaktes Textarea einzubringen, wo er den Inhalt vom infizierten Benutzer mit dem JS-Code ausliesst und schon kann er mit etwas glueck ohne jedes Problem beliebig Daten auslesen und du findest das Problem nur noch mit erheblichem Aufwand, da man da quasi die ganze DB durchforsten darf.

Das ist jetzt etwas kurz erklaert, ich hoffe dass es verstaednlich ist.
Seitenanfang Seitenende
20.04.2009, 17:05
...neu hier

Beiträge: 2
#9 es wäre nett, wenn du die GENAUE query postest, dann könnte man etwas genauer sagen, ob man injecten kann.

BENCHMARK ist nicht unbedingt notwendig, in solche query kann man auch anders injecten!
IF((ord(substr(SELECT password FROM usertabelle),1,1)=75),TRUE,FALSE)

was dabei passiert?
für den parameter, der vuln ist, wird abgefragt( per if) das passwort aus der usertabelle, davon das erste zeichen!
das erste zeichen wird in ascii umgewandelt (ord()), und danach wird gefragt ob der ascii wert des ersten buchstabens des passworts = 75 ist
75 ist in ascii meine ich "K"

wenn JA, dann wird TRUE ausgeführt, wenn NEIN dann FALSE

TRUE und FALSE kann man durch werte ersetzen, die das script provoziren etwas zu tun!
sagen wird:
true: klappt'
false: mist'

in beiden fällen wäre ein fehler entstanden, anhan des html-codes der beim fehler entseht, kann man schlussfolgern ob der erste buchstabe ein K ist oder nicht!
kommt im quelltext(html) ein "klappt" vor, dann ist es ein K, andernfalls nicht ;)

so arbeiten moderne exploits ;)

Die Art von Angriff, wie sie hier verwendet werden könnte, wäre eine "BLIND SQL INJECTION"
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: