読者です 読者をやめる 読者になる 読者になる

dorapon2000’s diary

忘備録的な。CTFやってます。

fstabをぐしゃぐちゃにしてFreeBSDが起動しなくなった話

研究室の計算機にFreeBSDを入れる際、使い慣れてないviでfstabに項目を追加しようとして、中身をぐちゃぐちゃにしてしまいました。

保存せずに終了するつもりが:q!の:(コロン)が打てず。 仕方なく一度保存して、pkgでemacsをいれて改めて編集しようとするも、emacs24-24.5_3,3の_(アンダーバー)が入力できず。 (# pkg install emacsでは複数のemacsを入れてしまいうまく動かないようです。*1 )

ここで英字配列としてキーボードを認識してるから_が書けないのだと気づくも、:も同じ理由で書けていなかったとまで頭が回りませんでした。 てっきりコマンドモードに移行できていないのかと思っていました。

とりあえず、fstabの問題はおいておき別の設定をし、満足して電源を落とすところから長い格闘が始まります。

結果的にどうでもいいことに悩まされていたのですが、記録に残しておかなくては気が収まりません。


解決方法

fstabはデバイスを起動時に自動的にマウントさせるための設定ファイルです。

私はそのなかのHDDを/(ルートディレクトリ)にマウントする行をぐちゃぐちゃにしてしまっていました。 もちろん、いつも通りにブートしようとするとマウントするデバイスが適切でない旨のエラーが表示され、FreeBSDは起動しません。

その時、適切なデバイスをマウントさせるよう入力モードになります。

mountroot>

ここで入力できる値はヘルプの?と形式にのっとったマウントするデバイスの名前だけです。

?を入力するとその計算機に接続されているストレージ情報が列挙されます。 その中のHDDにあたるものをマウントさせたいわけですね。

今回の私の例ですと以下のように/etc/fstabには書かれていたので、

/dev/ada0p2    /   ufs   rw   1   2

バイス名は/dev/ada0p2、ファイルシステムはufs、オプションはrwとわかります。

形式は[ファイルシステム]:[デバイス名] [オプション]です。 なお、:は英字配列では[shift] + [ ; ]です。[shift] + [ ] ]はブロークンバーなんですが、フォントによっては:に見えるので注意です。

mountroot> ufs:/dev/ada0p2 rw

すると次はシェルが起動します。 正しくブートされたわけではなく、ここでエラーの原因を直せということです。

使えるエディタはviだけではないことを研究室仲間に教えてもらい、ここからはeeを使ってfstabを直しました。 eeはemacsライクなキーバインドを持ちあわせており、親切にも上方にコマンドの説明が書かれています。

ぐちゃぐちゃにしてしまったfstabを正しく直して、リブートすれば元通りにFreeBSDが起動してくれます。

他に試したこと

「fstab いじる」などで検索するとシングルユーザーモードを使えと出ます。 FreeBSDの最初のメニューで選択できるんですが、2.シングルユーザーモードでも結局

mountroot>

が表示されてしまい、本当に悩まされました。

3.Escape to loader promptでは上の問題が起こらずコマンドのようなものを打てるのですが、シェルとは違うようです。 あくまでブートに関するコマンドだけで、詳しくはFreeBSD ハンドブックをご覧ください。

別の手段として、Puppy LinuxをUSBからブートしてHDDのfstabを変更しようと試みたのですが、FreeBSDファイルシステムGPTはPuppy Linuxで読み込めませんでした。 調べているとgdiskというコマンドでGPT内のファイルも書き込めるようです。*2 ただ、難しくて理解できてません。

参考文献

USBメモリからPuppy Linuxを起動した話

うちのデスクトップPCは随分長く使っていて、もし起動しなくなってもHDDのデータを取り出せるようにと防災訓練したお話です。バックアップはとってありますがやった事なかったので。


流れとしては、MacからUSBメモリPuppy Linuxを書き込み、デスクトップでUSBブートさせました。書き込みの部分はWindowsでも同じ手順でできます。

まずPuppy LinuxのISOファイルをダウンロードします。http://openlab.jp/puppylinux/download/puppy-5.7.1JP/のprecise-571JP.isoですね。日本語対応バージョンになっています。

