0Pricing
Cyber Security Academy · レッスン

Webと暗号のチャレンジ

よくあるWebおよび暗号のパズルを解きます。

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

Webと暗号の二本柱

Webと暗号は、CTFに入門する際の最も一般的な2つの分野です。

  • Web問題では、稼働中のWebアプリケーションが与えられ、入力、認証、信頼の扱い方にある欠陥を見つけます。
  • Crypto問題では、暗号文、暗号方式、ときにはソースコードが与えられ、暗号の使い方の欠陥を悪用して平文や鍵を復元します。

どちらも、手順に沿った観察が成果につながります。このレッスンでは、それぞれに繰り返し登場する定番の問題を扱います。

Webターゲットへの最初の一手

何かを悪用する前に、アプリケーションの全体像を把握します。ソースを表示し、レスポンスを調べ、隠れたコンテンツを探ります。

# Inspect raw response headers and body
curl -i http://target/

# Look for hidden paths the UI does not link to
gobuster dir -u http://target/ -w wordlist.txt

# Common files worth checking by hand
# /robots.txt  /.git/  /backup.zip  /admin

SQLインジェクション

SQLインジェクションは、コードとデータを分離せずに、ユーザー入力をデータベースクエリへ連結すると発生します。

SELECT * FROM users WHERE name='INPUT'のようなクエリを組み立てるログイン機能は、文字列を閉じてロジックを変更する入力によって悪用される可能性があります。

# A classic auth-bypass payload supplied as the username
' OR '1'='1' -- 

# UNION-based extraction once the column count is known
' UNION SELECT username, password FROM users -- 

インジェクションの本当の修正方法

CTFでは、インジェクションを破る方法を学ぶことで、その防御方法も学べます。正しい防御策はパラメータ化クエリ(プリペアドステートメント)です。これにより、ユーザーデータがクエリの構造に入り込むことを完全に防げます。

# Vulnerable: input becomes part of the SQL text
query = "SELECT * FROM users WHERE name='" + name + "'"

# Safe: input is bound as a parameter, never parsed as SQL
cursor.execute("SELECT * FROM users WHERE name = ?", (name,))

クロスサイトスクリプティング(XSS)

XSSは、アプリが攻撃者の制御する入力を反映または保存し、ブラウザーがそれをスクリプトとして実行すると発生します。CTFのXSS問題では、Cookieにフラグを保持したボットが、あなたのペイロードを訪問する仕組みがよく使われます。

  • Reflected — リクエスト内のペイロードが、そのまま返されます。
  • Stored — ペイロードが保存され、後から訪れたユーザーに対して実行されます。
  • DOM-based — クライアント側のJavaScriptが、入力を安全でない形でページに書き込みます。

防御には、コンテキストに応じた出力エンコードとContent-Security-Policyを使います。<script>alert(1)</script>のようなテスト用の入力で、入力がエスケープされるかどうかを確認できます。

SSRFとパストラバーサル

Webでよく登場する手法には、ほかにも次の2つがあります。

  • Server-Side Request Forgery (SSRF) — サーバーをだまして、あなたの代わりにリクエストを送信させます。多くの場合、http://127.0.0.1のような内部専用アドレスやクラウドのメタデータエンドポイントにアクセスして、フラグに到達します。
  • Path traversal — ../のようなシーケンスを使って想定されたディレクトリから抜け出し、Webルート外のファイルを読み取ります。たとえば../../../../etc/passwdのように指定します。

どちらも、リソースの選択をユーザー入力に任せることから生じます。防御には、厳格な許可リストの使用と、パスを正規化してから検証することが必要です。

エンコードは暗号化ではない

初心者が暗号で最もよく陥る罠は、エンコードと暗号化を混同することです。エンコードは鍵がなくても誰でも元に戻せるため、機密性をまったく提供しません。

次の形式を見ただけで認識できるようにしましょう。

  • Base64 — 英字、数字、+ /を使い、多くの場合=でパディングします。
  • Hex — 0-9 a-fだけを使います。
  • ROT13 / Caesar — 読みやすい構造を持ち、文字がシフトしています。
