はじめに:sqlsusとは?
sqlsusは、Perlで書かれたオープンソースのMySQLインジェクションおよびデータベース奪取ツールです。主にMySQLを対象としていますが、その強力な機能セットは、セキュリティ専門家やペネトレーションテスターにとって非常に価値があります。コマンドラインインターフェース(CLI)を通じて、データベース構造の取得、独自のSQLクエリの注入(複雑なものでも可能)、Webサーバーからのファイルダウンロード、書き込み可能なディレクトリの探索、バックドアのアップロードと制御、データベースのクローン作成など、多岐にわたる操作を実行できます。
sqlsusの大きな特徴の一つは、可能な限りMySQLコンソールの出力を模倣しようとすることです。これにより、MySQLに慣れているユーザーは直感的に操作できます。また、速度と効率性を重視して設計されており、利用可能なインジェクションスペースを最適化し、MySQL関数を最大限に活用します。スタックされたサブクエリと強力なブラインドインジェクションアルゴリズムを使用し、Webサーバーへのヒットあたりのデータ収集量を最大化します。マルチスレッド機能と組み合わせることで、インバンドインジェクションでもブラインドインジェクションでも、非常に高速なデータベースダンパーとして機能します。
バックエンドとしてSQLiteを使用しており、取得したデータの管理や再利用が容易です。セッション間で情報を保持し、クローン作成などの機能を通じて、中断した箇所から作業を再開できます。
sqlsusのインストール
sqlsusはPerlで書かれているため、実行にはPerlインタプリタといくつかのPerlモジュールが必要です。Kali Linuxなどのペネトレーションテスト用ディストリビューションでは、リポジトリから簡単にインストールできる場合があります。
Kali Linuxでのインストール
Kali Linuxを使用している場合、aptパッケージマネージャーを使って簡単にインストールできます。
まず、パッケージリストを更新します。
sudo apt update次に、sqlsusをインストールします。
sudo apt install sqlsusこれにより、sqlsus本体と必要な依存関係(Perlモジュールなど)が自動的にインストールされます。
インストールを確認するには、ヘルプオプションを付けて実行します。
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> startshow target:startコマンドで取得したターゲット情報(データベース名、ユーザー名、バージョンなど)を表示します。sqlsus> show targetget databases: 利用可能なデータベースの一覧を取得します。sqlsus> get databasesshow databases:get databasesで取得済みのデータベース一覧を表示します。sqlsus> show databasesuse <database_name>: 操作対象のデータベースを切り替えます。sqlsus> use information_schemaget tables: 現在のデータベース内のテーブル一覧を取得します。sqlsus> get tablesshow tables: 取得済みのテーブル一覧を表示します。sqlsus> show tablesget columns <table_name>: 指定したテーブルのカラム(列)一覧を取得します。sqlsus> get columns usersshow columns <table_name>: 取得済みの指定テーブルのカラム一覧を表示します。sqlsus> show columns usersselect <column(s)> from <table_name> [where ...]: 指定したテーブルからデータを取得します。通常のSQLのSELECT文に近い構文が使えます。sqlsus> select user, password from users where id=1取得したデータは内部のSQLiteデータベースにキャッシュされます。
show all: これまでに取得したすべての情報(ターゲット、DB、テーブル、カラム)を表示します。sqlsus> show alldownload <remote_file>: サーバー上のファイルをダウンロードします(FILE権限が必要)。sqlsus> download /etc/passwdupload <local_file> <remote_path>: ローカルファイルをサーバーにアップロードします(FILE権限と書き込み可能なディレクトリが必要)。sqlsus> upload backdoor.php /var/www/html/uploads/clone database <db_name>: 指定したデータベース全体をローカルのSQLiteデータベースにクローンします。sqlsus> clone database my_app_dbclone table <table_name>: 指定したテーブルをクローンします。sqlsus> clone table usershistory: 実行したコマンドの履歴を表示します。exitまたはquit: sqlsusを終了します。セッション情報は保存されます。
get コマンドは実際にサーバーにリクエストを送信して情報を取得し、show コマンドはローカルにキャッシュされた情報を表示します。
主要な機能
sqlsusは単なるSQLインジェクションツールに留まらず、多くの高度な機能を提供します。
高速なデータ抽出
MySQLライクなインターフェース
use database, show tables, select などのコマンドが直感的に利用できます。タブ補完もサポートしています。 SQLiteバックエンド
データベース/テーブルのクローン作成
clone コマンドを使用して、リモートのデータベースやテーブル全体をローカルのSQLiteファイルにコピーできます。大規模なデータセットのオフライン分析や、複数セッションにわたるデータ取得に便利です。 ファイル操作とバックドア設置
download コマンドでサーバー上のファイルをダウンロードしたり、upload コマンドでファイルをアップロードしたりできます。書き込み可能なディレクトリを探索し、バックドア(例: PHPシェル)を設置する機能も備えています。 高度なインジェクション技術
information_schema が利用できない場合のためのテーブル名・カラム名のブルートフォース機能も搭載。マジッククォートなどのフィルタリングを回避するためのHEXエンコーディング機能もあります。 ネットワーク機能
Webサイトクロール
<a>, <img> など)からディレクトリ構造を把握し、書き込み可能なディレクトリを見つけるのに役立ちます。これはファイルアップロード機能と連携して使用されます。 応用的な使い方とヒント
ブラインドSQLインジェクション
エラーメッセージや直接的なデータ表示がない場合でも、sqlsusはブラインドSQLインジェクションを駆使して情報を抽出します。設定ファイルで Sblind_diff や関連するオプションを調整することで、精度と速度を最適化できます。時間ベースのブラインドインジェクションでは、Sbblind_sleep で遅延時間を設定します。
information_schemaが使えない場合
MySQL 5未満や権限不足で information_schema データベースにアクセスできない場合でも、sqlsusはテーブル名やカラム名を推測するためのブルートフォース機能を提供します。設定ファイルの Sbrute_tables や Sbrute_columns で辞書ファイルを指定し、get tables --brute や get columns <table> --brute のようにコマンドを実行します。
クォートのエスケープ回避
magic_quotes_gpc などでシングルクォートやダブルクォートがエスケープされてしまう場合、設定ファイルの Sforce_hex を 1 に設定すると、文字列リテラルが自動的にHEXエンコード(例: 'admin' → 0x61646d696e)され、エスケープを回避できることがあります。
ファイルアップロードとバックドア
FILE権限があり、書き込み可能なディレクトリを見つけられれば、Webシェルなどのバックドアを設置できます。
crawlコマンドで書き込み可能なディレクトリを探します(設定ファイルでSdocument_rootの設定が必要な場合があります)。upload <local_shell.php> <remote_writable_dir/shell.php>でシェルをアップロードします。- ブラウザなどからアップロードしたシェルにアクセスして、サーバーを操作します。
セッションの管理
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アプリケーションのセキュリティ向上に役立てましょう。
参考情報
- sqlsus 公式サイト (SourceForge – 古い可能性あり): http://sqlsus.sourceforge.net/
- Kali Linux Tools – sqlsus: https://www.kali.org/tools/sqlsus/ (ツールの概要と基本的な使い方)
- sqlsus GitLab (Kali Packaging): https://gitlab.com/kalilinux/packages/sqlsus (依存関係などの情報)
これらのリソースや、ツールの help コマンド、設定ファイル内のコメントを参照することで、より詳細な情報を得ることができます。