PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit VMS1 26 Milliarden Lose aus dem Nichts..



Gothicman1
21.07.2007, 14:06
Hallo,

ich hatte bei mir gestern einen User, der konnte wohl Lose aus dem Nichts auf meiner Seite generieren.
Bei Klamm ist er schon gesperrt. Er hat es geschafft in 20 Minuten auf meiner Seite über 25 Milliarden Lose irgent wie aus dem Nichts entstehen zu lassen, ohne das irgent etwas in der Datenbank oder geschweige denn im Buchungstext zu finden ist. Er hat auch keine Aktivpunkte oder Verzinsung bekommen, was bei diesen Losebetrag sehr verwunderlich ist. Selbst der Refverdienst war 1 einziges Los. Der Buchungstext bleibt leer.
Kontostand des Users war: 25362412101.30 Lose
Leider geht die Buchungsanzeige nur bis zum 2 stelligen Millionenbereich.
Hier mal ein kleiner Auschnitt aus den Buchungen, den Usernamen habe ich weg gemacht:


20.07.2007 - 22:16 Uhr 99.999.999,99
20.07.2007 - 22:16 Uhr 99.999.999,99
20.07.2007 - 22:16 Uhr 99.999.999,99
20.07.2007 - 22:15 Uhr -99.999.999,99
20.07.2007 - 22:15 Uhr 99.999.999,99
20.07.2007 - 22:15 Uhr 99.999.999,99
20.07.2007 - 22:15 Uhr 99.999.999,99
20.07.2007 - 22:15 Uhr -99.999.999,99
20.07.2007 - 22:15 Uhr 99.999.999,99
20.07.2007 - 22:15 Uhr 99.999.999,99
20.07.2007 - 22:14 Uhr 99.999.999,99
20.07.2007 - 22:14 Uhr 99.999.999,99
20.07.2007 - 22:14 Uhr 99.999.999,99
20.07.2007 - 22:14 Uhr -90.000.000,00
20.07.2007 - 22:14 Uhr 77.597.631,00
20.07.2007 - 22:14 Uhr 77.597.631,00
20.07.2007 - 22:13 Uhr 77.597.631,00
20.07.2007 - 22:13 Uhr 77.597.631,00
20.07.2007 - 22:13 Uhr -60.000.000,00
20.07.2007 - 22:13 Uhr 23.597.631,00
20.07.2007 - 22:13 Uhr 23.597.631,00
20.07.2007 - 22:13 Uhr 23.597.631,00
20.07.2007 - 22:12 Uhr -20.000.000,00
20.07.2007 - 22:12 Uhr 5.597.631,00
20.07.2007 - 22:12 Uhr 5.597.631,00
20.07.2007 - 22:12 Uhr 5.597.631,00
20.07.2007 - 22:12 Uhr -2.000.000,00
20.07.2007 - 22:12 Uhr 3.797.631,00

Dies ist nur ein kleiner Auschnitt wie gesagt es fehlt der Buchungstext und der User hatte vorher 1000 Lose auf seinem Konto.
Kann sich das jemand erklären?

LG Gothicman1

DimpleX
21.07.2007, 16:39
grüß dich schade das wir nur von einander lesen wenn du wieder mal opfer von betrügern bist


der hat denke ich mal ne mysql injektion gemacht kannst mir mal an DimpleX@FakerHunter.de die serverlogs(http_access.log)senden dann schaue ich mir das an wie er es genau gemahct hat


gruß
DimpleX

MasterG
21.07.2007, 23:27
Kann man gegen solche Injektionen was machen?

swinxx
22.07.2007, 01:11
Original von MasterG
Kann man gegen solche Injektionen was machen?

Machen kann man sicher was dagegen, die Frage ist nur was ?

cu, Swinxx

Hardy
22.07.2007, 09:37
Original von swinxx

Original von MasterG
Kann man gegen solche Injektionen was machen?

Machen kann man sicher was dagegen, die Frage ist nur was ?

cu, Swinxx

Also als erstes mal noHTMLnick einbauen.Dann ganz einfach die abfrage zum ändern des nicknames aus dem userprofil nehmen und somit hat man schonmal einen großen schritt gegen die gängige sql-injektionen getan.Dazu gibt es noch das addon sicherheits-funktion aus dem dl bereich der die sonderzeichen maskiert allerdings kann es auch zu problemen bei einigen addons kommen (bei mir war es zb das bank addon was dann nicht mehr ging)

Gothicman1
22.07.2007, 11:33
[/quote]

