Hi,
ich bin aktuell echt am verzweifeln.
Eine Webseite nutzt für eine Login Validierung zur Erschwerung ein Hash Check System.
D.h. wenn man die Seite aufruft, wird vom Server eine 5 stellige Zeichenkette in ein unsichtbares input-Feld geschrieben.
Beim einloggen (also beim senden der login post request) wird per JavaScript diese Funktion aufgerufen und die Zeichenkette als Parameter:
An sich ja sehr verständlich, es wird solange ein Hash generiert aus Math.random() bis in dem Hash diese Zeichenkette mal vorkommt und dann wird der random Wert zurückgegeben und dieser ist sozusagen der hash zur Validierung der dann auch wieder an den Server zurück geschickt wird.
Jetzt frage ich mich 1. wie können die serverseitig jetzt diesen Wert validieren?
Und 2. habe ich versucht den Algorithmus in C# zu portieren, allerdings ohne Erfolg.
Ich habe absolut keine Ahnung woran es scheitert. Ich versuche den Login von C# aus zu handeln. Wenn ich den JavaScript Algorithmus in meine eigene HTML Datei schreibe und die Webseite aufrufe, den hash token manuell rausfrickele und dann durch den JS algo laufen lasse und das Ergebnis davon dann mit der WebRequest aus C# ausführen lasse, funktioniert der login perfekt.
Lasse ich aber den C# Algorithmus mit dem hash token laufen und sende den mit der webrequest funktioniert der login nicht.
Jetzt die 2. Frage, woran liegt das? Sind vielleicht Math.random() und Random().NextDouble() unterschiedlich? Ich meine lt. Dokumentation generieren beide eine Zufallszahl zwischen 0 und 1.
Danke im Voraus
Grüße seh
PS: Das ganze wird übrigens kein Bot sondern wird hier auf der Arbeit benötigt. Die Webseite um die es sich handelt ist von einem Kunden von uns und der Kunde hat uns beauftragt mit einer Software auf die Webseite zuzugreifen und da Informationen zu grabben. Leider bieten die keine einfache API an und die wollen auch nicht das wir eine API für die machen also muss das ganze jetzt LEIDER GOTTES auf diese Art und Weise erledigt werden.
ich bin aktuell echt am verzweifeln.
Eine Webseite nutzt für eine Login Validierung zur Erschwerung ein Hash Check System.
D.h. wenn man die Seite aufruft, wird vom Server eine 5 stellige Zeichenkette in ein unsichtbares input-Feld geschrieben.
Beim einloggen (also beim senden der login post request) wird per JavaScript diese Funktion aufgerufen und die Zeichenkette als Parameter:
HTML-Quellcode
- function GenerateHashes(string) {
- var rand = Math.random();
- var hash = CryptoJS.SHA1(rand.toString() + rand.toString()).toString(CryptoJS.enc.Hex);
- while (hash.indexOf(string) == -1) {
- rand = Math.random();
- hash = CryptoJS.SHA1(rand.toString() + rand.toString()).toString(CryptoJS.enc.Hex);
- if (hash.indexOf(string) !== -1) {
- return rand;
- }
- }
- }
An sich ja sehr verständlich, es wird solange ein Hash generiert aus Math.random() bis in dem Hash diese Zeichenkette mal vorkommt und dann wird der random Wert zurückgegeben und dieser ist sozusagen der hash zur Validierung der dann auch wieder an den Server zurück geschickt wird.
Jetzt frage ich mich 1. wie können die serverseitig jetzt diesen Wert validieren?
Und 2. habe ich versucht den Algorithmus in C# zu portieren, allerdings ohne Erfolg.
C#-Quellcode
- private string GetHashMatchesHash(string s)
- {
- var rand = random.NextDouble();
- var hash = ComputeSHA1String(rand.ToString() + rand.ToString());
- while (hash.IndexOf(s) == -1)
- {
- rand = random.NextDouble();
- hash = ComputeSHA1String(rand.ToString() + rand.ToString());
- if (hash.IndexOf(s) != -1)
- return rand.ToString().Replace(',', '.');
- }
- return null;
- }
- private string ComputeSHA1String(string s)
- {
- byte[] bData = Encoding.Default.GetBytes(s);
- var sha = SHA1.Create();
- var hash = sha.ComputeHash(bData);
- var result = string.Empty;
- for(int i =0; i < hash.Length; i++)
- {
- result += hash[i].ToString("X2");
- }
- return result.ToLower();
- }
Ich habe absolut keine Ahnung woran es scheitert. Ich versuche den Login von C# aus zu handeln. Wenn ich den JavaScript Algorithmus in meine eigene HTML Datei schreibe und die Webseite aufrufe, den hash token manuell rausfrickele und dann durch den JS algo laufen lasse und das Ergebnis davon dann mit der WebRequest aus C# ausführen lasse, funktioniert der login perfekt.
Lasse ich aber den C# Algorithmus mit dem hash token laufen und sende den mit der webrequest funktioniert der login nicht.
Jetzt die 2. Frage, woran liegt das? Sind vielleicht Math.random() und Random().NextDouble() unterschiedlich? Ich meine lt. Dokumentation generieren beide eine Zufallszahl zwischen 0 und 1.
Danke im Voraus
Grüße seh
PS: Das ganze wird übrigens kein Bot sondern wird hier auf der Arbeit benötigt. Die Webseite um die es sich handelt ist von einem Kunden von uns und der Kunde hat uns beauftragt mit einer Software auf die Webseite zuzugreifen und da Informationen zu grabben. Leider bieten die keine einfache API an und die wollen auch nicht das wir eine API für die machen also muss das ganze jetzt LEIDER GOTTES auf diese Art und Weise erledigt werden.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „seh“ ()