USBメモリに書き込むために、UNetbootinというソフトも必要です。OSに対応したものをダウンロードします。UNetbootinを起動して図のように選択をします。
f:id:dorapon2000:20160626055937p:plain
あとは手順に従っていればUSBメモリに自動で書き込みされます。 ちなみに図の上の選択肢を選ぶとISOファイルも自動でダウンロードしてくれるそうです。ただし日本語に対応してないかもしれません。

USBメモリを起動させたい方の端末(私の場合デスクトップ)に差し込んで電源をいれ、バイオスを起動させます。Advanced -> Advanced Chipset Setup -> USB Storage Device Support -> EnableでUSBからのブートが可能になります。念のためBootタブでUSB HardDiskのプライオリティがHard Diskよりも高いかを確認し、大丈夫ならば適応と再起動で無事Putty Linuxが起動します。起動する際何か選択を迫られますがDefaultでいいです。

Putty Linux内でHDDのデータをUSBに移すことができればデータを救済できます。

注意点として、どうやら最新版でもOpenSSLの脆弱性に対応してないそうなので、ネットにも繋ぎたいという方はパッチをあてはめる必要があるようです。詳しくは調べてません。

参考文献

パス付きRARファイルをJohn The Ripperで解析

JTRの真の力を全然わかっていなかったので記録に残しておきます。
MACでのzipのパス解析はいくらでも検索がヒットする一方で、rarのパス解析はなかなか難儀しました。LinuxであればRarCrackというツールがあるそうですが、ソースから引っ張ってMACコンパイルしても動きませんでした。*1
四苦八苦してるうちにJTRでもrarのパス解析ができることがわかりました。JTRは指定された形式になっているパスファイルならば解析可能ということで、rarもファイルからパスを抽出してその形式でファイルに出力すればJTRでも読み込めます。そのパスファイルを作成してくれるツールサードパーティが作っており、JTRのcommunity-enhanced versionに含まれています。

まずダウンロードしてから解凍。

$ mkdir tmp
$ cd tmp
$ wget http://www.openwall.com/john/j/john-1.8.0-jumbo-1.tar.xz
$ tar xfz john-1.8.0-jumbo-1.tar.gz

srcフォルダにサードパーティが作った様々なツールソースコードがあるのでmakeします。そのうちの1つが目的のrar2johnです。

$ cd john-1.8.0-jumbo-1/src/
$ ./configure
$ make

実行ファイルはrunフォルダにあります。

$ cd ../run

パス解析のやり方はパスファイル作成で途中下車して、それをJTRに任せるという流れです。

$ ./rar2john ../test.rar > ../rar.hashes
$ ./john ../rar.hashes

デフォルトですと
1. ファイルの名前によるパス予想
2. 辞書攻撃
3. 総当り攻撃
のようです。 オプションを付ければ細かい設定ができます。

# singleモード(1.)
$ ./john --single ../rar.hashes

# 辞書攻撃
$ ./john --wordlist=password.lst ../rar.hashes

# 総当り攻撃
$ ./john --incremental  ../rar.hashes

実際の実行の様子です。パスワードはdog。

$ ./john ../testrar.hashes
Warning: detected hash type "rar", but the string is also recognized as "rar-opencl"
Use the "--format=rar-opencl" option to force loading these as that type instead
Loaded 1 password hash (rar, RAR3 [SHA1 AES 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:02 0.92% 1/3 (ETA: 06:46:10) 0g/s 32.70p/s 32.70c/s 32.70C/s Rar.tsetr
0g 0:00:01:41 17.47% 1/3 (ETA: 06:52:12) 0g/s 35.20p/s 35.20c/s 35.20C/s Ttxt<
0g 0:00:08:49 81.79% 1/3 (ETA: 06:53:20) 0g/s 32.80p/s 32.80c/s 32.80C/s Testtxt1234
dog              (test.rar)
1g 0:00:12:56 DONE 2/3 (2016-02-28 06:55) 0.001288g/s 31.77p/s 31.77c/s 31.77C/s dog
Use the "--show" option to display all of the cracked passwords reliably
Session completed

1ステージ目のファイル名からは類推できず、2ステージ目の辞書攻撃でdogと判明したようです。 ちなみに実行中に適当なキーを打つことで途中経過を見れます。

今回はrar2johnを使用しましたが、zip2johnを使用すれば全く同じようにzipファイルでパス解析できます。

参考にしたリンク