# Decode base64
echo 'ZmxhZ3toZWxsb30=' | base64 -d

# Decode hex
echo '666c6167' | xxd -r -p

古典暗号とXOR暗号

暗号の問題では、脆弱な歴史的暗号や、実装の粗い現代的な暗号がよく使われます。

  • Caesar / Vigenere — 頻度分析や25通りのシフトをすべて試すことで破れるシフト暗号です。
  • Single-byte XOR — メッセージ全体を1バイトでXORします。256個の鍵をすべて総当たりし、読める出力を選びます。
  • Repeating-key XOR — 鍵の長さを見つけ、各鍵バイトをSingle-byte XORとして解くことで破ります。

要するに、独自暗号や古典暗号は、解析者に対して実質的な安全性を提供しません。

RSAの落とし穴

RSAは、パラメータが正しく選ばれている場合にのみ安全です。CTFの暗号問題では、壊れたRSAのインスタンスがよく与えられます。

  • 小さな法 — nが十分に小さければ、直接素因数分解して秘密鍵を復元できます。
  • 小さな指数とパディングなし — e=3で短いメッセージの場合、暗号文が完全立方数になり、整数立方根によって復元できることがあります。
  • 共有された因数 — 2つの公開鍵が同じ素数を共有している場合、それぞれの法の最大公約数から、その素数を即座に特定できます。

実際の世界での防御策は、大きな鍵と適切なパディング(OAEP)を備えた、十分に検証されたライブラリを使うことです。暗号を決して独自実装してはいけません。

ハッシュのクラック

課題でパスワードのハッシュが与えられた場合、目的は元の入力を復元することです。ハッシュを逆算することはできませんが、入力を推測して照合することはできます。

# Identify the hash type first
hashid 5f4dcc3b5aa765d61d8327deb882cf99

# Dictionary attack with hashcat (mode 0 = raw MD5)
hashcat -m 0 hash.txt rockyou.txt

# John the Ripper alternative
john --wordlist=rockyou.txt hash.txt

再現可能なワークフロー

両方のカテゴリに共通する一貫したループで、これらを整理します。

  • 観察する — プロンプトを読み、ソースを確認し、エンコーディングや方式を特定します。
  • 仮説を立てる — 可能性の高い脆弱性の種類を見極めます。
  • 小さくテストする — 1つの検証用ペイロードを送り、正確なレスポンスを確認します。
  • 悪用する — 成功した検証用ペイロードを、フラグを得られる完全なペイロードへ発展させます。
  • 記録する — 記憶が新しいうちに、ペイロードと推論を記録します。

このループに従えば、深みにはまりにくくなり、ほとんど手間をかけずにWriteupを作成できます。

クイックチェック

Webと暗号の基礎をどの程度理解できているか確認します。

まとめ

繰り返し登場するWebと暗号のパズルについて学びました。

  • Web:まず全体を把握し、その後SQLインジェクション、XSS、SSRF、パストラバーサルを調べます。これらはすべて、ユーザー入力を安全であると無条件に信頼することに起因し、コードとデータを分離することで防止できます。
  • 暗号:エンコーディングと暗号化を区別し、弱い古典暗号とXOR暗号を解読し、RSAのパラメータの誤りを悪用し、ワードリストでハッシュをクラックします。
  • 観察、仮説、テスト、悪用、記録という1つのループが、どちらにも有効です。

次は、リバースエンジニアリングとバイナリのエクスプロイトに進みます。

よくある質問

「Webと暗号のチャレンジ」レッスンは無料ですか?

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

「Webと暗号のチャレンジ」で何を学びますか?

よくあるWebおよび暗号のパズルを解きます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Webと暗号のチャレンジ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. CTFのカテゴリと考え方
  2. Webと暗号のチャレンジ
  3. リバースエンジニアリングとPwnの基礎
  4. ツールとWriteup
← Cyber Security Academyに戻る