Index
会場写真の QR を読む Welcome 問。
zbarimg に通すとそのまま読める。
フラグは <pre>FLAG: {{ flag }}</pre> で HTML にそのまま埋め込まれている。
右クリック禁止やコピー禁止などの JavaScript は入っているが、見た目を邪魔しているだけ。
view-source: で開くか curl すればコピーできる。
コピー禁止は意味ないよという初学者向けの問題。
main.c では入力文字列に memfrob をかけて expected と比較している。
memfrob は各 byte を 0x2a で XOR するだけなので、同じ操作で復号できる。
expected = [...]
print("".join(chr(x ^ 42) for x in expected))
server.py は 1文字出力するたびに sleep(i) しており、
Dockerfile では socat -T5 で公開されている。
for i, c in enumerate(flag):
print(c, end="", flush=True)
time.sleep(i)
CMD ["socat", "-T5", "tcp-listen:1337,fork,reuseaddr", "exec:'python server.py'"]
Alpaca{ までは見えるが、その次は 6 秒待ちになるので接続が切れる。
なので nc で繋ぎっぱなしにするのではなく、5 秒未満ごとに適当な 1 byte を送り続けて timeout を回避すれば全文が読める。
{ while sleep 1; do printf a; done; } | nc 34.170.146.252 10951
username がHTML にそのまま埋め込まれており、bot に踏ませる反射XSS 問題。
ただし flag と alert は blacklist されているので、文字列連結で回避する。
<script>this['al'+'ert'](eval('fl'+'ag'))</script>