IT-Sicherheit – die besten Beiträge

Elektronische Türschlösser / Sicherheit / Woher kommen die Fortschritte?

Unser IT-Boy hat uns als „quick&dirty“ Lösung RFID-Tags und eine Android/iOS-App gebastelt, die vernetzte Türschlösser, ein RFID/NFC Passwort und 128Byte-Zufallszahlen (jeder Mitarbeiter bekommt eine eindeutige Zahl mit einem sogenannten „Hamming Abstand“ von 10bit... jedes Schloss fragt über das Netz nach, ob die jeweilige Zufallszahl berechtigt ist... die App User verwenden sogar Einmal-Zufallszahlen, die sie dann wöchentlich am Zahltag bei mir vom Bildschirm mit einer integrierten QR-Code-App abscannen...) benutzen.

Dagegen sind offenbar so gut wie alle Hoteltüren „vulnerabel“... In ziemlich lächerlich einfacher Weise... Mit Hardware von Aliexpress... und frei verfügbarer Software...

Hat unser IT-Boy uns auch so einen Bock geschossen und er schnallt es bloß (noch) nicht? Ich mein: Außer durch die App kommt man ja an die Zufallszahl eines anderen Mitarbeiters unmöglich dran... Oder?

Oder ist die Denke bei heutigen Studenten iwi anders (=um Lichtjahre fortschrittlicher)? Er erzählte immer von den allerersten Garagentor-Öffnern, die zweimal täglich das Passwort lauthals in die Nachbarschaft gebrüllt haben sollen (also über Funk... einmal morgens, wenn Vati zur Arbeit fuhr... und dann am Nachmittag nochmal, wenn er wieder kam...)...

Oder hat es iwelche Vorteile für ein Hotel, wenn die Gäste sich gegenseitig überraschen können?

Oder gibt es wirtschaftliche Gründe? Oder ist es Aufsässigkeit? Oder sind Schweizerische Ingeniöre iwi gemein sozialisiert?

Smartphone, Sicherheit, Hotel, Passwort, Hotelzimmer, Hotellerie, IT-Sicherheit, RFID, Sicherheitstechnik, NFC, Türöffner, RFID-Chip, NFC-Tag

Wie kriege ich mit ROP einen "/bin/sh" Pointer in rdi?

Ich versuche, rücksprungorientierte Programmierung (ROP) zu lernen.

Und zwar habe ich ein Programm mit einem Pufferüberlauf auf dem Stack, und ich möchte das Programm dazu bringen, /bin/sh zu öffnen.

Das geht mit dem execve Syscall, wenn ich die richtigen Instruktionen finden kann, um die Funktionsparameter vorzubereiten. Das ist die Signatur von execve:

int execve(const char *pathname, char *const _Nullable argv[], char *const _Nullable envp[]);

Also muss ich die folgenden Register setzen:

  • rax = 0x3b (Syscallnummer von execve)
  • rdi = "/bin/sh" Pointer
  • rsi = NULL
  • rdx = NULL

Die folgenden Instruktionen habe ich bereits gefunden:

pop rax ; ret
pop rdi ; ret
pop rsi ; ret
pop rdx ; ret
syscall

Ich kann also die Instruktionen und Registerwerte mit dem Pufferüberlauf auf den Stack schreiben und so meine Register füllen. Das Problem ist aber, dass ich einen "/bin/sh" Pointer in rdi brauche (also nicht "/bin/sh" im Register, sondern eine Speicheradresse, an der "/bin/sh" steht).

Ich kann natürlich "/bin/sh" in den Puffer auf dem Stack schreiben, aber leider ist die Speicheradresse jedes Mal anders und ich kenne sie vorher nicht.

Ich weiß, dass "/bin/sh" in libc vorkommt, aber auch dort ist die Speicheradresse jedes Mal anders und ich kenne sie vorher nicht.

Wie komme ich also an einen "/bin/sh" Pointer? Gibt es Tricks oder bestimmte Instruktionen, nach denen ich mich umsehen sollte?

hacken, Hack, Programm, programmieren, pointer, Assembler, Hacker, Hacking, Informatik, IT-Sicherheit, Shell, stack, x64, Exploit, hacken lernen, IT-Sicherheitsexperte, Register, Capture The Flag

Meistgelesene Beiträge zum Thema IT-Sicherheit