rbashにロックされている場合の対処方法

さらに最近、別の興味深いCTF Boston Key Party 2017が開催されました 。 残念ながら勝てませんでしたが、これは別の話です。 今日は、 pwnセクションの1つのタスクの解決策について説明します。 「孤立監禁(pwn 99)」



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
      
      





環境変数は次のように変更できます。





各チームのドキュメントを注意深く調べた後、次の興味深い断片に出くわすことができます。

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があった場合、同じ方法で開始できます。



All Articles