Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
sopa — عميل عملي لـ ADWS في Golang. | Kitploit
أدوات/GitHubGitHub/macmod/sopa
الاستطلاعجمع المعلوماتاختبار الاختراقالأدوات والمكوناتالمصادقةالفريق الأحمر
GitHubmacmod/sopa

sopa

عميل عملي لـ ADWS في Golang.

عرض المستودع
552منذ 15 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

sopa

عميل عملي لـ ADWS بلغة Golang.

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

تقوم أداة sopa بتنفيذ مكدس بروتوكول ADWS (MS-NNS + MC-NMF + SOAP)، وتوفر الميزات التالية عبر سطر الأوامر:

  • البحث عن الكائنات واسترجاعها
    • query: ينفذ عمليات بحث بمرشحات LDAP عبر حلقة Enumerate + Pull من WS-Enumeration مع إسقاط السمات، والتحكم في النطاق (Base/OneLevel/Subtree)، والترقيم
    • get: يجلب كائنًا واحدًا بواسطة DN عبر WS-Transfer Get
  • دورة حياة الكائنات
    • create: ينشئ كائنات عبر ResourceFactory من WS-Transfer (أنواع مدمجة: مستخدم، حاسب، مجموعة، وحدة تنظيمية، حاوية؛ أو كائنات مخصصة من قالب YAML عبر AddRequest من IMDA)
    • delete: يحذف كائنًا بواسطة DN عبر WS-Transfer Delete
  • تحرير السمات
    • attr: يضيف أو يستبدل أو يزيل قيم سمات فردية على كائن موجود عبر WS-Transfer Put

التثبيت

root@kitploit:~
$ go install github.com/Macmod/sopa/cmd/sopa@latest

الاستخدام

root@kitploit:~
# تم حذف خيارات المصادقة (-u, -p, -d, -k, -H, -c, ...) للاختصار - انظر قسم المصادقة.

# البحث عن كائنات بواسطة مرشح LDAP
$ sopa [auth_flags] query --dc <DC> --filter '(objectClass=*)'

# جلب كائن واحد بواسطة DN
$ sopa [auth_flags] get --dc <DC> --dn '<DN>'

# حذف كائن بواسطة DN
$ sopa [auth_flags] delete --dc <DC> --dn '<DN>'

# تحرير قيم السمات
$ 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>

# إنشاء كائنات
$ 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>

# تعيين / تغيير كلمات مرور الحسابات (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>

# تحويل بين DN والاسم المتعارف عليه (MS-ADCAP)
# (هذه الدعوة غير مفيدة في الغالب ولكنها محفوظة للاكتمال 😄)
$ sopa [auth_flags] translate-name --dc <DC> --offered DistinguishedName --desired CanonicalName '<DN>'

# عضويات مجموعة لكيان رئيسي (MS-ADCAP)
$ sopa [auth_flags] groups --dc <DC> --dn '<DN>' --membership --authz

# أعضاء المجموعة (MS-ADCAP)
$ sopa [auth_flags] members --dc <DC> --dn '<GROUP_DN>' --recursive

# تشغيل/إيقاف ميزة AD اختيارية، مثل سلة المحذوفات (MS-ADCAP)
$ sopa [auth_flags] optfeature --dc <DC> --feature-id <FEATURE_GUID> --enable

# معلومات الطوبولوجيا (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 (غير مصادق عليه - لا حاجة لخيارات المصادقة)
$ sopa mex --dc <DC>

الصدفة التفاعلية

قم بتشغيل sopa بدون أمر فرعي لفتح صدفة تفاعلية. تعيد استخدام اتصال واحد لجميع الأوامر وتوفر إكمال التبويب.

