Hacking public services - möglich, wenn es wirklich nötig ist

Hallo allerseits, liebe Habraviten!

Dies ist eine kurze Geschichte - ein Beispiel für die Anwendung technischer Fähigkeiten, um das System für eigene Zwecke zu umgehen.
Moderator: Achtung! Dieser Text beschreibt die Möglichkeiten für experimentelle Zwecke. Wir weisen darauf hin, dass das Wiederholen solcher Aktionen zu einem Verstoß gegen das Gesetz führen kann.

Der kurze Hintergrund ist, dass ich Weißrussin bin, in St. Petersburg lebe und beschlossen habe, meinen bestehenden russischen Führerschein zu ersetzen. Nachdem ich über die Website des staatlichen Dienstes erfahren hatte, dass der Rabatt 30% beträgt, entschloss ich mich als begeisterter Weißrussier, ihn sofort zu nutzen.

Ich muss sofort sagen, dass nichts Illegales begangen wurde, sonst wäre dieser Artikel nicht erschienen.

Öffentliche Dienste kommen, wähle ich das Menü Ansprüche Ersatz Führerschein .

Ich fülle alle Felder aus, klicke auf "Absenden" und melde mich - ein Fehler. "Das Feld ist erforderlich."



Die belarussischen Pässe haben im Gegensatz zu den russischen eine Reihe von zwei lateinischen Buchstaben.

Offensichtlich wurde die Serie aus diesem Grund in einem Kontoauszug nicht aus den Daten in "Mein Konto" übernommen. Wovon ich überzeugt war, als ich das Developer Panel im Browser öffnete und die Maske dieses Textfelds sah: mask = "00 00" .



Und dieses Feld ist schreibgeschützt . Und unbedingt ausfüllen! Und meine Serie " PP " drin kann ich nicht eintragen.

Als seriöser Benutzer habe ich zunächst versucht, dieses Problem zivilisiert zu lösen.

Meine Korrespondenz mit der Unterstützung der staatlichen Dienste dauerte einige Wochen, und ich werde sie nur kurz beschreiben. Mein Vorschlag ist, entfernen Sie entweder Attribut schreibgeschützt auf dem Gebiet einer Reihe von Pass oder die Entfernung von der Maskevon Zahlen und richtig von meinem Konto abholen. Zuerst habe ich einfach das Wesentliche des Problems erklärt, um es zu unterstützen, was viel Zeit in Anspruch nahm. Dann bekam ich Standardantworten zum Löschen von Cookies, Browser-Cache usw. Dann erhielt ich die Antwort, dass eine Überarbeitung nicht möglich sei, da das Antragsformular vom Innenministerium zur Verfügung gestellt werde und daher eine Kontaktaufnahme mit dem Innenministerium erforderlich sei. Als Antwort auf meine Beharrlichkeit erhielt ich einen Brief, in dem ich als ausländischer Staatsbürger bezeichnet wurde und überhaupt nicht berechtigt war, diesen Dienst in Anspruch zu nehmen.

Es gab bereits ein Prinzip, ich entschied mich, den ganzen Weg zu gehen und griff weiterhin die Unterstützung an, und zu diesem Zeitpunkt dachte ich - warum versuche ich nicht, dieses Feld manuell auszufüllen. Ich gebe keine Daten anderer Personen ein. Im Gegenteil, ich stelle sicher, dass das, was nicht richtig funktioniert, richtig funktioniert.

Also öffne ich die Anwendung, öffne das Developer Panel im Browser, finde das gewünschte Element, lösche alle mit der Maske verbundenen und schreibgeschützten Attribute und versuche, die Reihe darin einzugeben:



Pa-pam! Die Zahlen im Feld werden eingegeben, die Buchstaben nicht.

Ich habe sogar versucht, alle Attribute dieses Elements zu löschen und dort Buchstaben einzugeben. Es hat nicht funktioniert. Daraus schloss ich, dass die Eingabe von Zeichen in die Felder irgendwo in Javascript verarbeitet wird.

