Senior Security Consultant/Penetration Tester | CEO
Bei Exploit Development gibt es ein paar Punkte, auf die man aufpassen sollte.
Mach es dir nicht zu kompliziert und baue eine Struktur auf. Außerdem solltest du eine High-Level-Programmiersprache wie Python oder Ruby benutzen, um ewig lange Codezeilen-Texte zu vermeiden. Ein gutes Template spart dir zudem den Prozess, das heißt du sparst dir Zeit.
Wenn du nun debuggen willst, gibt es dabei zwei Möglichkeiten. Einerseits kann man es statisch Debuggen, was ich persönlich nicht empfehlen würde, oder auf der anderen Seite kann man dynamisch Debuggen. Dabei schaut man:
1. Welche Funktionen abstürzen (Spiking)
2. Wie groß das Offset ist (wird mit Fuzzing gemacht)
Dann sucht man sich das Offset mit einem Unique-String heraus, überschreibt den Instruction Pointer und fügt den Shellcode ein.
Versuch dir bei der Arbeit das Leben so einfach wie möglich zu machen und nimm dir Programme her, die dir helfen. Ich nehme dafür zum Beispiel GDB her und erweitere das Ganze mit GEF. Mit dem Debugger wird jetzt eine dynamische Analyse gemacht, das heißt man schreibt etwas hinein.
Du musst dir den Asssembler Code zwar anschauen, jedoch musst du nicht jede einzelne Zeile verstehen.
Beim Durchdebuggen schaut man nun, was die Funktion genau macht, was sie sich erwartet und wie man eventuelle Schutzmechanismen umgehen kann.