HackASet CTF의 iq 문제다. 이번 ctf는 해킹 대회가 아니라 수학? 우주 과학? 문제 대회 느낌이 났다. (이래서 it를 하려면 수학, 과학 공부를 해야 하는 건가..)
일단 풀이 전 이 ctf는 문제 서버에 접속했을 때 각각의 팀에 부여되는 ticket을 입력해줘야 한다. ticket을 입력해야지 문제 내용이 나온다.
nc로 대회 서버에 접속하면 다음과 같은 문구들이 출력된다. QPSK Modulation이라는 문구와 함께 IQ(?) 좌표가 출력되고 0100011 같은 2진 숫자 들을 I/Q Sample로 변환하라고 하면서 입력을 받는다.
아예 감이 안 잡혀서 구글링을 하니 QPSK는 위상 편이 변조다라는 것을 깨달았고 I/Q Sample은 하나의 좌표 체계라는 것을 깨달았다. 약 30분 정도 삽질한 결과 주어진 2진 비트들을 QPSK Modulation이라는 문구와 함께 출력된 좌표에 맞춰 바꿔주면 된다는 것을 깨달았다.
예를 들어 01은 I는 -1, Q는 +1 부분에 위치해 있으므로 1.0 -1.0식으로 변환되는 것이다.
수작업으로 조금 변환한 뒤 입력하니 틀린 값이라 출력되고, hint 값으로 답의 길이가 80이라는 내용의 문구를 출력해줬다. 주어진 2진 bit가 모두 20개이므로 20*4=80, 즉 모든 2진 bit를 I/Q Sample로 바꿔준다면 길이가 80이 된다.
따라서 이 모든 2진 bit들을 I/Q Sample로 바꾼 뒤 결과 값을 입력해주면 되겠다.
from pwn import *
ticket = 'ticket{sierra630790lima2:GAFvJNPxT6MEt7aCZZNf9kEzpnYnihkVvZLbrBiDk0pJh-kCgUcqwp3_3MwkHZp0Hg}'
r = remote('unique-permit.satellitesabove.me', 5006)
r.sendlineafter('Ticket please:', ticket)
r.recvuntil('Bits to transmit: ')
bits = r.recvline()[:-1].decode('utf-8')
parsing_bit = list(bits.split(' '))
"""
01 : -1.0 1.0
10 : 1.0 -1.0
11 : 1.0 1.0
00 : -1.0 -1.0
"""
def checking_bit(bit):
if bit == '01':
return '-1.0 1.0 '
elif bit == '10':
return '1.0 -1.0 '
elif bit == '11':
return '1.0 1.0 '
elif bit == '00':
return '-1.0 -1.0 '
answer = ''
for i in parsing_bit:
for j in range(0,len(i), 2):
bit = i[j] + i[j+1]
answer += checking_bit(bit)
print('answer :',answer)
# r.sendlineafter('Input samples:', answer) <--- Fail
r.sendlineafter('Input samples:', answer[:-1])
try:
print(r.recvline())
print(r.recvline())
print(r.recvline())
print(r.recvline())
print(r.recvline())
except:
pass
수작업으로 하기에는 너무 많기 때문에 자동화 코드를 짰다. 01은 -1.0 1.0, 10은 1.0 -1.0, 11은 1.0 1.0, 00은 -1.0 -1.0으로 바꿔주도록 하고, 결과 값들을 모두 합쳐 전송했다. 처음에는 결과 값 끝에 공백을 하나 넣었는데, 이렇게 전송하니 flag를 획득할 수 없었다.
그래서 다른 방법들을 알아보다가 공백을 인지하고 끝에 공백 없이 넣어주니 flag를 얻을 수 있었다.
'CTF' 카테고리의 다른 글
[redpwnCTF 2021] misc problems (0) | 2021.07.12 |
---|---|
[Cyberthreatforce CTF] pwn - Bof_1 (0) | 2021.07.05 |
[HSCTF 8] pwn - stonks (0) | 2021.06.20 |
[HSCTF 8] misc - seeded-randomizer (0) | 2021.06.20 |
ThcCTF 2021 - Living QR Code (0) | 2021.06.12 |