Ich bin ein Programmierer für Desktopanwendungen, kein Webentwickler und habe keine ernsthaften Debugging-Kenntnisse für Web-Skripte (sowie einige andere Debugging-Tools als das Developer Panel). Und als ich sah, wie viel Code diese Seite verwendet, beschloss ich, keine Zeit zu verschwenden, aber ein Umstand half mir dabei. Auf der Registerkarte Konsole habe ich festgestellt, dass bei der Eingabe eines Zeichens in die Textfelder dieses protokolliert wird.



Ich ging zum angegebenen Link des Skripts pages-min-9fa87087e7.js und sah den folgenden Code (der zuvor mit der Schaltfläche {} formatiert wurde, um die Lesbarkeit zu gewährleisten).

            window.addEventListener("keyup", function(e) {
                e.which <= 90 && 48 <= e.which && (i += e.key.toLowerCase(),
                n.forEach(function(e) {
                    console.log(i),
                    -1 != i.indexOf(e) && (r = !1,
                    l(),
                    i = "")
                }));
                if (13 === e.keyCode) {
                    s++;
                    var t = new Date;
                    t - a <= o && 3 === s && (r = !1,
                    l(),
                    t = s = 0),
                    window.setTimeout(function() {
                        s = 0
                    }, o),
                    a = t
                }
            });

Ja Wir sind hier , um Objekte hinzuzufügen Fenster Ereignishandler keyup mit einer anonymen Funktion, die die Eingabe, die Verarbeitungslogik, einschließlich Protokollierung in die Konsole. Dies bedeutet, dass die gesamte Eingabeverarbeitung von Ereignishandlern ausgeführt wird.

Das folgende Problem trat auf - wie man sie trennt. Ich muss nicht nur das Skript debuggen, sondern auch einen Wert in die Eingabe eingeben. Selbst wenn ich den richtigen Teil des Skripts finde, den richtigen Handler, was gibt es mir? Wir könnten die removeEventListener () -Methode verwenden , verwenden jedoch eine anonyme Funktion und haben nicht den Namen des gewünschten Handlers.

Beim googeln wurde mir klar, dass der einzige Weg zur Lösung darin besteht, das Element dynamisch zu klonen, wodurch alle Event-Handler darin (oder besser gesagt in seinem Klon) entfernt werden, analog zu:

var el = document.getElementById('mydiv'),
elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);

Ich habe mich entschieden, diesen Code direkt in das Onkeyup meiner Eingabe zu schreiben . Somit erhielt der Elementcode die folgende Form:


Ich habe versucht, ein beliebiges Zeichen einzugeben - wie erwartet funktionierte der Onkeyup- Handler , und der Eingabewert wurde in PP geändert . Hurra!

Aber als ich auf "Senden" geklickt habe, wartete immer noch ein Fehler auf mich. Die Eingabe war immer noch rot hervorgehoben und übersprang die Validierung nicht weiter.



Aus diesem Verhalten habe ich die einzig mögliche Schlussfolgerung gezogen - diese Fehler wurden irgendwo zwischengespeichert, möglicherweise in einer Art globaler Variable. Wo genau - ich hatte weder die Zeit noch den Wunsch zu verstehen, und ich habe versucht, nur die Seite zu aktualisieren, den Code unseres Eingabeelements wie oben erwähnt zu ändern und erneut zu versuchen, diesen Test zu bestehen. Und diesmal hat es geklappt.

Auf diese Weise formalisierte ich den elektronischen Antrag bei den staatlichen Diensten und ersetzte den Führerschein.


Jeder kann aus dieser Geschichte eine eigene Zusammenfassung machen. Ich bin kein Webprogrammierer, wie oben erwähnt. Vielleicht könnte dieses Problem viel schneller und einfacher gelöst werden. Darum geht es aber nicht. Persönlich wundert es mich, dass auf einem der größten staatlichen Portale die Möglichkeit der Datenersetzung besteht. Auch wenn es sich als genau richtig für mich herausgestellt hat.

Dies kann einfach durch Einchecken des Backends verarbeitet werden, da dies theoretisch erfolgen sollte. In der Tat ist theoretisch und in einigen Online-Banken die gleiche Einspeisung primitiver Daten möglich.

Sehr geehrte Besucher der Ressource, es wäre für mich sehr interessant, die Meinungen derjenigen, die bereits auf ähnliche Fälle gestoßen sind, sowie Beispiele aus der Praxis zu erhalten.

Jetzt auch beliebt: