2014年10月20日月曜日

パスワードが分からないSQL DB(データベース)からデータを抜き出す

コスモテック特許情報システム社の期限管理システム PATDATAに関して、ユーザの方が契約内容によっては、DB(データベース)のパスワードを知らされていないとのことでしたので、パスワードが分からない場合でもDBからデータを取り出す方法をまとめました。

『他社システムに移行する際に、元のシステムのDBを直接参照したい』といった用途でご活用頂ければ幸いです。

※ 勘違いのないように先に補足しますが、下記の方法は、元来システム管理者が緊急時に用いるものであり、リモートから他社DBの情報をクラックして入手するなどの不正な用途には使えません。(物理的にサーバが手元にあることが前提になっています。)

最初に

以下に記載している各種SQL DB(データベース) への接続方法は、基本的に
  • 物理的にサーバ(ハードウェア)が手元にある
  • SQLサーバ(サービス)を実行しているサーバ(OS)の管理者権限を有している
ことが前提になっています。
※SQL Serverのみ管理者権限なしでもログインできる可能性はあります。

Windowsサーバの管理者パスワードが分からない場合は、システムディスクを用いてなんやかんやしてください。例えば、下記を参照。
Linuxサーバのrootパスワードが分からない場合は、シングルユーザモードで起動してください。

CACHÉ の場合

PATDATAで用いられているDBの場合になります。厳密には、SQL DBではなく、内部的にはNoSQLに近いようですが…、本題と関係ないので割愛します。

EmergencyAccessモードでDBサービスを起動させることで、パスワードの書き換えが可能です。

PostgreSQL@Windows,Linuxの場合

  1. pg_hba.confを編集し、ローカルホストではパスワードなしで接続できるようにする
  2. pg_hba.confを再読み込み
詳しくは下記blog記事をご参照ください。

MySQL@Windows, Linuxの場合

  1. サービスを停止
  2. パスワードなしでログインできるよう起動オプションをつけてmysqldを起動
詳しくは下記記事を参照。
SQLCMDを使う。詳しくは、下記記事を参照。

Appendix1: SQLサーバの管理者権限がない場合①

Wireshark (フリーのパケットキャプチャ)を使えば、SQL Serverにログインする時の通信に含まれる暗号化されたパスワードが、デコードされた状態で表示されます。

というわけで、ログイン時のパケットをキャプチャするだけでOK。詳しくは、下記記事を参照。
NVIDIA社のGPU (GPGPU)を用いて、ブルートフォースアタックでパスワードを解析する。3世代前のGPU (GTX290)でも、2億個/秒 の速度でパスワードを照会できるようなので、現行のGPUであれば、並みのパスワードは実時間(数秒~1日程度)で解析できるはず。Oracle社のDBにも対応。
※ ソースコードごと開示されていますが、利用しているCUDA SDKが、CUDA2.1とだいぶ前のものなので、現在のGPUで動かすには若干の修正が必要かもしれません。(未確認)

※ DBへのアクセス部分を書き換えれば、他のDBに対しても使えるような気がします。(未確認)