Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sopa — Golangで書かれたADWS用の実用的なクライアント。 | Kitploit
ツール/GitHubGitHub/macmod/sopa
偵察情報収集ペネトレーションテストユーティリティとフレームワーク認証レッドチーミング
GitHubmacmod/sopa

sopa

Golangで書かれたADWS用の実用的なクライアント。

リポジトリを見る
552121ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

sopa

Golangで書かれたADWSの実用的なクライアント

GitHub Release Go Version Code Size License Build Status Go Report Card GitHub Downloads Twitter Follow

Sopaは、ADWSプロトコルスタック(MS-NNS + MC-NMF + SOAP)を実装し、以下のコマンドライン機能を提供します:

  • オブジェクトの検索と取得
    • query:WS-EnumerationのEnumerate + Pullループを使用したLDAPフィルタ検索を実行し、属性の射影、スコープ制御(Base/OneLevel/Subtree)、ページネーションをサポート
    • get:WS-TransferのGetを使用してDNで単一のオブジェクトを取得
  • オブジェクトのライフサイクル
    • create:WS-TransferのResourceFactoryを使用してオブジェクトを作成(組み込み型:user、computer、group、OU、container;またはYAMLテンプレートを使用したIMDAのAddRequestによるカスタムオブジェクト)
    • delete:WS-TransferのDeleteを使用してDNでオブジェクトを削除
  • 属性編集
    • attr:WS-TransferのPutを使用して既存のオブジェクトの個別の属性値を追加、置換、削除
  • アカウント管理
    • set-password:MS-ADCAPのSetPasswordを使用してアカウントパスワードを設定
    • change-password:MS-ADCAPのChangePasswordを使用してアカウントパスワードを変更(古いパスワードが必要)
  • ADCAPカスタムアクション
    • translate-name:TranslateNameを使用してDNと正規名の形式を変換
    • groups:GetADPrincipalGroupMembership / GetADPrincipalAuthorizationGroupを使用してプリンシパルのグループメンバーシップまたは認証グループを一覧表示
    • members:GetADGroupMemberを使用してグループメンバーを列挙(オプションで再帰的)
    • optfeature:ChangeOptionalFeatureを使用してオプションのAD機能(例:ごみ箱)を切り替え
    • info:GetVersion、GetADDomain、GetADForest、GetADDomainControllersを使用してトポロジメタデータ(バージョン、ドメイン、フォレスト、DCリスト)を取得
  • サービスメタデータ
    • mex:認証なしのWS-MetadataExchangeリクエストを使用してADWSサービスエンドポイントのメタデータを取得

インストール

$ go install github.com/Macmod/sopa/cmd/sopa@latest

使用法

# Auth flags (-u, -p, -d, -k, -H, -c, ...) are omitted for brevity - see Authentication section.

# Search objects by LDAP filter
$ sopa [auth_flags] query --dc <DC> --filter '(objectClass=*)'

# Fetch a single object by DN
$ sopa [auth_flags] get --dc <DC> --dn '<DN>'

# Delete an object by DN
$ sopa [auth_flags] delete --dc <DC> --dn '<DN>'

# Edit attribute values
$ sopa [auth_flags] attr add     --dc <DC> --dn '<DN>' --attr <ATTR> --value <VALUE>
$ sopa [auth_flags] attr replace --dc <DC> --dn '<DN>' --attr <ATTR> --value <VALUE>
$ sopa [auth_flags] attr delete  --dc <DC> --dn '<DN>' --attr <ATTR>

# Create objects
$ sopa [auth_flags] create user      --dc <DC> --name <CN> --pass <INITIAL_PASS>
$ sopa [auth_flags] create computer  --dc <DC> --name <CN>
$ sopa [auth_flags] create group     --dc <DC> --name <CN> --type GlobalSecurity
$ sopa [auth_flags] create ou        --dc <DC> --name <CN>
$ sopa [auth_flags] create container --dc <DC> --name <CN>
$ sopa [auth_flags] create custom    --dc <DC> --template <TEMPLATE.yaml>

# Set / change account passwords (MS-ADCAP)
$ sopa [auth_flags] set-password    --dc <DC> --dn '<DN>' --new <NEW_PASS>
$ sopa [auth_flags] change-password --dc <DC> --dn '<DN>' --old <OLD_PASS> --new <NEW_PASS>

# Translate DN <-> canonical name (MS-ADCAP)
# (this call is mostly useless but kept for completeness 😄)
$ sopa [auth_flags] translate-name --dc <DC> --offered DistinguishedName --desired CanonicalName '<DN>'

# Principal group memberships (MS-ADCAP)
$ sopa [auth_flags] groups --dc <DC> --dn '<DN>' --membership --authz

# Group members (MS-ADCAP)
$ sopa [auth_flags] members --dc <DC> --dn '<GROUP_DN>' --recursive

# Toggle optional AD feature, e.g. Recycle Bin (MS-ADCAP)
$ sopa [auth_flags] optfeature --dc <DC> --feature-id <FEATURE_GUID> --enable

