SSH経由で接続すると、すぐにrbashに入ります。
周りを見てみると、通常のウォークに進むことができる実行可能なファイルがないことが明らかになります。
rbash-4.3$ [tab] ! ]] builtin compgen declare echo eval fc getopts in logout pwd readonly shopt time typeset until alias caller complete dirs elif exec fg hash jobs mapfile return source times ulimit wait : bg case compopt disown else exit fi help kill popd rbash select suspend trap umask while [ bind cd continue do enable export for history let printf read set test true unalias { [[ break command coproc done esac false function if local pushd readarray shift then type unset }
システムをさらに見回す:
-rbash-4.3$ pwd /
ルートディレクトリにいることを理解しています。 最初の考え-それは素晴らしい! ただし、さらに調べます。
-rbash-4.3$ echo ./* bin dev flag lib lib64 -rbash-4.3$ echo ./bin/* rbash -rbash-4.3$ echo ./flag/* showFlag
少なくとも、旗の位置はわかっています。 しかし、ここでは、ファイルの属性を見るだけではそれほど簡単ではありません。
-rbash-4.3$ if [[ -r flag/showFlag ]]; then echo ok; fi -rbash-4.3$ if [[ -x flag/showFlag ]]; then echo ok; fi ok -rbash-4.3$ if [[ -G flag/showFlag ]]; then echo ok; fi -rbash-4.3$ if [[ -O flag/showFlag ]]; then echo ok; fi
これはバイナリであり、まだ私たちのものではないことを理解しています。 /を使用してコマンドを実行することは禁止されているため、 cdを使用するように変更します。 PATH変数の変更方法を理解する必要がありました。
rbash-4.3$ unset -v PATH rbash: unset: PATH: cannot unset: readonly variable
環境変数は次のように変更できます。
- PATH = deadbeefを設定します
- タイプセットPATH = deadbeef
- エクスポートPATH = deadbeef
- PATH =デッドビーフ
- PATH = deadbeefを宣言する
各チームのドキュメントを注意深く調べた後、次の興味深い断片に出くわすことができます。
declare:declare [-aAfFgilnrtux] [-p] [name [= value] ...]
変数の値と属性を設定します。
...
-n NAMEを、その値で指定された変数への参照にします
うーん、変数を直接変更することはできないので、リンクを作成してみてください。
rbash-4.3$ declare -n PATH rbash-4.3$ export PATH=/flag
エラーは発生していません。 変更を確認します。
rbash-4.3$ echo $PATH /flag rbash-4.3$ showFlag BKP{vimjail_is_down,_fortunately_we_have_rbash_to_save_the_day}
旗があります。 割り当てが完了しました。 たとえば、 bashがあった場合、同じ方法で開始できます。