root@kitploit:~
$ 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 (سلسلة، مطلوب): الاسم النسبي (RDN) للكائن الجديد (مثل 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 خادم DNS الخاص بـ DC لجميع عمليات البحث:

root@kitploit:~
# الخيار 1: دع sopa يحل كل شيء عبر DNS الخاص بـ DC
$ sopa query --dns 192.168.1.10 -d corp.local -u user -p pass --filter '(objectClass=user)'

عندما يتم حذف --dc وتوفير --domain، تكتشف sopa DC تلقائيًا عن طريق الاستعلام عن سجلات SRV:

root@kitploit:~
_ldap._tcp.<domain>        (يحاول أولاً)
_kerberos._tcp.<domain>    (بديل)

يتم استخدام الهدف من السجل ذي الأولوية الأعلى. يتطلب ذلك أن يتمكن خادم DNS المشار إليه بواسطة --dns من الإجابة على استعلامات SRV تلك - يجب أن يكون خادم DNS المتكامل الخاص بـ DC (عند وجوده) قادرًا على ذلك.

root@kitploit:~
# الخيار 2: توفير DC صريح بدون Kerberos
$ sopa info version --dc 192.168.1.10 --domain corp.local -u user -p pass

عندما يتم توفير IP لـ --dc، يتم دائمًا حل IP إلى اسم FQDN عبر بحث PTR عكسي - يتطلب مرشح عنوان WCF لنقطة نهاية ADWS اسم FQDN في رأس wsa:To بغض النظر عن طريقة المصادقة. يتم هذا البحث PTR أيضًا عبر --dns، لذلك يلزم وجود منطقة عكسية مهيأة بشكل صحيح على DC:

root@kitploit:~
# الخيار 3: إدخال IP - بحث PTR يحل 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، اتصال TCP لـ ADWS، واتصالات KDC الخاصة بـ Kerberos - تستخدم نفس المحلل المبني من --dns / --dns-tcp.

المصادقة

تدعم sopa أوضاع بيانات الاعتماد التالية:

root@kitploit:~
# كلمة المرور
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -p <PASS> <subcommand> [...]

# تجزئة NT
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -H <NT_HASH> <subcommand> [...]

# مفتاح جلسة AES (يُفترض Kerberos)
# 32 حرفًا سداسي عشري = AES-128، 64 حرفًا سداسي عشري = AES-256
$ sopa --dc <DC> -d <DOMAIN> -u <USER> --aes-key <HEX_KEY> <subcommand> [...]

# ccache Kerberos (يُفترض Kerberos)
$ sopa --dc <DC> -d <DOMAIN> -u <USER> -c <CCACHE_PATH> <subcommand> [...]

# شهادة PFX (يُفترض Kerberos / عبر PKINIT)
$ sopa --dc <DC> -d <DOMAIN> -u <USER> --pfx <CERT.pfx> --pfx-password <PFX_PASS> <subcommand> [...]

# شهادة PEM (يُفترض Kerberos / عبر PKINIT)
$ sopa --dc <DC> -d <DOMAIN> -u <USER> --cert <CERT.pem> --key <KEY.pem> <subcommand> [...]

SOCKS5

يمكن توجيه جميع اتصالات TCP (ADWS, Kerberos, DNS) عبر وكيل SOCKS5 باستخدام -x / --socks5:

root@kitploit:~
# توجيه كل شيء عبر وكيل SOCKS5
$ sopa -x 127.0.0.1:1080 --dc dc.corp.local -d corp.local -u user -p pass query --filter '(objectClass=user)'

# استخدام DNS الخاص بـ DC من خلال الوكيل، ثم الاتصال عبر الوكيل
$ sopa -x 127.0.0.1:1080 --dns 192.168.1.10 --dc 192.168.1.10 -d corp.local -u user -p pass query --filter '(objectClass=user)'

# الاحتفاظ بـ DNS محليًا (مثلاً DNS يمكن الوصول إليه بدون وكيل)، فقط توجيه اتصالات TCP
$ sopa -x 127.0.0.1:1080 --no-proxy-dns --dc dc.corp.local -d corp.local -u user -p pass query --filter '(objectClass=user)'

المساهمة

المساهمات مرحب بها عن طريق فتح مشكلة أو تقديم طلب سحب.

أدوات ADWS أخرى

جاءت فكرة كتابة هذه الأداة من موجة من الأدوات المركزة على ADWS، بشكل أساسي لأغراض التهرب. من الناحية النظرية، كل ما يمكن فعله باستخدام هذه الأدوات يمكن فعله أيضًا باستخدام sopa، ولكن إذا كنت ترغب في تنفيذ إجراءات أكثر تعقيدًا/تحديدًا، تحقق منها أيضًا:

  • wh0amitz/SharpADWS
  • logangoins/SOAPy
  • FalconForceTeam/SOAPHound
  • mverschu/adwsdomaindump

الشكر

  • شكر كبير لـ oiweiwei على go-msrpc، حيث أن حزمة ssp الخاصة به نفذت تدفق المصادقة مع GSSAPI بسلاسة.

المراجع

  • MS-NNS: بروتوكول .NET NegotiateStream
  • MS-NMF: بروتوكول تأطير الرسائل .NET
  • MS-ADDM: خدمات الويب Active Directory: نموذج البيانات والعناصر المشتركة
  • MS-WSDS: إضافات بروتوكول خدمات الدليل لـ WS-Enumeration
  • MS-WSTIM: عمليات إدارة الهوية لامتدادات الوصول إلى الدليل لـ WS-Transfer
  • MS-ADCAP: بروتوكول الإجراءات المخصصة لخدمات الويب Active Directory
  • MS-ADTS: المواصفات الفنية لـ Active Directory

الترخيص

ترخيص MIT (MIT)

حقوق الطبع والنشر (c) 2023 Artur Henrique Marzano Gonzaga

يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات التوثيق المرتبطة به (الـ "برنامج")، للتعامل مع البرنامج دون قيود، بما في ذلك دون حصر حقوق استخدام ونسخ وتعديل ودمج ونشر وتوزيع و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتلقون البرنامج بالقيام بذلك، وذلك مع مراعاة الشروط التالية:

يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإذن الإشعار هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.

البرنامج مُقدم "كما هو"، دون ضمان من أي نوع، صريح أو ضمني، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال، لا يكون المؤلفون أو أصحاب حقوق الطبع والنشر مسؤولين عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في دعوى تعاقدية أو تقصيرية أو غير ذلك، تنشأ عن أو فيما يتعلق بالبرنامج أو استخدامه أو تعاملات أخرى مع البرنامج.

تنزيل الأداة
  • إدارة الحسابات
    • set-password: تعيين كلمة مرور حساب عبر MS-ADCAP SetPassword
    • change-password: تغيير كلمة مرور حساب (يتطلب كلمة المرور القديمة) عبر MS-ADCAP ChangePassword
  • إجراءات مخصصة لـ ADCAP
    • translate-name: تحويل بين تنسيق DN والاسم المتعارف عليه عبر TranslateName
    • groups: عرض عضويات المجموعة أو مجموعات التفويض لكيان رئيسي عبر GetADPrincipalGroupMembership / GetADPrincipalAuthorizationGroup
    • members: تعداد أعضاء المجموعة (متكرر اختياريًا) عبر GetADGroupMember
    • optfeature: تشغيل/إيقاف ميزات AD الاختيارية (مثل سلة المحذوفات) عبر ChangeOptionalFeature
    • info: استرجاع بيانات تعريف الطوبولوجيا (الإصدار، المجال، الغابة، قائمة وحدات التحكم بالمجال) عبر GetVersion, GetADDomain, GetADForest, GetADDomainControllers
  • بيانات تعريف الخدمة
    • mex: جلب بيانات نقطة نهاية خدمة ADWS عبر طلب WS-MetadataExchange غير مصادق عليه
  • العلمالوصف
    --dns <host[:port]>خادم DNS مخصص لجميع عمليات البحث (SRV, PTR, forward). المنفذ الافتراضي 53.
    --dns-tcpفرض استعلامات DNS عبر TCP بدلاً من UDP. مفيد عندما يكون UDP محظورًا أو تكون استجابات SRV كبيرة.
    -x / --socks5 <host:port>توجيه جميع اتصالات TCP عبر وكيل SOCKS5. يتم أيضًا توجيه استعلامات DNS عبر الوكيل ما لم يتم تعيين --no-proxy-dns.
    --no-proxy-dnsعندما يكون --socks5 نشطًا، قم بحل DNS عبر محلل النظام المحلي بدلاً من الوكيل.
    --dns-timeout <duration>مهلة عمليات DNS (الافتراضي 10 ثوانٍ).
    --tcp-timeout <duration>مهلة اتصال TCP وعمليات بروتوكول ADWS (الافتراضي 30 ثانية).