mcpField
S
shodan-reconnaissance

shodan-reconnaissance

github.com/sickn33セキュリティ48.7k159 回インストール今日更新
リポジトリ

shodan-reconnaissance について

Shodanでインターネットに公開されたホストを検索し、許可された対象を調査するセキュリティ偵察スキルです。範囲と許可の確認、未確認時の読み取り専用対応、スキャン制限やデータ鮮度への注意を重視します。

主な機能

  1. 01Shodanによるホスト・サービス検索
  2. 02インフラ統計とデータのダウンロード
  3. 03脆弱性とデバイスの検出
  4. 04SSL/TLS証明書の検索
  5. 05許可とコマンドの確認ゲート
  6. 06レート制限とデータ鮮度への注意

活用シーン

  1. 01許可された組織の公開インフラの棚卸し
  2. 02既知の脆弱性に関連するサービスの発見
  3. 03公開されたIoT・産業用デバイスの発見
  4. 04許可されたホストの証明書属性の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill shodan-reconnaissance

インストール後、Claude Code で/shodan-reconnaissanceを入力して読み込まれたか確認します。

同梱ファイルreferences/detailed-guide.md

詳細

⚠️ 許可された用途のみ このスキルは、教育目的または許可されたセキュリティ評価のみに使用してください。 このツールを使用する前に、システム所有者から明示的な書面による許可を得る必要があります。 このツールの不正使用は違法であり、固く禁じられています。

必須の確認ゲート 対象に対して調査、悪用、変更、永続化、データ抽出、または認証情報へのアクセスを試みるコマンドを実行する前に、以下を行ってください。

  1. ユーザーに、対象の正確なURL、IPアドレス、アカウント、またはリソースを明示するよう求めます。
  2. 書面による許可と、許可された範囲を確認するようユーザーに求めます。
  3. 正確なコマンドを提示し、想定される影響を説明します。
  4. 現在の会話で明示的な確認が得られるまで待ちます。

その確認がない場合は、読み取り専用にとどめ、防御に関するガイダンスのみを提供してください。サンドボックス、使い捨てのVM、または管理されたラボを優先してください。

Shodan の偵察とペネトレーションテスト

詳細ガイド

このスキルを実行する前に、詳細ガイドをお読みください。完全な手順と参考資料が記載されています。安全要件、前提条件、検証要件を必須事項として遵守してください。特定の作業では関連するセクションを読み、最初から最後まで作業する場合はガイド全体をお読みください。

制約と制限事項

運用上の制約
  • 現在のエンドポイント/アカウントのレート制限を確認し、再試行のガイダンスに従ってください
  • スキャン結果はすぐには得られません(非同期)
  • 再スキャンの可否は、現在のアカウントおよびエンドポイントのポリシーによって異なります
  • 無料アカウントでは利用できるクレジットが限られています
  • 一部のデータには有料サブスクリプションが必要です
データの鮮度
  • Shodan は継続的にクロールしていますが、データが数日から数週間古い場合があります
  • オンデマンドスキャンでは最新のデータを取得できますが、クレジットが必要です
  • 有料プランでは過去のデータを利用できます
法的要件
  • 許可された対象のみを偵察してください
  • パッシブ偵察は一般に合法ですが、管轄区域を確認してください
  • アクティブスキャン(スキャンの送信)には許可が必要です
  • すべての偵察活動を記録してください

例

例 1:組織の偵察
# Find all hosts belonging to target organization
shodan search 'org:"Target Company"'

# Get statistics on their infrastructure
shodan stats --facets port,product,country 'org:"Target Company"'

# Download detailed data
shodan download target_data.json.gz 'org:"Target Company"'

# Parse for specific info
shodan parse --fields ip_str,port,product target_data.json.gz
例 2:脆弱なサービスの検出
# Find hosts vulnerable to BlueKeep (RDP CVE)
shodan search 'vuln:CVE-2019-0708 country:US'

# Find Elasticsearch banner candidates; absence of an authentication keyword does not prove no auth
shodan search 'product:elastic port:9200 -authentication'

# Find Log4j vulnerable systems
shodan search 'vuln:CVE-2021-44228'
例 3:IoT デバイスの検出
# Find exposed webcams
shodan search 'webcam has_screenshot:true country:US'

# Find industrial control systems
shodan search 'port:502 product:modbus'

# Find exposed printers
shodan search '"HP-ChaiSOE" port:80'

# Find smart home devices
shodan search 'product:nest'
例 4:SSL/TLS 証明書の分析
# Find hosts with specific SSL cert
shodan search 'ssl.cert.subject.cn:*.example.com'

# Find expired certificates
shodan search 'ssl.cert.expired:true org:"Company"'

# Find self-signed certificates
# Inspect issuer/subject and verify signature; issuer CN text alone cannot establish self-signing.
例 5:Python 自動化スクリプト
#!/usr/bin/env python3
import shodan
import json
import os

API_KEY = os.environ["SHODAN_API_KEY"]
api = shodan.Shodan(API_KEY)

def recon_organization(org_name):
    """Perform reconnaissance on an organization"""
    try:
        # Search for organization
        query = f'org:"{org_name}"'
        results = api.search(query)
        
        print(f"[*] Found {results['total']} matching banners; this response is one page")
        
        # Collect unique IPs and ports
        hosts = {}
        for result in results['matches']:
            ip = result['ip_str']
            port = result['port']
            product = result.get('product', 'unknown')
            
            if ip not in hosts:
                hosts[ip] = []
            hosts[ip].append({'port': port, 'product': product, 'transport': result.get('transport', 'unknown')})
        
        # Output findings
        for ip, services in hosts.items():
            print(f"\n[+] {ip}")
            for svc in services:
                print(f"    - {svc['port']}/{svc['transport']} ({svc['product']})")
        
        return hosts
        
    except shodan.APIError as e:
        print(f"Error: {e}")
        return None

if __name__ == '__main__':
    recon_organization("Target Company")
例 6:ネットワーク範囲の評価
# Scan a /24 network range
shodan search 'net:203.0.113.0/24'

# Get port distribution
shodan stats --facets port 'net:203.0.113.0/24'

# Find specific vulnerabilities in range
shodan search 'net:203.0.113.0/24 vuln:CVE-2021-44228'

# Export all data for range
shodan download network_scan.json.gz 'net:203.0.113.0/24'

使用する場面

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。

コメント