2021CCE에 나왔던 MISC 문제
MISC는 miscellaneous의 약자로 여러가지 잡다한 이라는 의미를 가지고 있다.
대회 문제들을 보면 컨셉이 기본에 충실한 문제인듯 하다.
이번 문제도 기초적인 프로그래밍 능력을 평가한다고 한다.
반응형
nc 를 이용해 원격으로 접속해보면
이런 문구가 출력된다.
calc 챌린지라면서 ? 부분에 어떤 기호가 오는지 채워넣으라고 한다.
100 스테이지 까지 있고, 클리어해야 플래그를 준다고 적혀있다.
문제 제목인 ptmd 는
plus, times, minus, devide 의 약자인듯 하다.
이전에도 블로그에서 비슷한 문제를 풀이한 적 있었다.
(https://hackingstudypad.tistory.com/529)
그때랑 차이점은 연산의 결과를 맞추는 것이 아니라
어떤 연산인지 맞추는것이라는데 있다.
from pwn import *
p = remote('20.194.123.97', 11111)
for i in range(255):
problem = p.recvline()
print(problem)
if ' = ' in str(problem):
solve = str(problem)
solve2 = solve.split(' ')
solve2[0] = solve2[0][2:]
solve2[4] = solve2[4][:-3]
print(solve2[0],solve2[2],solve2[4])
if float(solve2[0]) + float(solve2[2]) == float(solve2[4]):
p.send('+')
elif float(solve2[0]) - float(solve2[2]) == float(solve2[4]):
p.send('-')
elif float(solve2[0]) * float(solve2[2]) == float(solve2[4]):
p.send('*')
elif float(solve2[0]) / float(solve2[2]) == float(solve2[4]):
p.send('/')
else:
print('no')
p.interactive()
pwntool 을 이용해 문제를 해결하면 된다.
recvline() 으로 한줄씩 읽어온 다음에
읽은 line에 ' = ' 가 포함된 경우만 조건문으로 들어가게 된다.
조건문에서는 공백으로 수식을 잘라 저장하고
slove2[0]에 첫번째 숫자, solve2[2]에 두번째 숫자,
slove2[4]에는 연산 결과값이 들어가게 된다.
그다음 slove2[0]과 solve2[2] 를 가지고
사칙연산을 수행해본 다음
어떤 연산을 수행했을때 결과값이 slove2[4] 와 같은지 알아내서
연산자를 찾아내는 방식이다.
코드를 실행시키면
잠시 뒤에 플래그를 찾을 수 있다.
반응형
'CTF > MISC' 카테고리의 다른 글
[COMPFEST CTF] Promotional Video - MISC (153) | 2023.08.06 |
---|---|
[n00bzCTF] Google Form 2 - MISC / ChatGPT (89) | 2023.06.25 |
[n00bzCTF] Google Form 1 - MISC (79) | 2023.06.24 |
[DanteCTF] HellJail - MISC / Jail Escape (66) | 2023.06.20 |
[DanteCTF] Hanging Nose - MISC / 3D / STL (70) | 2023.06.19 |