이번에 풀이할 문제는 wtfCTF의 k3Y 문제다. 문제 파일과 nc 서버 주소가 주어져 있다.
문제 파일을 ida로 열어 main 코드를 확인해본 모습이다. v5에 rand 함수로 값을 넣은 후 사용자의 입력 값과 xor 연산을 해 -1393689906과 같으면 flag를 얻게 해주는데, 문제는 rand 함수를 쓰기전 srand 함수를 통해 seed 값을 넣어주지 않는다면 랜덤한 값이 나오지 않고, 항상 똑같은 값만 반환된다.
따라서 gdb를 통해 문제 파일을 열어 rand 함수에서 반환되는 값을 알아낸다면 입력 값으로 뭘 줘야 flag를 얻을 수 있는지 알 수 있다.
rand로 생성되는 값이 0x6b8b4567인 것을 알 수 있다. 그렇다면 -1393689906 xor 0x6b8b4567한 값을 입력으로 준다면 flag를 얻을 수 있을 것이다.
from pwn import *
#p = process("./k3Y")
p = remote('20.42.99.115', 3143)
payload = str(-1393689906 ^ 0x6b8b4567)
p.sendline(payload)
p.interactive()
-1393689906 xor 0x6b8b4567 한 값을 전송하도록 payload를 구성했다.
대회 서버가 닫혀 서버로 접속하지 못했지만, 로컬에 flag 파일을 작성해서 코드를 실행해보니 flag가 출력되는 것을 볼 수 있다.
'CTF' 카테고리의 다른 글
ThcCTF 2021 - SQL for dummies (0) | 2021.06.12 |
---|---|
ThcCTF 2021 - Welcome (0) | 2021.06.12 |
wtfCTF 2021 - MoM5m4g1c (0) | 2021.06.05 |
[Pwn2WinCTF 2021] Pwn - Baby write-only password manager(not solved) (0) | 2021.05.30 |
[DawgCTF 2021] Pwn - Bofit (0) | 2021.05.08 |