# Topology info (MS-ADCAP)
$ sopa [auth_flags] info version --dc <DC>
$ sopa [auth_flags] info domain  --dc <DC>
$ sopa [auth_flags] info forest  --dc <DC>
$ sopa [auth_flags] info dcs     --dc <DC>

# ADWS service endpoint metadata (unauthenticated - auth flags not needed)
$ sopa mex --dc <DC>

インタラクティブシェル

サブコマンドなしでsopaを実行すると、インタラクティブシェルが起動します。単一の接続をすべてのコマンドで再利用し、タブ補完を提供します。

$ sopa --dc <DC> -u <USER> -p <PASS> -d <DOMAIN>

sopa v1.1.0
Connected  dc.corp.local  domain=corp.local  user=Administrator
Type 'help' for commands or 'exit' to quit.

[corp.local]> query --filter '(objectClass=user)' --attrs sAMAccountName
[corp.local]> get --dn 'CN=Administrator,CN=Users,DC=corp,DC=local'
[corp.local]> exit

シェルを終了するには、exit、quit、またはCtrl-Dを使用します。

カスタムオブジェクトの作成

テンプレート例:examples/custom-create.example.yaml

テンプレートスキーマ (YAML):

  • parentDN (文字列、必須):コンテナDN
  • rdn (文字列、必須):新しいオブジェクトの相対DN(例:CN=Foo)
  • attributes (リスト、必須):各項目は以下を持つ:
    • name (文字列、必須):属性名(cn または addata:cn)
    • type (文字列、オプション):string|int|bool|base64|hex(または明示的な xsd:*)、デフォルトは string
    • value (文字列) または values (文字列のリスト) のいずれか

注意事項:

  • ad:relativeDistinguishedName や ad:container-hierarchy-parent をテンプレートに含めないでください(自動的に注入されます)。
  • hex 値は xsd:base64Binary に変換されます。
  • 明示的に空文字列を設定するには、value: "" を使用します。

DCの発見とDNS

--dc は FQDN、IPアドレス、または 省略 を受け付けます。 DCのホスト名はネットワークのデフォルトDNSから利用できない場合があるため、常に --dns <DC-IP> を渡して、sopaがすべてのルックアップにDC自身のDNSサーバを使用することを強く推奨します:

# Option 1: let sopa resolve everything through the DC's DNS
$ sopa query --dns 192.168.1.10 -d corp.local -u user -p pass --filter '(objectClass=user)'

--dc が省略され --domain が指定された場合、sopaはSRVレコードをクエリして自動的にDCを発見します:

_ldap._tcp.<domain>        (tried first)
_kerberos._tcp.<domain>    (fallback)

最も優先度の高いレコードのターゲットが使用されます。これには、--dns で指定されたDNSサーバがそれらのSRVクエリに応答できる必要があります - DC自身の統合DNSサーバ(存在する場合)はそれが可能なはずです。

# Option 2: provide DC explicitly without Kerberos
$ sopa info version --dc 192.168.1.10 --domain corp.local -u user -p pass

--dc にIPが指定された場合、そのIPは常に 逆PTRルックアップ を介してFQDNに解決されます - ADWSエンドポイントのWCFアドレスフィルタは、認証方法に関係なく wsa:To ヘッダにFQDNを必要とします。 このPTRルックアップも --dns を経由するため、DC上に正しく設定された逆引きゾーンが必要です:

# Option 3: IP input - PTR lookup resolves 192.168.1.10 -> dc.corp.local
$ sopa info version --dc 192.168.1.10 --dns 192.168.1.10 --domain corp.local -u user -p pass

スタック内のすべてのDNS操作(DC発見、PTR解決、ADWS TCPダイヤル、Kerberos KDC接続)は、--dns / --dns-tcp から構築された同じリゾルバを使用します。

フラグ説明
--dns <host[:port]>すべてのルックアップ(SRV、PTR、前方)のカスタムDNSサーバ。デフォルトはポート53。
--dns-tcpUDPの代わりにTCP経由でDNSクエリを強制。UDPがブロックされている場合やSRV応答が大きい場合に便利。
-x / --socks5 <host:port>すべてのTCP接続をSOCKS5プロキシ経由でルーティング。--no-proxy-dns が設定されていない限り、DNSクエリもプロキシ経由でトンネリングされます。
--no-proxy-dns--socks5 がアクティブな場合、プロキシではなくローカルシステムリゾルバを使用してDNSを解決します。
--dns-timeout <duration>DNS操作のタイムアウト(デフォルト10秒)。
--tcp-timeout <duration>TCPダイヤルおよびADWSプロトコル操作のタイムアウト(デフォルト30秒)。

認証

sopa は以下の認証情報モードをサポートしています:

# Password
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -p <PASS> <subcommand> [...]

# NT hash
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -H <NT_HASH> <subcommand> [...]

# AES session key (Kerberos is implied)
# 32 hex chars = AES-128, 64 hex chars = AES-256
$ sopa --dc <DC> -d <DOMAIN> -u <USER> --aes-key <HEX_KEY> <subcommand> [...]

# Kerberos ccache (Kerberos is implied)
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -c <CCACHE_PATH> <subcommand> [...]
ツールをダウンロード