座学ばかりもつまらないし、たけけんのサーバー勉強日記といえば体験学習だ!
そうだったの?
そうなんです。
2回も続けて同じネタをやってもいいんですか?
いいんです!
ということで、SQLインジェクションをやります。SQLインジェクションをやってみましょう。
ネタはどうしようかしらとブックマークに眠っているネタフォルダを探してみた。もういい加減に溜まりすぎてジャンルがめちゃくちゃだ。
参考サイト
SQLインジェクションでWebサイトをハッキングする方法(超意訳版) – おかねがない(゚∀゚)ッ!!:
まず、インジェクションとはなんでしょうか。
原付きのエンジンしか知らなかったわたしはインジェクションの存在を知らずにキャブレターが車にも付いていると思っていた。
最近の車にキャブなんかついてないっすよ!
なんて突っ込まれた事も記憶に新しいですが、まったく関係ありません!!
何をしているかというと、コンピューター制御でエンジンにガソリンを送っている。らしいです。
あ、車のインジェクションのことですよ。
インジェクションを直訳すると注入です。注入するわけです。
では何を注入するのか!それを今から調べていきます。
参考サイトをお手本に進めていくとしますと、STEP1は
Step 1: セキュリティホールを持ったWebサイトを見つける
ですが、んなことやってられっかー!エンドユーザーのITリテラシーの向上が目的というキャラ設定もあるし、そんなアングラなことはできないのだ。
Step 1: セキュリティホールを持ったWebサイトを作るのだ
情報を集めましょう。
参考サイト
【速報】Joomla3.2.2以前にSQLインジェクション脆弱性 | 徳丸浩の日記:
だいたい1年前のネタです。
脆弱性を持つという条件を揃えたウェブサイトを作ってみましょう。
・Joomla 3.2.1
・テスト英語(GB)
・データベース MySQL
以上の3点です。
では、構築手順も今北産業で。
・LAMP環境を構築。
・Joomla3.2.1をインストール。
・言語を英語USにしてテスト英語(GB)とやらを選択。
以上の3ステップです。
どうせテストなので、/tmp/joomlaとか作っておいてシンボリックリンクでOKです。
ではステップ2にいきますぞ。
Step 2: セキュリティホールをチェックする
参考サイトでは
http://www.○○○.com/index.php?id=2′
こんな感じにアクセスしてみて、何も変わらなければ何もなし。SQLのエラーが吐かれたら脆弱性があるということらしい。Logwatchとかを使っている人は404で毎朝毎朝こんな感じのログが山ほど来ていることでしょう。
ログを整形してみて統計をとったりして、どんなアタックが来ているのか、流行っているのかをチェックしてみるのもおもしろいかもしれないね。
セキュリティホールを探す方法は分かりましたが、こんなことをちまちまと試している時間もないですし、スキャンするスクリプトを作るのは今回の趣旨に合わないし、そんなアングラなことはできません。
せっかく脆弱性のあるウェブサイトを構築したのですからいきなり注入に進みます。そのために構築したのですからね。
http://examle.jp/joomla/index.php/weblinks-categories?id=\
正直よく分かりませんがこのリクエストを送るとエラーが返ります。
実際に試したものをキャプチャしたものを載せます。
画面の下の方の枠にエラーが吐かれています。参考サイトにあるようなそのまんまのエラーですね。ちなみにテスト英語(GB)を入れていないJoomlaの場合だと、今と同じことをしてもこのエラーは吐かれないので試してみてください。
試してみると、あ〜エラー吐かないんだなぁって事が分かります。
ただそれだけです。
それでは注入してみますね。
注入したあとのエラーの中に「admin$P$DlMHW1N1mVlGc2CCwkBOm21uSdD.9z/」とあり、管理ユーザーとパスワードのハッシュ値にあたります。パスワードのハッシュがもろに出ちゃっている訳です。
ただハッシュ値から元のパスワードに戻すことはできません。暗号化はこういうところからも大事なことが分かります。インジェクションをうけてデータベースの情報を取られたからといって、すぐにどうにかなるということもない。という事もあるわけです。
今回例に出したのはパスワードでした。パスワードはほとんどのアプリケーションで暗号化されているでしょう。データの内容によっては暗号化されていないのもちろんあるでしょう。
脆弱性があるアプリケーションを使っていたらアップデートをすることはとっても大事ですし、常日頃から脆弱性の情報をキャッチできるようにしておくことももっと大事なのです。
などと7行ほどまじめに語ってみましたが、SQLインジェクションの話なのか脆弱性の話なのか。なんだかモヤッとするなぁ。もぅ!。
今回の件からわたしが得るべき教訓は、ほぼほぼ冗談まじりの文章の時にはそれほど目立たないかもしれないが、まじめな事を書くときにあたっては、知識が微妙なままで、騙し騙し書いていると、結局は微妙な文章になってしまうということだ。
扱っている内容的には数日かけて、じっくり作った方がいいだろうなぁ。だいたい2時間くらいで一気に書いてしまったし、おまけに眠いときにこういう話をやるもんじゃないな。また時間指定更新に戻そうかしら。
またの機会にリベンジしようではないか。