Problemlösung mit pwnable.kr 06 - zufällig und 09 - Fehler

Bild

In diesem Artikel erfahren Sie, wie Sie die zwischen der Bibliotheksfunktion und dem Programm übertragenen Daten abfangen, die Dateideskriptoren speichern und die 6. und 9. Aufgabe von der Site pwnable.kr lösen.

Organisationsinformationen
Speziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit entwickeln möchten, werde ich über die folgenden Kategorien schreiben und sprechen:

  • PWN;
  • Kryptographie (Krypto);
  • Netzwerktechnologien (Netzwerk);
  • Reverse (Reverse Engineering);
  • Steganographie (Stegano);
  • Suche und Ausnutzung von WEB-Schwachstellen.

Darüber hinaus werde ich meine Erfahrungen in den Bereichen Computerforensik, Analyse von Malware und Firmware, Angriffe auf drahtlose Netzwerke und lokale Netzwerke, Durchführung von Pentests und Schreiben von Exploits teilen.

Damit Sie sich über neue Artikel, Software und andere Informationen informieren können, habe ich in Telegram einen Kanal und eine Gruppe eingerichtet, um alle Probleme im Bereich ICD zu diskutieren . Außerdem werde ich Ihre persönlichen Anfragen, Fragen, Vorschläge und Empfehlungen persönlich prüfen und alle beantworten .

Alle Informationen werden nur zu Bildungszwecken bereitgestellt. Der Autor dieses Dokuments übernimmt keine Verantwortung für Schäden, die jemandem durch die Verwendung von Kenntnissen und Methoden entstehen, die durch das Studium dieses Dokuments erworben wurden.

Die Lösung für die zufällige Aufgabe


Wir klicken auf das Symbol mit der zufälligen Signatur und es wird uns mitgeteilt, dass wir uns über SSH mit dem Passwort Gast verbinden müssen.

Bild

Wenn verbunden, sehen wir das entsprechende Banner.

Bild

Lassen Sie uns herausfinden, welche Dateien sich auf dem Server befinden und welche Rechte wir haben.

ls -l 

Bild

Auf diese Weise können wir den Quellcode des Programms lesen, da für jeden ein Leserecht besteht, und das Programm mit den Rechten des Eigentümers zufällig ausführen (das Sticky-Bit ist gesetzt). Lassen Sie uns das Ergebnis des Codes sehen.

Bild

Das Programm generiert eine Zufallszahl, wendet die XOR-Operation (exklusives ODER) an und zeigt ein Flag an, wenn das Ergebnis der XOR-Operation dem Referenzwert entspricht.

Tatsache ist, dass in diesem Programm die Funktion rand () verwendet wird. Diese Funktion generiert eine Pseudozufallszahl, die das von der Funktion srand () erzeugte „Korn“ konvertiert. Die Funktion srand (number) muss jedes Mal aufgerufen werden, bevor rand () aufgerufen wird. Geschieht dies nicht, wird srand (1) standardmäßig vor rand () ausgelöst.

Somit konvertiert in diesem Programm ein Pseudozufallszahlengenerator jedes Mal dasselbe "Korn" gemäß demselben Algorithmus. Wir müssen die Zahl herausfinden, die die Funktion rand () zurückgibt, und den Proxy mit dem Referenzwert. Da die XOR-Operation reversibel ist und dann den empfangenen Wert an den Eingang des Programms übergibt, erhalten wir ein Flag.

Lassen Sie uns die Daten zwischen der Bibliotheksfunktion rand () und unserem Programm abfangen. Verwenden Sie dazu das Dienstprogramm ltrace.

 ltrace ./random 

Bild

Wir sehen, mit welchen Parametern die Funktion rand () aufgerufen wird und welchen Wert sie zurückgibt. Vermitteln Sie diesen Wert nun mit der Referenz.

Bild

Wir übermitteln die resultierende Nummer an die Eingabe unseres Programms.

Bild

Wir passieren die Flagge und bekommen einen Punkt für eine so einfache Aufgabe.

Bild

Lösung für den Fehler


Wir klicken auf das Symbol mit der Fehlersignatur und es wird uns mitgeteilt, dass wir uns über SSH mit dem Passwort Gast verbinden müssen.

Bild

Wenn verbunden, sehen wir das entsprechende Banner.

Bild

Lassen Sie uns herausfinden, welche Dateien sich auf dem Server befinden und welche Rechte wir haben.

 ls -l 

Bild

Auf diese Weise können wir den Quellcode des Programms lesen, da für jeden ein Leserecht besteht, und ein Fehlerprogramm mit den Rechten des Eigentümers ausführen (das Sticky-Bit ist gesetzt). Lassen Sie uns das Ergebnis des Codes sehen.

Bild

Ganz am Anfang des Programms wird eine Datei geöffnet und ein Deskriptor erstellt. Über Dateideskriptoren habe ich bereits in DIESEM Artikel ausführlich geschrieben. Tatsache ist jedoch, dass der Zustand einen Fehler gemacht hat. Somit wird zuerst ein Vergleich durchgeführt, dessen Ergebnis eine Lüge ist, und dann die Zuordnung dieses falschen Ergebnisses (d. H. 0) zu der Variablen fd.

Bild

Als nächstes wird die Schlaffunktion aufgerufen und ohne Eingabe in die Variable pw_buf werden Daten gelesen. Aufgrund eines Fehlers in der Bedingung werden sie jedoch nicht aus einer geöffneten Datei mit einem Kennwort gelesen, sondern aus der Standardeingabe (Handle 0).

Als nächstes geben wir 10 Zeichen ein, die sich zeichenweise mit 1 streiten und mit einem Passwort verglichen werden.

Bild

Wir geben also zwei Zeilen ein, deren Zeichen zu einem Ergebnis der XOR-Operation führen sollen. Wir finden zwei Zeichen. Wenn wir sie vertreten, erhalten wir 1.

Bild

Dies sind die Zeichen A und @. Geben Sie nun zwei Zeilen in das Programm ein, eines der 10 Zeichen 'A' und das andere - '@'.

Bild

Wir übergeben die Flagge und bekommen noch einen Punkt.

Bild

Wir sehen uns in den folgenden Artikeln!

Wir befinden uns in einem Telegrammkanal: einem Kanal im Telegramm .

Source: https://habr.com/ru/post/de460527/


All Articles