Also als erstes mal noHTMLnick einbauen.Dann ganz einfach die abfrage zum ändern des nicknames aus dem userprofil nehmen und somit hat man schonmal einen großen schritt gegen die gängige sql-injektionen getan.Dazu gibt es noch das addon sicherheits-funktion aus dem dl bereich der die sonderzeichen maskiert allerdings kann es auch zu problemen bei einigen addons kommen (bei mir war es zb das bank addon was dann nicht mehr ging)[/quote]

Ja aber bei mir ist die Eingabe des Nicknamens schon auf 10 Zeichen begrenzt, so das man keinen HTML Code einsetzen kann. Man kann den Usernamen zwar ändern, doch auch nicht auf mehr als 10 Zeichen. Ich denke daran kann es nicht gelegen haben.

LG Gothicman1

Koki12
22.07.2007, 17:12
GeiL wär ja nur, wenn diese dann auch aufn EF Account sind !

Hardy
22.07.2007, 17:21
Original von Koki12
GeiL wär ja nur, wenn diese dann auch aufn EF Account sind !

können sie ja auch aber bitte im tresor

MasterG
22.07.2007, 21:17
Und wie macht man das mit dem noHTMLnick???

Benutzer1699
22.07.2007, 22:26
ich würde einfach mal alle db_querys und mysql_querys prüfen. Alle Angaben aus Variablen mal mit mysql_real_escape_string bearbeiten.

Falls jemand Probleme hat... ;) Sollte jemand das VMS2 benutzen habe ich eine Modifikation der Klassen-Datei parat... nicht von unabhängigen Usern erprobt.

www.php.net/mysql_real_escape_string

Gothicman1
23.07.2007, 00:52
Hallo,

also ich weiss das es wohl am Besuchertausch von dude32 liegt. Dort kann man wohl beliebig Punkte in Lose tauschen..mehr kann ich dazu noch nicht sagen weiss bloss aus dem access.log das es über den Besuchertausch passiert ist.

marcaust
23.07.2007, 10:12
Ich hab mir die Datei bei Losekeller mal angesehen und dabei bemerkt das die Funktion: buchungsliste nicht korrekt ausgeführt wird und zum Abbruch des Scripts führt. Dadurch erklärt sich auch ds in den Buchungen kein Buchungstext vorhanden ist.

Abhilfe:
Die 2 Vorhandenen Zeilen die die Funktion: buchungsliste aufrufen entsprechend berichtigen.

Das Problem liegt bei:
...id,'+'.$kosten.' (BeTauPunkteVerkauf)',$schnittste.... wo aus dem +, $kosten und (BeTauPunkteVerkauf) dann ein +100(BeTauPunkteVerkauf) wird. Also ein text wo eine Zahl erwartet wird.
Das kann nicht gehen da an der Stelle eine Zahl erwartet wird.

Eine korrektur nach:
_id,'-'.$kosten, '(BeTauPunkteVerkauf)'

sollte das Problem beheben. (Vergesst nicht das Vorzeichen (+ und - entsprechend an den Stellen zu setzen)

marcaust
23.07.2007, 10:55
Original von ztk-hosting
ich würde einfach mal alle db_querys und mysql_querys prüfen. Alle Angaben aus Variablen mal mit mysql_real_escape_string bearbeiten.

Falls jemand Probleme hat... ;) Sollte jemand das VMS2 benutzen habe ich eine Modifikation der Klassen-Datei parat... nicht von unabhängigen Usern erprobt.

www.php.net/mysql_real_escape_string

Was mich daran stört ist das in den Beispielen da alles mit sprintf Formatiert wird.
Das find ich kompliziert und unleselich.

Würde das auch gehen wenn man die bsiherige schreibweise in dem Script beibehält?

Benutzer1699
23.07.2007, 12:28
Natürlich ginge das auch, wers mag :rolleyes:



xyz_query("UPDATE wicht SET kontostand='". mysql_real_escape_string($_GET['wiesoauchimmer']) ."' WHERE xyz");


Ich finde die %-Schreibweise übersichtlicher da Fehler im SQL-Syntax so sehr schnell zu erkennen sind.

VMS1
23.07.2007, 15:55
Hallo,
ich weiß nicht ob es derselbe Bug ist, aber es hört sich ganz danach an. Das Problem ist wenn man eine Kommazahl mit Komma statt Punkt eingibt, dann werden zwar die Lose gutgeschrieben, aber keine Punkte abgezogen. Bei manchen ist das gefixt, bei manchen nicht. Eigentlich ist dieser Bug aber altbekannt.
Trotzdem dickes PFUI! wer das ausnutzt!

Das hier sollte Abhilfe schaffen:


if (ereg("[^0-9]", $HIER_NAME_DES_EINGABEFELDS)) $error .= 'Der Betrag muß aus ganzen Zahlen bestehen!<br>';

Und dann vor der Kontobuchung:


if (!$error) {
kontobuchung.....
} else {
echo ''.$error.'';

So in der Art. Den genauen Inhalt der Datei kenn ich leider nicht, sonst wär´s ein wenig ausführlicher.

Gruß
Marco

Gnarf
23.07.2007, 16:11
vorsicht auch beim sparbuchaddon von Shandra wenn du das drin hast...

marcaust
24.07.2007, 13:44
Original von VMS1
Hallo,
ich weiß nicht ob es derselbe Bug ist, aber es hört sich ganz danach an. Das Problem ist wenn man eine Kommazahl mit Komma statt Punkt eingibt, dann werden zwar die Lose gutgeschrieben, aber keine Punkte abgezogen. Bei manchen ist das gefixt, bei manchen nicht. Eigentlich ist dieser Bug aber altbekannt.
Trotzdem dickes PFUI! wer das ausnutzt!

Das hier sollte Abhilfe schaffen:


if (ereg("[^0-9]", $HIER_NAME_DES_EINGABEFELDS)) $error .= 'Der Betrag muß aus ganzen Zahlen bestehen!<br>';

Und dann vor der Kontobuchung:


if (!$error) {
kontobuchung.....
} else {
echo ''.$error.'';

So in der Art. Den genauen Inhalt der Datei kenn ich leider nicht, sonst wär´s ein wenig ausführlicher.

Gruß
Marco

Das werd ich nachher mal testen.
Evtl. ist es Sinvoll die Funktion kontobuchung das machen zu lassen.....

Wobei sich auch die Frage stellt ob man anstelle von "ereg..." nicht besser ein is_int oder is_numeric macht. Ich denke mal das ist schneller als mit regulärer Ausdrücken zu arbeiten.

VMS1
24.07.2007, 20:36
Hallo.

Stimmt. is_numeric oder is_int ist etwas schneller. Allerdings erlauben diese wieder Komma-Zahlen und Vorzeichen. z.B. -0.001 wäre auch numeric. Ich glaube zwar nicht, das das noch eine Hintertür für Faker auf läßt, allerdings weiß ich bei der ereg-Lösung, das wirklich nur noch ganze Punkte getauscht werden können. Alle Eingaben außer 0-9 sind dann halt sicher Eingabefehler.

Was deinen Vorschlag mit der kontobuchung angeht: Sehr gute Idee! Evtl. sollte man mal schaun ob man das da direkt einbauen kann.
Dazu hätte ich auch noch einen Vorschlag, wobei man allerdings etwas mehr umbauen müßte: Man könnte z.B. mit mysql_affected_rows den Wert 0 oder 1 zurückgeben. So das der Rest (z.B. buchungsliste, refumsatz, Kampagne einbuchen...), nur noch ausgeführt wird, wenn tatsächlich eine Kontobuchung ausgeführt wurde. Ich werd´s mir mal anschaun.

Gruß
Marco

marcaust
25.07.2007, 11:09
Original von VMS1
Hallo.

Stimmt. is_numeric oder is_int ist etwas schneller. Allerdings erlauben diese wieder Komma-Zahlen und Vorzeichen. z.B. -0.001 wäre auch numeric. Ich glaube zwar nicht, das das noch eine Hintertür für Faker auf läßt, allerdings weiß ich bei der ereg-Lösung, das wirklich nur noch ganze Punkte getauscht werden können. Alle Eingaben außer 0-9 sind dann halt sicher Eingabefehler.

Was deinen Vorschlag mit der kontobuchung angeht: Sehr gute Idee! Evtl. sollte man mal schaun ob man das da direkt einbauen kann.
Dazu hätte ich auch noch einen Vorschlag, wobei man allerdings etwas mehr umbauen müßte: Man könnte z.B. mit mysql_affected_rows den Wert 0 oder 1 zurückgeben. So das der Rest (z.B. buchungsliste, refumsatz, Kampagne einbuchen...), nur noch ausgeführt wird, wenn tatsächlich eine Kontobuchung ausgeführt wurde. Ich werd´s mir mal anschaun.

Gruß
Marco

Wobei man da versuchen könnte das Ergebnis von mysql_affected_rows in den einzelnen Funktionen zu prüfen. Die Änderungen sich dann lediglich auf die funktions.php beziehen und man nicht das ganze Script abarbeiten must.

Mal sehen, wenns meine zeit zu lässt, werd ichs auch mal versuchen.