
0x00 - fd

Mommy! what is a file descriptor in Linux?
3 types of file descriptors:
0: standard input
1: standard output
2: standard error
Ref: File descriptors

flag est lisible par fd_pown
fd est SUID
Code source fd.c

Le programme prend le premier argument, lui soustrait 0x1234, et lit 32 bytes du descripteur de fichier (fd) avec ce numéro. Si le résultat est “LETMEWIN”, le programme retourne le flag
argv[1] = 0x1234 +0 : stdin
argv[1] = 0x1234 +1 : stdout
argv[1] = 0x1234 +2 : stderr
Si nous demandons au programme de lire 32 bytes de stdin alors le programme se mettra en pause et attendra qu’on entre des données (stdin). On pourra alors entrer “LETMEWIN”
0x1234 = 4660 en décimal
Solution:
./fd 4660

0x01 - Colision

Daddy told me about cool MD5 hash collision today.
I wanna do something like that too!

flag lisible par col_pwn
col est SUID
Code source code.c

Le programme prend 20 bytes en entrée. Si check_password() retourne 0x21DD09EC le programme retourne flag.
check_passwd:
ip[0] + ip[1] + ip[2] + ip[3] + ip [4] = 0x21DD09EC = 568134124 en décimal

On modifie col.c pour mieux comprendre son fonctionnement

Compiler: gcc col.c -o col

Test 1:

Test 2:

Check_passwd prend les 20 bytes d’entrées, forme 5 groupes (groupe de 4 bytes) et retourne leur somme
La somme doit être égale à 568134124.

Little Endian
Payload
“\xc8\xce\xc5\x06” * 4 + “\xcc\xce\xc5\06”
./col `python -c 'print "\xc8\xce\xc5\06" * 4 + "\xcc\xce\xc5\x06"'`
Test:

Resultat:

0x03 Bof

Nana told me that buffer overflow is one of the most common software vulnerability.
Is that true?
Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c
Code source bof.c

func() breakdown
La fonction prend une clé et crée une variable overflowme de 32 bytes char overflowme[32]
La valeur de l’entrée est stockée dans overflowme puis le programme vérifie si la clé est égale à 0xcafebabe
Tests

gdb
Plaçons un point d’arret à la fonction main break main et lancer le programme r

Le programme s’arrête au point d’arrêt.
Nous avons besoin de connaitre l’adresse ou la comparaison de la valeur de la clé est effectuée (0xcafebabe) pour y placer un autre point d’arrêt. Pour cela désassemblons la fonction func()

L’instruction cmpl est à l’adresse 0x56555654. Plançons notre deuxieme point d’arret juste avant cette instruction et continuons le programme c.
Entrons un input facilement identifiable par exemple ‘AAAAAAAA’ et attendons d’être au deuxième point d’arret.

Examinons maintenant la stack x/50wx $esp

Nous voyons que 0xdeadbeef commence à l’offset 0xffffd1d0 et que notre input (AAAA == 0x41414141) débute à l’offset 0xffffd19c
0xffffd19c - 0xffffd1d0 = 52
Il y a donc 52 caractères entre le début de notre input et la clé. Nous pouvons donc réécrire la clé :)
Payload
(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"'; cat) | nc pwnable.kr 9000

0x03 Flag

Papa brought me a packed present! let's open it.
Download : http://pwnable.kr/bin/flag
This is reversing task. all you need is binary

flag est un executable ELF 64 bit

IDA
Ref: https://github.com/AngelKitty/IDA7.0
En analysant le programme avec IDA on trouve une suite d’instructions xor, shl, or et inc à proximité les unes des autres ce qui traduit le fait que le code a été offusqué

GDB
Essayons de mettre un point d’arret a strcpy

Nous ne pouvons pas utiliser de symbole…
Essayons de mettre un point d’arret avant la fonction start. Pour cela récupérons son offset avec IDA avant d’utiliser gdb:

adresse 0x44A4F0. ni = step over

Normalement le programme ne plante pas donc l’introduction du débugger altère le fonctionnement de flag
System call trace
strace -i ./flag

Nous voyons que la sortie “I will malloc() etc” est à l’adresse 0x419060. Cette sortie est possible une fois que le programme est dépaqueté.
Nous pouvons donc attendre que le programme atteigne ce point et dumper sa mémoire

PID du programme flag et carte de sa mémoire

Dump:

On utilise stringset dans dump1 on trouve le flag

A compléter
Source:
Poursuivez avec :
This work is licensed under a Creative Commons Attribution 4.0 International License.