SadServers解説#4 "Taipei": Come a-knocking
問題概要
シナリオ
ノックしてください
問題詳細
WEBサーバーが通信を待っている80番ポートが、ポートノックによって保護されています。
curl localhost
コマンドが実行できるようになるために必要な、"一つのノック"を見つけてください。(今回は、シーケンスではなく、単一のポートに対してSYNパケットを送信してください。)
※シーケンスとは、決められた順番で処理をすること(今回の問題で言えば、決められた順番でポートをノックすること)を意味していると思われます。
解決判定
ポートノックの保護を解除することができたら、Check My Solution
ボタンをクリックしてください。
また、ポートノックの保護を解除した場合、以下と同じハッシュ値が得られます。
(改行コードを含めた状態でテストをする必要があるため、他の問題と異なる方法でハッシュ値を求めています。)
~$ echo $(curl localhost) > test
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13 100 13 0 0 13000 0 --:--:-- --:--:-- --:--:-- 13000
~$ md5sum test
fe474f8e1c29e9f412ed3b726369ab65 test
問題解決の方針
【表示する】
今回の問題では、一つのポートをノックすることで80番ポートが解放されるとのことです。
しかし、65536通りのポートを手動でノックする場合、15分で解決できるとは限りません。
今回は、80番ポートが解放されるまで、片っ端からポートをノックするシェルスクリプトを作成します。
以下の手順で問題を解決します。
解決の手順を表示する
- 80番ポートが空くまで片っ端からポートをノックするシェルスクリプトを作成し、実行する
ヒント
一部、SadServers公式のヒントを改変しています。
ヒント1
knock
コマンドを使うことで、ポートをノックすることができます。
実行コマンド
以下のコマンドを実行することで、ポート3000をノックすることができます。
~$ knock localhost 3000
ヒント2
curl
コマンドやnmap
コマンドを実行することで、80番ポートが開放されているか確認することができます。
実行コマンド
~$ curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
~$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-23 10:14 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
ヒント3
すべてのポートを順次ノックするシェルスクリプトを作成します。ポートの有効範囲は0~65535です。
シェルスクリプトを作成後、ファイルに実行権限を付与して実行します。
実行コマンド
~$ vi portknock.sh
~$ cat port-knock.sh
#!/bin/bash
for port in `seq 0 65535`; do
knock localhost $port
echo "Knocked on port $port"
if curl -sSf localhost &>/dev/null; then
echo "The Port 80 has been opened!"
exit 0
fi
done
~$ chmod 755 port-knock.sh
~$ ./port-knock.sh
Knocked on port 0
Knocked on port 1
Knocked on port 2
...
Knocked on port 7000
Knocked on port 7001
The Port 80 has been opened!
curl -sSf localhostの出力を/dev/nullに渡しているのは、エラーメッセージがたくさん出て見にくくなってしまうことを防ぐためです。
80番ポートが開いているか確認してみます。
~$ curl localhost
Who is there?
~$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-23 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
無事、80番ポートが開きました。
「いきなり問題を解き始めても調べるばかりになってしまう…」 「やりたいことが分かっても、コマンドが分からない…」 という方は、下記の記事でLinuxのコマンドを復習してから、SadServersの問題に取り掛かってみてはいかがでしょうか。
問題一覧はこちら
Discussion