Writeup: EBCTF 2013 - Challenge NET200 “Who's there”

ウェブサイトにアクセスすると
112 + 386 + 712 + 1398 + 8771 + 11982 + 15397 + 23984 = 51037
という右辺と左辺があっていない数式が表示される。

ポートスキャンなどをして迷走した後、HTTPヘッダを調べてみると X-Powered-By: *knock knock* というヘッダが含まれていることに気づいた。ノックノック・ジョークというものがあるらしい。

技術的にはノックというと、ポートノッキングというものがあり、ある順番でポートにアクセスした時にだけ特定のポートにアクセスできるようになる。Linuxで動くデーモンにはknockdがある。

式にあるポートに順にアクセスしてみると、51037ポートから返事があった。

$ for port in 112 386 712 1398 8771 11982 15397 23984 51037; do nc 54.216.81.14 $port; done
So you are knocking me, how about I return the favor?
Repeat after me and I will open the last port...

"Repeat after me"というので、パケットキャプチャしてみるとパケットが送られてきている。

00:41:06.753555 IP 54.216.81.14.1337 > our-server.8112: Flags [S], seq 0, win 8192, length 0
00:41:07.764105 IP 54.216.81.14.1337 > our-server.33386: Flags [S], seq 0, win 8192, length 0
00:41:08.772301 IP 54.216.81.14.1337 > our-server.14712: Flags [S], seq 0, win 8192, length 0
00:41:09.784681 IP 54.216.81.14.1337 > our-server.4398: Flags [S], seq 0, win 8192, length 0
00:41:10.792207 IP 54.216.81.14.1337 > our-server.1771: Flags [S], seq 0, win 8192, length 0
00:41:11.794845 IP 54.216.81.14.1337 > our-server.52313: Flags [S], seq 0, win 8192, length 0
00:41:12.807493 IP 54.216.81.14.1337 > our-server.25697: Flags [S], seq 0, win 8192, length 0
00:41:13.816073 IP 54.216.81.14.1337 > our-server.932: Flags [S], seq 0, win 8192, length 0
00:41:14.824361 IP 54.216.81.14.1337 > our-server.22222: Flags [S], seq 0, win 8192, length 0

この順にncでアクセスしてみたが、ポートが開いておらず、1秒でタイムアウトして次に行くようにしてみても22222からは返事がない。

今度は正確に"Repeat after me"しようという事で、hping3を使用して同じパケットを送りつけてみた。

for port in 8112 33386 14712 4398 1771 52313 25697 932; do
  echo knock $port
  sudo hping3 -q -c 1 -S -M 0 -w 8192 -p $port 54.216.81.14 >/dev/null 2>&1
done
nc -w 1 54.216.81.14 22222

すると、今度は返事が得られた。設定ファイルの一部である。

[Advanced]
        sequence    = 234,781,983,2411,9781,14954,23112,63991
        seq_timeout = 15
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 32154 -j ACCEPT
        tcpflags    = fin,urg,!ack
        cmd_timeout = 30
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 32154 -j ACCEPT

この設定ファイルに従ってさらにパケットを送る。

for port in 234 781 983 2411 9781 14954 23112 63991; do
  echo knock $port
  sudo hping3 -q -c 1 -F -U -p $port 54.216.81.14 >/dev/null 2>&1
done
nc -w 1 54.216.81.14 32154

これでフラグが送られてきた。

ebCTF{32c64f2542ba4566acff750196ca2e13}