この大会は2021/6/26 23:00(JST)~2021/6/28 5:00(JST)に開催されました。
今回もチームで参戦。結果は48点で697チーム中280位でした。
自分で解けた問題をWriteupとして書いておきます。
Cape Canaveral (Launch Pad)
添付ファイルを展開していくと、flag.txtにフラグが書いてあった。
flag{romeo64040foxtrot2:GE7O02ptNVioho5UrEOABUWZbsZ35pH5zE3Tu3N2NJp6cxWXNuqozIPTANV0w72eqOxB83XgNEJRsZ-_f7_qkC0}
Vandenberg (Launch Pad)
$ nc light-fever.satellitesabove.me 5030 Ticket please: ticket{juliet129249mike2:GNxsvTYyRq-i5Uzg9OyZx4pkX39q3b2DZXvTuKGQ-SpEersEyEerz1gnRs_GxsWoWw} 1381188155 + 299201040 = ?
計算問題が出題されるので答える。
import socket def recvuntil(s, tail): data = '' while True: if tail in data: return data data += s.recv(1) ticket = 'ticket{juliet129249mike2:GNxsvTYyRq-i5Uzg9OyZx4pkX39q3b2DZXvTuKGQ-SpEersEyEerz1gnRs_GxsWoWw}' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('light-fever.satellitesabove.me', 5030)) data = recvuntil(s, '\n').rstrip() print data print ticket s.sendall(ticket + '\n') data = recvuntil(s, '?') formula = data.split(' = ')[0] ans = str(eval(formula)) print data + ans s.sendall(ans + '\n') data = recvuntil(s, '\n').rstrip() print data data = recvuntil(s, '\n').rstrip() print data data = recvuntil(s, '\n').rstrip() print data
実行結果は以下の通り。
Ticket please: ticket{juliet129249mike2:GNxsvTYyRq-i5Uzg9OyZx4pkX39q3b2DZXvTuKGQ-SpEersEyEerz1gnRs_GxsWoWw} 1381188155 + 299201040 = ?1680389195 You got it! Here's your flag: flag{juliet129249mike2:GA2H-aYaRo2aO92FZYrxxlwHUghqK8rhn70U1bPCWv1msQyAIQ5cCeqMtWbhFr9FS4oo1mUiu9BlzG6vKXbTOmw}
flag{juliet129249mike2:GA2H-aYaRo2aO92FZYrxxlwHUghqK8rhn70U1bPCWv1msQyAIQ5cCeqMtWbhFr9FS4oo1mUiu9BlzG6vKXbTOmw}
Edwards (Launch Pad)
$ nc sharp-object.satellitesabove.me 5031 Ticket please: ticket{mike765988hotel2:GMk7kVfski9enWkhCIP_L2WyfJ8mhq7vqts4PLhFYLJ7awd9HrSXsB0JMLpSsTUFzg} Please navigate to http://52.14.38.134:19048/ in your favorite browser. You have 60 seconds.
これで60秒間有効なURLが表示されるので、ブラウザでアクセスする。
「This is the way」のリンクをクリックしたら、フラグが表示された。
flag{mike765988hotel2:GH4gL6bP15VVEr7sSjNDnF6Wy2ai-RAzrKG_ampH4kjHe18aO2FnVGohYyKuWPUIknvpWvDGXqVcFfrcUa5CqVY}
iq (We're On the Same Wavelength)
$ nc unique-permit.satellitesabove.me 5006 Ticket please: ticket{echo88126papa2:GETJ79_7Zs8MnOuKypq_QGJnT8qbHNv1a9i7OYQ8tLlkzXO0bDS9_SXDd3dT-kqCLA} IQ Challenge QPSK Modulation Q | 01 | 11 o |+1 o | | -1 | +1 ===================== I | | 00 | 10 o |-1 o | | Convert the provided series of transmit bits into QPSK I/Q samples |Start here v Bits to transmit: 01000011 01110010 01101111 01101101 01110101 01101100 01100101 01101110 01110100 00001010 Provide as interleaved I/Q e.g. 1.0 -1.0 -1.0 1.0 ... I Q I Q ... Input samples:
0は -1.0、1は 1.0に置き換えればよい。
import socket def recvuntil(s, tail): data = '' while True: if tail in data: return data data += s.recv(1) ticket = 'ticket{echo88126papa2:GETJ79_7Zs8MnOuKypq_QGJnT8qbHNv1a9i7OYQ8tLlkzXO0bDS9_SXDd3dT-kqCLA}' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('unique-permit.satellitesabove.me', 5006)) data = recvuntil(s, '\n').rstrip() print data print ticket s.sendall(ticket + '\n') data = recvuntil(s, ': ') bits = recvuntil(s, '\n').rstrip() print data + bits data = recvuntil(s, ': ') bits = bits.replace(' ', '') ans = '' for b in bits: if b == '0': ans += '-1.0 ' else: ans += '1.0 ' ans = ans[:-1] print data + ans s.sendall(ans + '\n') data = recvuntil(s, '\n').rstrip() print data data = recvuntil(s, '\n').rstrip() print data
実行結果は以下の通り。
Ticket please: ticket{echo88126papa2:GETJ79_7Zs8MnOuKypq_QGJnT8qbHNv1a9i7OYQ8tLlkzXO0bDS9_SXDd3dT-kqCLA} IQ Challenge QPSK Modulation Q | 01 | 11 o |+1 o | | -1 | +1 ===================== I | | 00 | 10 o |-1 o | | Convert the provided series of transmit bits into QPSK I/Q samples |Start here v Bits to transmit: 01000011 01110010 01101111 01101101 01110101 01101100 01100101 01101110 01110100 00001010 Provide as interleaved I/Q e.g. 1.0 -1.0 -1.0 1.0 ... I Q I Q ... Input samples: -1.0 1.0 -1.0 -1.0 -1.0 -1.0 1.0 1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 -1.0 -1.0 1.0 1.0 -1.0 1.0 1.0 1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 -1.0 1.0 1.0 1.0 -1.0 1.0 -1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 -1.0 -1.0 1.0 -1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 1.0 -1.0 You got it! Here's your flag: flag{echo88126papa2:GL7EtSGPuI6Jiz0StQJ0xLlP2ugBA0MNzXTsdArBZjDzXqdPeU7fsNU3xBvhIpSL5huK7h6wZmOAgwmOSV1ezhU}
flag{echo88126papa2:GL7EtSGPuI6Jiz0StQJ0xLlP2ugBA0MNzXTsdArBZjDzXqdPeU7fsNU3xBvhIpSL5huK7h6wZmOAgwmOSV1ezhU}