PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tutorial zur Exploitprogramierung und Shellcode schreiben (Assembler)



NOE_2.0
03.08.2010, 09:29
Hi

Ich such ein gutes Tutorial wie ich ein Exploit selbst programiere und eigenen Shellcode entwerfe! Wenn eine Anleitung dabei wäre wie ich Assembler Programiere wäre das auch nicht schlecht...Ich habe schon im Forum gesucht aber keinen geschieten Beitrag gefunden....nur 1. Beitrag und der beinhaltet einen Text der schon auf hunderttausend anderen HPs steht...Ich würde mich freien wenn mal jemand eine Tutorial schreiben würde.

Lg

Cristhecrusader
03.08.2010, 09:59
http://www.corelan.be:8800/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/
Sehr ausfuehrlich.

NOE_2.0
03.08.2010, 10:07
Hier habe ich einen interessanten Text Gefunden aber um den Text fertig lesesn zu können muss mann einen Premuim-User haben.
Wenn jemand einen Premiumuser hat wäre es toll wenn er den Text kopiert und hier im Forum Postet.

Basiswissen Buffer Overflow | TecChannel.de (http://www.tecchannel.de/webtechnik/entwicklung/402308/basiswissen_buffer_overflow/)

Ich kann mal die ersten Seiten Posten, dass ihr seht wie informativ der Text ist:
Viele der aktuellen Exploits nutzen einen so genannten Buffer Overflow als Angriffsvektor. Wir beschreiben, wie ein Buffer Overflow entsteht, wie er sich auswirkt und wie Angreifer ihn ausnutzen können.
http://www.tecchannel.de/img/spacer.gif
Jeder, der sich mit der Sicherheit von Computersystemen beschäftigt, stolpert über kurz oder lang über das Wort "Buffer Overflow". Auch in unseren Security-Alerts (http://www.tecchannel.de/link.cfm?type=article&pk=402107) taucht es immer wieder auf. Der Begriff beschreibt eines der grundlegenden Probleme, die sich Dritte für einen Angriff auf ein Rechnersystem zu Nutze machen: Was aber steckt genau dahinter? In diesem Beitrag erfahren Sie alles, was man über Buffer Overflows wissen muss: Wie sie entstehen, warum sie nicht verschwinden, wie Angreifer sie ausnutzen und welche Konsequenzen das hat.
Die Bezeichnung "Buffer Overflow" stammt aus der Programmierung und bezeichnet im Wesentlichen einen Programmfehler, bei dem ein Programmierer für bestimmte Daten weniger Speicher zur Verfügung stellt, als tatsächlich benötigt wird. Kommt die unerwartete Menge Daten an, so ist der zur Verfügung gestellte Puffer nicht ausreichend groß: Er läuft über.
Dieser Zustand kann für einen Einbruch ausgenutzt werden. Um zu verstehen wie, braucht man ein paar kleine Programmbeispiele. Die folgenden sind dabei "C"-ähnlich beziehungsweise an x86-Assembler angelehnt.

Der Einstieg: Variablen

Zunächst muss man wissen, wie Daten in Variablen gespeichert werden. Bei einer Variablen handelt es sich im Wesentlichen um einen symbolischen Namen, der für einen Wert oder für eine Anzahl von Werten steht. Im Normalfall ist die kleinste beim Programmieren verwendete Einheit ein Byte - Variablen sind also symbolische Namen für ein oder mehrere Bytes.
Texte sind häufig vorkommende Daten. Text ist auch für dieses Beispiel besonders geeignet, weil Text innerhalb von Programmiersprachen oft direkt auf Bytes abgebildet wird. Ein einzelnes Zeichen nennt man dabei "Character", ein einzelner Character verbraucht im Allgemeinen ein einzelnes Byte.
Setzt sich ein Wort aus mehreren Zeichen zusammen, benötigt man mindestens eine ebenso hohe Anzahl an Bytes zum Speichern des Wortes, wie das Wort Buchstaben hat. Ansammlungen aus Daten eines bestimmten Typs nennt man ein "Array". Bei einem Wort handelt es sich also um ein Array aus Bytes. Stattdessen spricht man bei Texten auch von "Strings".
In der Sprache C, auf der ein Großteil des Windows (http://www.tecchannel.de/pc_mobile/windows/)- und Linux-Codes basiert, sind Strings immer mit einem besonderen Zeichen abgeschlossen: Am Ende eines Textes steht immer ein Byte, das den Wert 0 hat. Dadurch wird das Ende des Strings markiert.
Ein String wird also mit einem symbolischen Namen beschrieben und steht für eine bestimmte Anzahl an Bytes mit einer abschließenden "0". Arrays werden in C in eckigen Klammern markiert. Innerhalb der eckigen Klammer steht eine Zahl, die die Größe des Arrays angibt:

Code
1
char aVariable[10];


(javascript:MM_ShowCode(402308,'IM_57682A48-CBEC-4A41-5B46F8A8013F5C85');)




Hier handelt es sich also um die Variable mit dem Namen aVariable. Die Variable ist ein Array der Größe 10 und hat den Typ char. Die Variable bietet also Speicherplatz für 10 Bytes.

Adressen von Variablen

Der Arbeitsspeicher (http://www.tecchannel.de/webtechnik/entwicklung/402308/basiswissen_buffer_overflow/index3.html#) des Computers wird auf unterschiedlichste Art und von verschiedenen Instanzen verwaltet. Der Einfachheit halber ist es aber ausreichend, sich den Speicher des Rechners als eine Menge von hintereinander angeordneten Zellen vorzustellen. Jede dieser Zellen hat dabei eine Hausnummer und kann jeweils ein einzelnes Byte aufnehmen. Die erste Zelle hat die Nummer 0, die zweite hat die Nummer 1 und so weiter. Die Nummer einer Zelle nennt man die "Adresse" der Zelle.
Man kann jeder Variablen auch eine Adresse zuordnen. Die Adresse einer Variablen ist dabei jeweils die Nummer der ersten Zelle, für die diese Variable zuständig ist. Jede Variable hat eine solche feste Adresse.
Angenommen die Variable aVariable hätte die Adresse 42, dann wäre das erste Zeichen eben in der 43. Speicherzelle abgelegt. Ferner würde die Variable auch für die folgenden neun Zellen zuständig sein. Die Bytes an Adresse 42 bis 51 würden also der Variablen aVariable "gehören".
Das Byte an Adresse 52 ist dann für eine andere Variable zu haben. Benötigt man für ein Programm zwei Variablen, würde man das in etwa wie folgt deklarieren:

Code
1
char eineVariable[10];

http://www.tecchannel.de/img/spacer_1px.gif
2
char dieZweiteVariable[5];







Weiterhin davon ausgehend, dass die Variable eineVariable an der Adresse 42 beginnt, wäre die Adresse von dieZweiteVariable die 52.
Mit diesem einfachen Konzept ist es nun bereits möglich, einen einfachen Buffer Overflow zu verstehen. Zur Verdeutlichung werden nun die Variablen umbenannt.

Ein Beispielprogramm

Beim Beispielprogramm soll es sich um ein Programm zur Bearbeitung von Kontaktdaten handeln. Im Zuge des Programms werden die Namen und Vornamen von Personen gespeichert. Dazu werden zwei Variablen angelegt: "Name" und "Vorname". Namen sind meist recht kurz und daher bekommen die Variablen feste Längen. Für Namen und Vornamen stehen je 15 Bytes zur Verfügung.

Code
1
char Name[ 15];

http://www.tecchannel.de/img/spacer_1px.gif
2
char Vorname[ 15];

Textansicht (javascript:MM_ShowCode(402308,'IM_57682AC9-A9CE-5844-C0799B02CABBFF98');)




Um einen Text in eine Variable zu kopieren, benutzt man den Befehl "String Copy", abgekürzt strcpy. Der Befehl erhält zwei Parameter. Der erste gibt die Quelle an, der zweite das Ziel des Kopiervorgangs. Das Ziel des Vorgangs wird als Adresse ausgedrückt - dazu kann man einfach den Namen der Variablen benutzen, da der Name für ihre Adresse steht. Um Namen und Vornamen eines Kontakts in eine Variable zu kopieren, verwendet man die folgenden Befehlszeilen:

Code
1
strcpy( "Kofler", Name);

http://www.tecchannel.de/img/spacer_1px.gif
2
strcpy( "Heinz", Vorname);

Textansicht (javascript:MM_ShowCode(402308,'IM_57682ADB-021B-0873-6F0B0318D0DDFBFC');)




Nun muss man sich den Inhalt des Arbeitsspeichers im Zuge der vier Programmzeilen vergegenwärtigen. Bevor die erste Programmzeile ausgeführt wird, liegt einfach nur unbelegter Speicher vor: Da noch nichts passiert ist, enthalten alle Speicherzellen mehr oder weniger zufällige Werte.
Dann folgen die beiden Programmzeilen, mit denen die Variablen festgelegt werden:

Code
1
char Name[ 15];

http://www.tecchannel.de/img/spacer_1px.gif
2
char Vorname[ 15];





Nun einmal angenommen, dass die beiden Variablen die ersten im Programm definierten sind. Dann hat Name die Adresse 0 und reicht bis zur Adresse 14, Vorname hat die Adresse 15 und belegt die folgenden 15 Bytes. Die Variablen wurden aber noch nicht mit Inhalten belegt, also enthalten die zugehörigen Speicherzellen auch nur zufällige Werte. Diese zufälligen Werte sind in der Abbildung mit einem X markiert. Die Adressen der einzelnen Zellen stehen jeweils über der Zelle.

BILD:

TecChannel (http://www.tecchannel.de/_misc/img/detail.cfm?pk=340092&fk=402308&id=IM_576823EA-BBA7-933C-D0CD6741B9B52656)

AB HIER BRACUHT MAN LEIDER EINEN PREMIUM ACCOUNT!!
BITTE JEMAND MIT PREMIUM ACCOUNT WEITER POSTEN!!
file:///tmp/moz-screenshot.pngfile:///tmp/moz-screenshot-1.png

DANKE!!!

Ich werde es mir durchlesen und im EDIT schreiben wie ich den Text fand!

0x30
03.08.2010, 10:26
Um einen Exploit zu Programmieren muss man eigentlich nur eine Programmier/Scriptsprache können...
Aber bevor man natürlich einen Exploit programmieren kann, muss man zuerst eine Lücke finden.
Den Exploit zu schreiben ist meistens keine so grosse Sache.

NOE_2.0
03.08.2010, 10:42
Danke

Das Tutorial ist gut aber gibt es sowas auch in Deutsch ?

Okay....wie finde ich solche Sicherheitslücken ?

Hat Jemand eine gute Anleitung zum thema Assembler??
Also ein SPrachindex oder so etwas in der Art.

Cristhecrusader
03.08.2010, 11:01
Also falls du noch gar nichts zum Thema BOF's gemacht hast dann schau dir mal das vTut von cheese an
myCheese.org | Blog, Code, Tutorials and more... (http://mycheese.org/)

DizzY_D
03.08.2010, 11:50
Hat Jemand eine gute Anleitung zum thema Assembler??


Assembler ist im Vergleich zu den Hochsprachen sehr eigenartig. Da es nur aus sehr wenigen Elementen besteht, ist es für Anfänger recht schwierig komplexeren Code zu verstehen oder selber zu schreiben.
Deshalb würde ich die Schwierigkeit Assembler zu lernen ca. auf dem gleichen Level wie einfachere Hochsprachen einordnen.
Da du nach einer "Anleitung" frast, scheinst du ASM etwas zu unterschätzen. Dafür gibt es keine Anleitung. Genau so wenig, wie es eine Anleitung für Delphi oder VB gibt.
Hier ist ein gutes Tutorial für die Grundlagen von MASM vom ARTeam:
ARTeam Website: Downloads / Tutorials / Win32 Assembler Coding for Crackers (http://www.accessroot.com/arteam/site/download.php?view.173)

Um Sicherheitslücken zu finden solltest du dich mit Reverse Engineering auseinander setzen. Nein, auch hier für gibt es leider keine Anleitung. Bis man das gut kann, braucht man Jahrelange Erfahrung.
Sehr viele Tutorials und Tools zu diesem Thema findest du auf Tuts4you (http://tuts4you.com).

MfG DizzY_D

NOE_2.0
03.08.2010, 17:17
Danke für die Tipps

Das Tutoiral von Cristhecrusader (http://free-hack.com/member.php?u=57835) habe ich soweit versatnden....Trozdem habe ich ncoh einige Fragen die in dem Tutorial nicht geklärt werden.

Wie wende ich das ganze remote an ??
Funktionert eine remoteverbindung nur über das netzwerk so wie bei metasploit oder geht das auch über das Internet.

Wie Funktiniert das bei Windows?

Wenn ich den Shellcode habe wie baue ich den dan in eine Exploit ein ? Über eine Funktion ?

Wie kann ich das Exploitprogramieren üben ?

Steiger_mp
03.08.2010, 17:24
Assembler ist im Vergleich zu den Hochsprachen sehr eigenartig. Da es nur aus sehr wenigen Elementen besteht, ist es für Anfänger recht schwierig komplexeren Code zu verstehen oder selber zu schreiben.

Add:

Häufig hört man Sätze,wie:Assembler ist sau schwer.
Das Stimmt nicht. Dizzy hat recht, dass Assembler nicht wesentlich schwerer ist als manche Hochsprachen der dritten Generation.Aber der Assemblerprogrammierer wird durch die maschinennahe Pragrammierung in der Denkweise und im disziplinierten Codieren stärker geförder wie ein HLL-Programmierer. Desweiteren sieht man zu anfang auch nur wenig fortschritte.

GregorSamsa
03.08.2010, 17:27
Scheiß auf Exploitcoding, das ist total unwichtig.
Solange du nicht einfach mit der Shell und Perl (o.ä.) einen simplen Bof angreifen kannst, brauchst du das nicht zu wissen.

Was du wissen solltest ist, wie Programme aufgebaut sind, wie der Arbeitsspeicher funktioniert, etc...
Das kannst du am besten unter Linux üben, denn unter Linux ist ein BOF um einiges einfacher.
Unter Win hast du Dinge wie den SEH etc. und soetwas ist deutlich schwieriger.

Wenn du dich etwas auskennst, wirst du von selber merken, wie soetwas funktioniert.
Bsp. Der Userlogin bei nem FTP-Server könnte anfällig für nen FMS oder HeapOverflow sein (die Chance ist gleich Null, aber ist ist möglich ^^).

NOE_2.0
04.08.2010, 20:33
Danke für die Tipps ihr habt mir sehr gehofen

Ich habe das coden jetz soweits verstanden

http://www.youtube.com/user/c2ypt1c#p/p

Hier kann man acuh eine ganze mänge lehrnen

0x30
04.08.2010, 22:22
Da ist das Workshop von Cheese um einiges besser und empfehlenswerter als dieses Youtube Video.

NOE_2.0
05.08.2010, 18:42
Ja das auf jeden fall....aber hier wird das Shellprogramieren und auch andere exploits angesprochen nut nur Buffer overflow