Ausnutzen von Formatzeichenfolgen-Schwachstellen

Einführung

In den vorherigen Artikeln haben wir Druckfunktionen, Formatzeichenfolgen und Formatzeichenfolgen-Schwachstellen erörtert. Dieser Artikel bietet einen Überblick darüber, wie Sicherheitsanfälligkeiten in Formatzeichenfolgen ausgenutzt werden können. In diesem Artikel lösen wir zunächst eine einfache Herausforderung, um ein Geheimnis aus dem Speicher zu entfernen. Im nächsten Artikel werden wir ein weiteres Beispiel diskutieren, in dem wir eine Formatzeichenfolge-Sicherheitsanfälligkeit und eine Pufferüberlauf-Sicherheitsanfälligkeit verketten, um eine bessere Wirkung zu erzielen.

Wie können Format-String-Schwachstellen ausgenutzt werden?

Wie im vorherigen Artikel erwähnt, im Folgenden sind einige der Angriffe möglich Format String Schwachstellen.

  • Undichte Geheimnisse
  • Denial of Service
  • Undichte Speicheradressen
  • Überschreiben von Speicheradressen

In diesem Artikel werden die ersten beiden Punkte behandelt.

Undichte Geheimnisse aus dem Stapel

Im Folgenden finden Sie das anfällige Programm, mit dem wir den Ansatz zum Ausnutzen einer einfachen Formatzeichenfolge-Sicherheitsanfälligkeit verstehen werden, um Daten aus dem Speicher lesen zu können.

#einschließen <stdio.h>

int main(int argc, Zeichen *argv) {

Zeichen * Geheimnis = „p @ ssw0rD“;

printf(argv);

}

Wie wir feststellen können, ist das Programm anfällig für Format-String-Schwachstellen, da die printf-Funktion Benutzereingaben empfängt und druckt. Es ist zu beachten, dass in der printf-Funktion kein Formatbezeichner verwendet wird, wodurch das Programm anfällig wird.

Lassen Sie uns das Programm mit gdb ausführen, die Demontage der Hauptfunktion überprüfen und einen Haltepunkt an der Adresse des printf-Aufrufs einrichten.

$ gdb .//

gef/ disass main

Dump des Assemblercodes für die Funktion main:

0x0000000000401136 <+0>: endbr64

0x0000000000040113a <+4>: drücken Sie rbp

0x000000000040113b <+5>: Bewegung rbp, rsp

0x000000000040113e <+8>: sub rsp,0x20

0x0000000000401142 <+12>: mov DWORD PTR ,edi

0x0000000000401145 <+15>: mov QWORD PTR ,rsi

0x0000000000401149 <+19>: lea rax, # 0x402004

0x0000000000401150 <+26>: mov QWORD PTR ,rax

0x0000000000401154 <+30>: mov rax,QWORD (Read more…)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.