
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.
OrganisationsinformationenSpeziell 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.

Wenn verbunden, sehen wir das entsprechende Banner.

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

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.

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

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

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

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

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.

Wenn verbunden, sehen wir das entsprechende Banner.

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

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.

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.

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.

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.

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

Wir übergeben die Flagge und bekommen noch einen Punkt.

Wir sehen uns in den folgenden Artikeln!
Wir befinden uns in einem Telegrammkanal: einem
Kanal im Telegramm .