이전에도 많이 풀어봤던 유형의 MISC 문제
pwntool 을 연습하기에 좋은 문제인것 같다.
MISC는 miscellaneous의 약자로 여러가지 잡다한 이라는 의미를 가지고 있다.
반응형
문제에서는 원격 접속할 수 있는 주소가 주어진다.
원격으로 접속하면
다짜고짜 수학문제를 낸다.
4931 + 3542 을 계산해서 답을 냈더니
Succeed! 가 출력되면서
다음 문제가 또 나온다.
암산을 잘한다면 별다른 노력없이 그냥 바로 답써도 되겠지만
아쉽게도 그런 능력이 없어서 코드를 작성해야 한다.
from pwn import *
p = remote('ctf-hackingcamp.com', 3280)
for i in range(100):
a = p.recvuntil(': ')
print(a)
a1 = str(a)
b = a1.split(' ')
c1 = b[1]
c2 = b[2]
c3 = b[3]
if b[2] == '+':
d = int(b[1]) + int(b[3])
p.sendline(str(d))
p.recvuntil("[!] Succeed!")
elif b[2] == '-':
d = int(b[1]) - int(b[3])
p.sendline(str(d))
p.recvuntil("[!] Succeed!")
elif b[2] == '*':
d = int(b[1]) * int(b[3])
p.sendline(str(d))
p.recvuntil("[!] Succeed!")
elif b[2] == '/':
d = int(b[1]) / int(b[3])
d = int(d)
p.sendline(str(d))
p.recvuntil("[!] Succeed!")
else:
print("no")
p.interactive()
pwntool 을 사용해봤다면 어렵지 않게 구현할 수 있다.
서버의 출력값을 " "(스페이스) 를 기준으로 구분해서
연산자와 숫자를 구분해 저장한다.
그리고 연산자가 무엇인지 식별한 다음
연산자에 맞게 계산하고 sendline 으로 보내보리면 된다.
몇번해야될지 몰라서 횟수는 대충 100번이라고 했는데
우연히 100개가 딱 맞았다.
코드를 실행시키면
마지막까지 연산이 수행된 후 플래그를 만날 수 있다.
반응형
'CTF > MISC' 카테고리의 다른 글
[DanteCTF] Flag Fabber - MISC / PCB (73) | 2023.06.17 |
---|---|
[Really Awesome CTF] Missing Tools - MISC / Jail Escape (69) | 2023.06.09 |
[D^3CTF] d3gif - MISC / PIL (88) | 2023.05.29 |
[D^3CTF] d3readfile - MISC / locate (71) | 2023.05.27 |
[angstromCTF] Physics HW - MISC / Zsteg (66) | 2023.05.25 |