Tokyo Westerns CTF 2018 - swap returns
Tokyo Westerns CTF 2018 pwnable challenge ๊ฐ์ ๋ ๊ฐ ์
๋ ฅ๋ฐ๊ณ , ๊ทธ ๊ฐ์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ค๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ๋ ์ฃผ์๋ฅผ ์
๋ ฅ๋ฐ์ ์ฃผ์์ ์ ์ฅ๋ ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ค๋ค. ๋ฌธ์ ์์ ๊ฐ๋ ฅํ primitive๋ฅผ ์ฃผ์์ง๋ง ์๊ฐ๋ณด๋ค ํด๋ณผ ๋งํ ๊ฒ์ด ์์๋ค. ์ฐ์ ์ง๊ธ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ผ๋ก๋ถํฐ ํ ์ ์๋ ๊ฒ์ ์๊ฐํด๋ณด๋ฉด, ์ฐ๊ธฐ ๊ถํ์ด ์๊ณ , ๊ณ ์ ์ ์ธ ์ฃผ์๊ฐ๋ค๋ผ๋ฆฌ swap์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ๋จผ์ ์ด๋ฌํ ์กฐ๊ฑด์ด ๋ง๋ ์ฃผ์๋ฅผ ํ์ธํด๋ณด์๋ค. 0x00. Introduction
[*] '/home/user/swap_returns'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x400000) Concept
int __fastcall __noreturn main()
{
...
print_menu();
choice = read_int();
if ( choice == 1 )
{
puts("1st address: ");
__isoc99_fscanf(stdin, "%lu", &first);
puts("2nd address: ");
__isoc99_fscanf(stdin, "%lu", &second);
}
if ( choice == 2 )
{
tmp = *first;
*first = *second;
*second = tmp;
tmp = 0LL;
}
...
} 0x01. Vulnerability
Start End Offset Perm Path
0x0000000000400000 0x0000000000401000 0x0000000000000000 r-x /home/user/swap_returns
0x0000000000600000 0x0000000000601000 0x0000000000000000 r-- /home/user/swap_returns
0x0000000000601000 0x0000000000602000 0x0000000000001000 rw- /home/user/swap_returns
0x00007ffff7d87000 0x00007ffff7d8a000 0x0000000000000000 rw-
0x00007ffff7d8a000 0x00007ffff7db2000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc.so.6
0x00007ffff7db2000 0x00007ffff7f47000 0x0000000000028000 r-x /usr/lib/x86_64-linux-gnu/libc.so.6
0x00007ffff7f47000 0x00007ffff7f9f000 0x00000000001bd000 r-- /usr/lib/x86_64-linux-gnu/libc.so.6
0x00007ffff7f9f000 0x00007ffff7fa0000 0x0000000000215000