Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Guten Morgen,

zum Thema "Sichere Programmierung" möchte ich gerne einige Dinge testen. Eines davon ist die Manupulation des ESP.

Die Funktion check_authentication soll mit Hilfe eines Stackoverflows in einem kontrolliertes Fehlverhalten gesteuert werden. Hierfür soll die in Variable password_buffer eine Rücksprungadresse geschrieben ( welche per Überlauf) werden welche das ESP manipuliert. So soll die Rücksprungadresse (ESP) dann auf den printf Befehl innerhalb der IF-Verzweigung des mainbreichs zeigen.

Durch dies würde die Passworteinfrage übergangen.

Im Terminal mit Hilfe von dbg funktioniert dies, allerdings verstehe ich nicht ganz wie ich die richtige Adresse unter Eclipse herausfinde, denn hier steht im ESP nicht die wirkliche Adresse sondern ein Sprungbefehl auf einen weiteren Assemblercode.

Dieser Code ist ein Codebeispiel aus dem Buch

"Hacking: Die Kunst des Exploits"

Hacking: Die Kunst des Exploits (mit CD): Amazon.de: Jon Erickson: Bücher


#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int check_authentication(char *password) {

	char password_buffer[16];

	int auth_flag = 0;


	strcpy(password_buffer, password);


	if(strcmp(password_buffer, "brillig") == 0)

		auth_flag = 1;

	if(strcmp(password_buffer, "outgrabe") == 0)

		auth_flag = 1;


	return auth_flag;

}


int main(int argc, char *argv[]) {

	if(argc < 2) {

		printf("Usage: %s <password>\n", argv[0]);

		exit(0);

	}

	if(check_authentication(argv[1])) {

		int a;

		printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");

		printf("      Access Granted.\n");

		printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");

	} else {

		printf("\nAccess Denied.\n");

   }

}

Ich verstehe deine Sorge, allerdings handelt es sich hierbei um eine Wissenschaftlichearbeit bei der an einfachen Codebeispielen dargestellt werden soll, wie einfach man Abfragen usw. umgehen kann.

Ich verstehe deine Sorge, allerdings handelt es sich hierbei um eine Wissenschaftlichearbeit bei der an einfachen Codebeispielen dargestellt werden soll, wie einfach man Abfragen usw. umgehen kann.

Welche Absichten du damit verfolgst, ist irrelevant. Mal ganz abgesehen davon, dass wir das ohnehin nicht prüfen könnten.

Wir wollen nicht, dass dieses Board Anlaufstelle für Leute wird, die Anleitungen zum Ausnutzen von Sicherheitslücken suchen.

ok, schade.

  • 3 Wochen später...

guten morgen,

da ihr mir zu Hacking-Anleitungen keine hilfe geben dürft, habe ich noch eine andere Frage, die wie folgt lautet.

Wenn ich eine Funktion aufrufe und mir einen Breakpoint setze kann ich mir ja mit Hilfe von gdb "info f" Infos über das Stackframe ansehen. Mit "x/32xw" den Stack. Hier kann man dann auch die in "info f" angezeigte Rücksprungadresse ermitteln.

Nun zu meiner Frage. Wenn ich selbiges in einem Main-Programm mache, also "info f" und "x/32xw" dann finde ich die gespeicherte Rücksprungadresse nicht. Es kommt mir so vor alsob diese außerhalb des von mir angezigten Frames liegt. Warum ist das so und wie kann ich mir es doch anzeigen lassen?

MFG

DonDom

ooops eben rausgefunden...

liegt halt außer halb von "x/32xw". Mit "x/128xw $esp" klappts. Falls es wen interessiert.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.