たま~に、リアルなデータが入っておらず、適当なデータしか入ってないテーブルに対してSQLを実行し、どういう感じに書けばうまく動作するのかを確認したりしたいことがある。 こういう時、だいたい今までは適当な仮想マシンとかにDBインストールして、適当なデータ突っ込んだテストDBを作ったりしてたのだけど、それもちょっと面倒くさい。なんかいい方法ないかなと調べてみたところ、そういったときにも使えそうなSQLの学習サイト『SQLZOO』というサイトを見つけた。 どうやら日本語に翻訳もされてるようだ。こんなサービスがあるとは、知らなかった…。
ちょっと前に意図的に脆弱なシステムを作る機会があって、そこでブラインドSQLインジェクションを利用して値を取得させるように作った。 で、前に 常設のCTFで似たような内容をシェル芸で解いてた のでちゃちゃっと対応できるだろうと思ってたのだけど、結構前に書いてたコードだったのでテスト時にうまくできなかったので、次に手こずらないようそこだけ抜き出して書いてみる。(サンプルに必要なURLは前述のCTFのサイトを利用)
ブラインドSQLでは、まず最初に対象の文字数を調べる必要があるので、以下のようなコマンドを実行する。
集計結果で数字を見る際に桁数がよくわからないことが会ったので、SQLで集計出力時に3桁ごとにカンマ区切りで見やすく表示させる対応をしたので備忘で残しておく。 各DBごとにSQLの記述が異なるのでひとまずよく使用されるMariaDB、PostgreSQL、OracleDB、SQL Serverごとで調べてみることにした。
1. MySQL/MariaDBの場合
MySQL/MariaDBの場合、対象のカラムをformat()で指定することで桁区切りが行える。
select format(1234567,0);
MariaDB [test]> select format(12345...
ちょっとした調べ物をしていたところ、SQLの記述中に対象のデータベースに合わせてオートコンプリートしてくれるMySQLクライアント『Mycli』というツールを見かけたので、試してみる。 Pythonで書かれており、pipからインストールが可能だ。
pip install -U mycli
MacOS X やDebian/Ubuntuの場合なら、brewやaptでもインストール可能。
brew update && brew install mycli
sudo apt-get install mycli
調べものしてたところ、OSの状態をSQLで取得できる『osquery』というFacebookの作ったツールを見かけた。 LinuxのほかMac、Windowsにも対応しているようだ。 さすがにFacebookが作ってるだけあってか、ドキュメントも充実している様子。
今回は、CentOS 7でこのツールをインストールしてみる。
1. インストール
osqueryをCentOSにインストールする場合(他のプラットフォームも同様だが)、こちらの情報を参考に進めるといいだろう。 以下のコマンドでリポジトリを追加してyumからインストールを行う。
sudo rpm -ivh...