Tryhackme-Vulnversity WriteUp

ogulcankacar

Yeni üye
29 Ağu 2022
42
42


Makine Çözümleri

myLogo.png



Oğulcan KAÇAR



Makine: Tryhackme/Vulnversity


Giriş

Merhaba, bu yazımızda tryhackme'nin "for free" > "easy" odalarından olan "Vulnversity" odasını çözeceğiz. Oda genel olarak keşif, ters bağlantı ve de yetki yükseltme bölümlerinden oluşmakta olup ve bize toplam 5 adet görev sunmaktadır. Şimdi ilk olarak vpn ile tryhackme ağına bağlanıp, makineyi de çalıştırdıktan sonra görevlerimize geçelim.

TASK 1: Deploy the machine (Makineyi başlat)

İlk görevimizde sadece makineyi başlatmamız gerekmekte.

TASK 2: Reconnaissance (Keşif)

Bu kısımda aslında bizden "nmap" ve birkaç temel parametresi gösterilerek bizden makinenin taranması istenmektedir. Burada bize sorulan sorular da haliyle tarama sonucu elde edeceğimiz bilgiler ile cevaplanacaktır.
  • Scan the box, how many ports are open?
  • nmap -sV -sS -O -n -Pn <ip_address>
  • şeklinde nmap komutu ile makinemizi tarayalım. Verdiğimiz parametreler ise;
    • -sV: versiyon
    • -sS: TCP/SYN paketi göndererek tarama
    • -O: işletim sistemi
    • -n: dns çözümlemesi yapma; yani domainler ile ip adreslerini eşlemeye çalışma.
    • -Pn: ping atmadan, yani hepsini açık olarak kabullenerek tarama yap.
    • 1.png
Nitekim tarama işlemi bittikten sonra, ilk soruda bizden hedef makinede kaç adet portun açık olduğunu sormaktadır. Bunun cevabı ise nmap sonuçlarından da göreceğiniz gibi; 6 olacaktır.

Not: aslında tryhackme bizde input'unda tek karakterli olduğunu belirttiği için 1 ile 9 arasında sırayla 1234..şeklinde ilerlesek de bulabiliriz.

What version of the squid proxy is running on the machine?
Ardından bize burada "squid proxy"nin sürüm bilgisini sormaktadır. Squid proxy ise; basit olarak web nesnelerinin önbelleğe alınmasını sağlamaktadır diyebiliriz. Bunun cevabını da nmap çıktılarımızdan öğreniyoruz; 3.5.12

How many ports will nmap scan if the flag -p-400 was used?

bu kısımda ise bize aslında cevabı sorunun içinde vermektedir. Burada sorunun demek istediği nmap'a toplam 400 port tarama emri verilirse kaç port tarar, mantıken toplam 400 port tarayacaktır; 400

Using the nmap flag -n what will it not resolve?

bu kısımda aslında bunu ilk başta da söylemiştim; nmap'e -n parametresini verdiğimizde dns çözümlemesi yapmayacaktır. Bunun öğrenmek için ise; nmap -h | grep "n/" komutunu kullanabiliriz.

2.png


What is the most likely operating system this machine is running?
bu kısımda da bizden sistemin çalıştırdığı işletim sistemini sormaktadır. Bunu da aynı şekilde nmap sonuçlarımızdan öğreniyoruz; Ubuntu.

What port is the web server running on?


burada ise aslında normalde web server 80.portta çalışır fakat, bu makinemizde web server 80. port yerine 3333.portta çalışmaktadır. Elbette bunu da nmap sonuçlarımızdan öğreniyoruz; 3333

ve bu şekilde Task2'nin görevlerini bitirmiş oluyoruz.

TASK 3: Locating directories using GoBuster

Bu bölümde sadece bizden makinemiz üzerinde goBuster dizin bulma aracı ile haliyle gizli dizinleri bulmamızı istemektedir.
  • What is the directory that has an upload form page?
  • bizden sitemizde gizli bir upload sayfasını bulmamızı ve o sayfanın adının ne olduğunu sormaktadır. Dolayısıyla biz de; gobuster dir -u http://10.10.133.20:3333 -w /usr/share/dirb/wordlists/common.txt komutu ile makinemizde gizli dizinleri bulmaya çalışalım. Sonuçta bize birkaç tane gizli klasör getirecektir, bizim burada açık olan sayfamız "internal" olacaktır. Çünkü içinde gerçekten de sunucuya dosya yükleyeceğimiz bir form vardır
  • 3.png
  • 4.png

  • dolayısıyla bu şekilde Task3'ü de tamamlamış oluyoruz.
TASK 4: Compromise the webserver
Şimdi bu zamana kadar makinede keşif yaptık, buna bağlı bazı soruları cevapladık ve sonunda kullanacağımız bir açık bulabildik. Şimdi geldik bu açıktan faydalanmaya.
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Şimdi biz burada dosya yükleme formunu bypass etmeye çalışacağız. İlk olarak sunucuya sızabilmemiz için, bir adet reverse_shell'e ihtiyacımız olacak. Bunu ister google'dan kolayca bulabilir veya kendiniz "weevely" aracını kullanarak oluşturabilirsiniz. Ben şimdilik weevely kullanıyorum; “weevely generate 14536 kodu ile 14536 şifresi ile kendime bir adet php kodu oluşturuyorum. Ardından oluşturduğum bu php dosyasını upload formuna gelip ekliyorum, fakat "Extension not allowed" şeklinde bize aslında .php uzantılı dosyaları yüklemediğini söylemektedir.
  • 5.png
  • Dolayısıyla bizim bu sunucun hangi tür uzantıları kabul ettiğini öğrenmemiz gerek; bunu yapmak için de ister tek tek uzantıları kendimiz değiştir-gönder şeklinde deneyebiliriz ya da burpsuite aracından faydalanabiliriz. Ben normalde değiştir-gönder yapardım ama burada burp'u da göstermekte fayda var; Burp Suite aracını açtıktan sonra ve de firefox'tan proxy'i burp ile aynı yaptıktan sonra (foxyproxy) tekrar burp açık şekilde .php uzantılı dosyamızı gönderelim. Gönderdikten sonra burp'un bu isteğimizi yakaladığını göreceksiniz. Burada "Content-Disposition:" kısmında filename="shell.php" şeklinde uzantımızın gittiğini görmekteyiz. Biz bu isteğe sağ tıklayarak "Send to Intruder" yapıyoruz.
  • 6.png
  • Intruder kısmında sadece isteğin "filename" parametresini seçiyoruz.
  • 7.png
  • Ardından "Payloads" sekmesine geçerek, seçtiğimiz parametreye gönderilecek dosya uzantılarını yazıyoruz; yani php, php1, php5, phtml şeklinde uzantıları girdi olarak verelim ve "Start attack" diyerek saldırımızı başlatalım.
  • 8.png
  • Bu basit tarama sonucu sunucuda phtml dosya uzantısının yüklenebilir olduğunu göreceğiz. Dolayısıyla bizde shell.php dosyamızı shell.phtml olarak değiştiriyoruz. Bunun için; mv shell.php shell.phtm
Nitekim bundan sonra gelelim shell.phtml dosyamızı, internal sayfasından sunucuya yüklemeye. Dosya yükleme kısmında oluşturduğumuz .phtml dosyasını yüklediğimiz zaman gerçekten de dosyamızın yüklendiğini "Succes" ifadesiyle anlıyoruz. Peki şimdi geldi, içeri soktuğumuz bu dosyamıza ulaşıp ondan kendimize bir bağlantı almaya. Şimdi <ip>:3333/internal/uploads sekmesine gidelim, ve burada yüklediğimiz zararlı dosyamızı görelim. Weevely ile oluşturduğumuz için url'yi aldıktan sonra sunucuya erişebileceğiz. Yani yüklediğimiz dosyanın içine girelim ve url’yi komple alalım. url’yi aldıktan sonra terminal'e gelelim ve; weevely <url> <password> kodu ile sunucunun içine girelim.​
10.png
Not: weevely ile shell alacağınız zaman şu şekilde;​
import os
url = input("Shell url: ")
os.system(f"weevely {url} 1453")
küçük kod parçası ile bunu otomatikleştirebilirsiniz.​
Nitekim, şimdi buradan da doğruca cd /home klasörüne gidelim,​
11.png

ve ilk kullanıcımız olan "bill"in içine girelim ve böylece ilk flag'i alalım; 8bd7992fbe8a6ad22a63361004cfcedb.
12.png

aldıktan sonra da sorulara cevaplar verelim;
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Bu soruda yükleme yasağı olan dosya uzantısını sormakta, biz bunun .php olduğunu görmüştük; .php
  • Run this attack, what extension is allowed?
  • Burada da yüklemeye izin verilen dosya uzantısını sormakta, bunuda biz burp ile görmüştük; .phtml
  • What is the name of the user who manages the webserver?
  • Burada bulduğumuz ilk kullanıcımızı giriyoruz; bill
  • What is the user flag?
  • burada da bulduğumuz user.txt flag'ini giriyoruz.
  • ve böylece Task4'ü de tamamlamış oluyoruz.
TASK 5: Privilege Escalation

Bu bölümde amacımız reverse_shell ile giriş yaptığımız "www-data" yetkisiz kullanıcısından yetkili bir kullanıcıya yani doğrudan "root"a bağlanmaya çalışmak olacaktır.

Şimdi ilk olarak sudo yetkisini kullanacağımız nesneler arayalım. Bunuda yapmak için; "find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;" komutunu kullanalım. Bu kod parçası tam olarak da istediğimizi karşılayacak sonuçları bize getirecektir. Nitekim yapılan tarama sonucunda çoğu şeye izin verilmediğini, fakat pek az şeylere izin verildiğini görmüş olacağız. Biz izin verilenler arasından init servisini kontrol etmeye yarayan "/bin/systemctl"i kullanacağız.
13.png


Biz aslında burada systemctl'e bir suid bitiği tanımlayacağız ve bu şekilde yetki yükseltemeye çalışacağız. Şimdi bunun için ilk olarak bitiğimizi yazalım;

[Unit]
Description=root

[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'cat /root/root.txt > /tmp/root.txt'

[Install]

WantedBy=multi-user.target

şeklinde bitiğimizi yazıp, “root.service” şeklinde kaydedelim. Ardından şimdi yazdığımız bu bitiği hedef makinemize aktaralım. Bunu netcat ile de aktarabilirsiniz veya "python2 -m SimpleHTTPServer 80" şeklinde python ile bulunduğunuz klasörü host'a dönüştürerek de sunucu tarafından wget ile alabilirsiniz. Ben bu şekilde yapıyorum. Bir şekilde betiğimizi yükledikten sonra gelelim bu betiği kullanmaya. Bu arada bitiği yüklerken /tmp klasörüne yüklemeyi unutmayın ki şayet biliyorsunuz /tmp klasörü her kullanıcının yazmaya izni olan bir yerdir.
14.png


Nitekim ardından sırasıyla "systemctl enable /tmp/root.service" komutunu ve "systemctl start root" komutunu yazalım. Bundan sonra /tmp klasörüne oluşan root.txt'i okuyarak root flag'ini de almış olalım. Bu arada root.txt'inin oluşmasını biz yazdığımız bitik'de belirtmiştik, şayet burada root.txt'nin içeriğini tmp klasörüne yazdırmak yerine root olarak bir shell de alabilirdik.
15.png


Soruları cevaplayacak olursak da;
  • On the system, search for all SUID files. What file stands out?
  • Burada kullandığımız suid nesnesini belirtiyoruz, yani; /bin/systemctl
  • Become root and get the last flag (/root/root.txt)
  • ve en son olarak da root flag'i belirtiyoruz; a58ff8579f0a9270368d33a9966c7fd5

Ve neticede tryackme tarafından oluşturulan Vulnversity odasını da bu şekilde tamamlamış oluyoruz. Buraya kadar okuduğunuz için teşekkürler, bir sonraki makine çözümlerinde görüşmek üzere...<3




yazının pdf hali -> github

İletişim
 

THE zoRRo

Uzman üye
26 Tem 2022
1,674
1
1,609
19
Türk Deniz Kuvvetleri


Makine Çözümleri

myLogo.png



Oğulcan KAÇAR



Makine: Tryhackme/Vulnversity


Giriş

Merhaba, bu yazımızda tryhackme'nin "for free" > "easy" odalarından olan "Vulnversity" odasını çözeceğiz. Oda genel olarak keşif, ters bağlantı ve de yetki yükseltme bölümlerinden oluşmakta olup ve bize toplam 5 adet görev sunmaktadır. Şimdi ilk olarak vpn ile tryhackme ağına bağlanıp, makineyi de çalıştırdıktan sonra görevlerimize geçelim.

TASK 1: Deploy the machine (Makineyi başlat)

İlk görevimizde sadece makineyi başlatmamız gerekmekte.

TASK 2: Reconnaissance (Keşif)

Bu kısımda aslında bizden "nmap" ve birkaç temel parametresi gösterilerek bizden makinenin taranması istenmektedir. Burada bize sorulan sorular da haliyle tarama sonucu elde edeceğimiz bilgiler ile cevaplanacaktır.
  • Scan the box, how many ports are open?
  • nmap -sV -sS -O -n -Pn <ip_address>
  • şeklinde nmap komutu ile makinemizi tarayalım. Verdiğimiz parametreler ise;
    • -sV: versiyon
    • -sS: TCP/SYN paketi göndererek tarama
    • -O: işletim sistemi
    • -n: dns çözümlemesi yapma; yani domainler ile ip adreslerini eşlemeye çalışma.
    • -Pn: ping atmadan, yani hepsini açık olarak kabullenerek tarama yap.
    • 1.png
Nitekim tarama işlemi bittikten sonra, ilk soruda bizden hedef makinede kaç adet portun açık olduğunu sormaktadır. Bunun cevabı ise nmap sonuçlarından da göreceğiniz gibi; 6 olacaktır.

Not: aslında tryhackme bizde input'unda tek karakterli olduğunu belirttiği için 1 ile 9 arasında sırayla 1234..şeklinde ilerlesek de bulabiliriz.

What version of the squid proxy is running on the machine?
Ardından bize burada "squid proxy"nin sürüm bilgisini sormaktadır. Squid proxy ise; basit olarak web nesnelerinin önbelleğe alınmasını sağlamaktadır diyebiliriz. Bunun cevabını da nmap çıktılarımızdan öğreniyoruz; 3.5.12

How many ports will nmap scan if the flag -p-400 was used?

bu kısımda ise bize aslında cevabı sorunun içinde vermektedir. Burada sorunun demek istediği nmap'a toplam 400 port tarama emri verilirse kaç port tarar, mantıken toplam 400 port tarayacaktır; 400

Using the nmap flag -n what will it not resolve?

bu kısımda aslında bunu ilk başta da söylemiştim; nmap'e -n parametresini verdiğimizde dns çözümlemesi yapmayacaktır. Bunun öğrenmek için ise; nmap -h | grep "n/" komutunu kullanabiliriz.

2.png


What is the most likely operating system this machine is running?
bu kısımda da bizden sistemin çalıştırdığı işletim sistemini sormaktadır. Bunu da aynı şekilde nmap sonuçlarımızdan öğreniyoruz; Ubuntu.

What port is the web server running on?


burada ise aslında normalde web server 80.portta çalışır fakat, bu makinemizde web server 80. port yerine 3333.portta çalışmaktadır. Elbette bunu da nmap sonuçlarımızdan öğreniyoruz; 3333

ve bu şekilde Task2'nin görevlerini bitirmiş oluyoruz.

TASK 3: Locating directories using GoBuster

Bu bölümde sadece bizden makinemiz üzerinde goBuster dizin bulma aracı ile haliyle gizli dizinleri bulmamızı istemektedir.
  • What is the directory that has an upload form page?
  • bizden sitemizde gizli bir upload sayfasını bulmamızı ve o sayfanın adının ne olduğunu sormaktadır. Dolayısıyla biz de; gobuster dir -u http://10.10.133.20:3333 -w /usr/share/dirb/wordlists/common.txt komutu ile makinemizde gizli dizinleri bulmaya çalışalım. Sonuçta bize birkaç tane gizli klasör getirecektir, bizim burada açık olan sayfamız "internal" olacaktır. Çünkü içinde gerçekten de sunucuya dosya yükleyeceğimiz bir form vardır
  • 3.png
  • 4.png

  • dolayısıyla bu şekilde Task3'ü de tamamlamış oluyoruz.
TASK 4: Compromise the webserver
Şimdi bu zamana kadar makinede keşif yaptık, buna bağlı bazı soruları cevapladık ve sonunda kullanacağımız bir açık bulabildik. Şimdi geldik bu açıktan faydalanmaya.
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Şimdi biz burada dosya yükleme formunu bypass etmeye çalışacağız. İlk olarak sunucuya sızabilmemiz için, bir adet reverse_shell'e ihtiyacımız olacak. Bunu ister google'dan kolayca bulabilir veya kendiniz "weevely" aracını kullanarak oluşturabilirsiniz. Ben şimdilik weevely kullanıyorum; “weevely generate 14536 kodu ile 14536 şifresi ile kendime bir adet php kodu oluşturuyorum. Ardından oluşturduğum bu php dosyasını upload formuna gelip ekliyorum, fakat "Extension not allowed" şeklinde bize aslında .php uzantılı dosyaları yüklemediğini söylemektedir.
  • 5.png
  • Dolayısıyla bizim bu sunucun hangi tür uzantıları kabul ettiğini öğrenmemiz gerek; bunu yapmak için de ister tek tek uzantıları kendimiz değiştir-gönder şeklinde deneyebiliriz ya da burpsuite aracından faydalanabiliriz. Ben normalde değiştir-gönder yapardım ama burada burp'u da göstermekte fayda var; Burp Suite aracını açtıktan sonra ve de firefox'tan proxy'i burp ile aynı yaptıktan sonra (foxyproxy) tekrar burp açık şekilde .php uzantılı dosyamızı gönderelim. Gönderdikten sonra burp'un bu isteğimizi yakaladığını göreceksiniz. Burada "Content-Disposition:" kısmında filename="shell.php" şeklinde uzantımızın gittiğini görmekteyiz. Biz bu isteğe sağ tıklayarak "Send to Intruder" yapıyoruz.
  • 6.png
  • Intruder kısmında sadece isteğin "filename" parametresini seçiyoruz.
  • 7.png
  • Ardından "Payloads" sekmesine geçerek, seçtiğimiz parametreye gönderilecek dosya uzantılarını yazıyoruz; yani php, php1, php5, phtml şeklinde uzantıları girdi olarak verelim ve "Start attack" diyerek saldırımızı başlatalım.
  • 8.png
  • Bu basit tarama sonucu sunucuda phtml dosya uzantısının yüklenebilir olduğunu göreceğiz. Dolayısıyla bizde shell.php dosyamızı shell.phtml olarak değiştiriyoruz. Bunun için; mv shell.php shell.phtm
Nitekim bundan sonra gelelim shell.phtml dosyamızı, internal sayfasından sunucuya yüklemeye. Dosya yükleme kısmında oluşturduğumuz .phtml dosyasını yüklediğimiz zaman gerçekten de dosyamızın yüklendiğini "Succes" ifadesiyle anlıyoruz. Peki şimdi geldi, içeri soktuğumuz bu dosyamıza ulaşıp ondan kendimize bir bağlantı almaya. Şimdi <ip>:3333/internal/uploads sekmesine gidelim, ve burada yüklediğimiz zararlı dosyamızı görelim. Weevely ile oluşturduğumuz için url'yi aldıktan sonra sunucuya erişebileceğiz. Yani yüklediğimiz dosyanın içine girelim ve url’yi komple alalım. url’yi aldıktan sonra terminal'e gelelim ve; weevely <url> <password> kodu ile sunucunun içine girelim.​
10.png
Not: weevely ile shell alacağınız zaman şu şekilde;​
import os
url = input("Shell url: ")
os.system(f"weevely {url} 1453")
küçük kod parçası ile bunu otomatikleştirebilirsiniz.​
Nitekim, şimdi buradan da doğruca cd /home klasörüne gidelim,​
11.png

ve ilk kullanıcımız olan "bill"in içine girelim ve böylece ilk flag'i alalım; 8bd7992fbe8a6ad22a63361004cfcedb.
12.png

aldıktan sonra da sorulara cevaplar verelim;
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Bu soruda yükleme yasağı olan dosya uzantısını sormakta, biz bunun .php olduğunu görmüştük; .php
  • Run this attack, what extension is allowed?
  • Burada da yüklemeye izin verilen dosya uzantısını sormakta, bunuda biz burp ile görmüştük; .phtml
  • What is the name of the user who manages the webserver?
  • Burada bulduğumuz ilk kullanıcımızı giriyoruz; bill
  • What is the user flag?
  • burada da bulduğumuz user.txt flag'ini giriyoruz.
  • ve böylece Task4'ü de tamamlamış oluyoruz.
TASK 5: Privilege Escalation

Bu bölümde amacımız reverse_shell ile giriş yaptığımız "www-data" yetkisiz kullanıcısından yetkili bir kullanıcıya yani doğrudan "root"a bağlanmaya çalışmak olacaktır.

Şimdi ilk olarak sudo yetkisini kullanacağımız nesneler arayalım. Bunuda yapmak için; "find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;" komutunu kullanalım. Bu kod parçası tam olarak da istediğimizi karşılayacak sonuçları bize getirecektir. Nitekim yapılan tarama sonucunda çoğu şeye izin verilmediğini, fakat pek az şeylere izin verildiğini görmüş olacağız. Biz izin verilenler arasından init servisini kontrol etmeye yarayan "/bin/systemctl"i kullanacağız.
13.png


Biz aslında burada systemctl'e bir suid bitiği tanımlayacağız ve bu şekilde yetki yükseltemeye çalışacağız. Şimdi bunun için ilk olarak bitiğimizi yazalım;

[Unit]
Description=root

[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'cat /root/root.txt > /tmp/root.txt'

[Install]

WantedBy=multi-user.target

şeklinde bitiğimizi yazıp, “root.service” şeklinde kaydedelim. Ardından şimdi yazdığımız bu bitiği hedef makinemize aktaralım. Bunu netcat ile de aktarabilirsiniz veya "python2 -m SimpleHTTPServer 80" şeklinde python ile bulunduğunuz klasörü host'a dönüştürerek de sunucu tarafından wget ile alabilirsiniz. Ben bu şekilde yapıyorum. Bir şekilde betiğimizi yükledikten sonra gelelim bu betiği kullanmaya. Bu arada bitiği yüklerken /tmp klasörüne yüklemeyi unutmayın ki şayet biliyorsunuz /tmp klasörü her kullanıcının yazmaya izni olan bir yerdir.
14.png


Nitekim ardından sırasıyla "systemctl enable /tmp/root.service" komutunu ve "systemctl start root" komutunu yazalım. Bundan sonra /tmp klasörüne oluşan root.txt'i okuyarak root flag'ini de almış olalım. Bu arada root.txt'inin oluşmasını biz yazdığımız bitik'de belirtmiştik, şayet burada root.txt'nin içeriğini tmp klasörüne yazdırmak yerine root olarak bir shell de alabilirdik.
15.png


Soruları cevaplayacak olursak da;
  • On the system, search for all SUID files. What file stands out?
  • Burada kullandığımız suid nesnesini belirtiyoruz, yani; /bin/systemctl
  • Become root and get the last flag (/root/root.txt)
  • ve en son olarak da root flag'i belirtiyoruz; a58ff8579f0a9270368d33a9966c7fd5

Ve neticede tryackme tarafından oluşturulan Vulnversity odasını da bu şekilde tamamlamış oluyoruz. Buraya kadar okuduğunuz için teşekkürler, bir sonraki makine çözümlerinde görüşmek üzere...<3




yazının pdf hali -> github

İletişim
Ellerine sağlık güzel konu, fakat resimleri biraz küçültsen daha iyi olur. :)
 

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28


Makine Çözümleri

myLogo.png



Oğulcan KAÇAR



Makine: Tryhackme/Vulnversity


Giriş

Merhaba, bu yazımızda tryhackme'nin "for free" > "easy" odalarından olan "Vulnversity" odasını çözeceğiz. Oda genel olarak keşif, ters bağlantı ve de yetki yükseltme bölümlerinden oluşmakta olup ve bize toplam 5 adet görev sunmaktadır. Şimdi ilk olarak vpn ile tryhackme ağına bağlanıp, makineyi de çalıştırdıktan sonra görevlerimize geçelim.

TASK 1: Deploy the machine (Makineyi başlat)

İlk görevimizde sadece makineyi başlatmamız gerekmekte.

TASK 2: Reconnaissance (Keşif)

Bu kısımda aslında bizden "nmap" ve birkaç temel parametresi gösterilerek bizden makinenin taranması istenmektedir. Burada bize sorulan sorular da haliyle tarama sonucu elde edeceğimiz bilgiler ile cevaplanacaktır.
  • Scan the box, how many ports are open?
  • nmap -sV -sS -O -n -Pn <ip_address>
  • şeklinde nmap komutu ile makinemizi tarayalım. Verdiğimiz parametreler ise;
    • -sV: versiyon
    • -sS: TCP/SYN paketi göndererek tarama
    • -O: işletim sistemi
    • -n: dns çözümlemesi yapma; yani domainler ile ip adreslerini eşlemeye çalışma.
    • -Pn: ping atmadan, yani hepsini açık olarak kabullenerek tarama yap.
    • 1.png
Nitekim tarama işlemi bittikten sonra, ilk soruda bizden hedef makinede kaç adet portun açık olduğunu sormaktadır. Bunun cevabı ise nmap sonuçlarından da göreceğiniz gibi; 6 olacaktır.

Not: aslında tryhackme bizde input'unda tek karakterli olduğunu belirttiği için 1 ile 9 arasında sırayla 1234..şeklinde ilerlesek de bulabiliriz.

What version of the squid proxy is running on the machine?
Ardından bize burada "squid proxy"nin sürüm bilgisini sormaktadır. Squid proxy ise; basit olarak web nesnelerinin önbelleğe alınmasını sağlamaktadır diyebiliriz. Bunun cevabını da nmap çıktılarımızdan öğreniyoruz; 3.5.12

How many ports will nmap scan if the flag -p-400 was used?

bu kısımda ise bize aslında cevabı sorunun içinde vermektedir. Burada sorunun demek istediği nmap'a toplam 400 port tarama emri verilirse kaç port tarar, mantıken toplam 400 port tarayacaktır; 400

Using the nmap flag -n what will it not resolve?

bu kısımda aslında bunu ilk başta da söylemiştim; nmap'e -n parametresini verdiğimizde dns çözümlemesi yapmayacaktır. Bunun öğrenmek için ise; nmap -h | grep "n/" komutunu kullanabiliriz.

2.png


What is the most likely operating system this machine is running?
bu kısımda da bizden sistemin çalıştırdığı işletim sistemini sormaktadır. Bunu da aynı şekilde nmap sonuçlarımızdan öğreniyoruz; Ubuntu.

What port is the web server running on?


burada ise aslında normalde web server 80.portta çalışır fakat, bu makinemizde web server 80. port yerine 3333.portta çalışmaktadır. Elbette bunu da nmap sonuçlarımızdan öğreniyoruz; 3333

ve bu şekilde Task2'nin görevlerini bitirmiş oluyoruz.

TASK 3: Locating directories using GoBuster

Bu bölümde sadece bizden makinemiz üzerinde goBuster dizin bulma aracı ile haliyle gizli dizinleri bulmamızı istemektedir.
  • What is the directory that has an upload form page?
  • bizden sitemizde gizli bir upload sayfasını bulmamızı ve o sayfanın adının ne olduğunu sormaktadır. Dolayısıyla biz de; gobuster dir -u http://10.10.133.20:3333 -w /usr/share/dirb/wordlists/common.txt komutu ile makinemizde gizli dizinleri bulmaya çalışalım. Sonuçta bize birkaç tane gizli klasör getirecektir, bizim burada açık olan sayfamız "internal" olacaktır. Çünkü içinde gerçekten de sunucuya dosya yükleyeceğimiz bir form vardır
  • 3.png
  • 4.png

  • dolayısıyla bu şekilde Task3'ü de tamamlamış oluyoruz.
TASK 4: Compromise the webserver
Şimdi bu zamana kadar makinede keşif yaptık, buna bağlı bazı soruları cevapladık ve sonunda kullanacağımız bir açık bulabildik. Şimdi geldik bu açıktan faydalanmaya.
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Şimdi biz burada dosya yükleme formunu bypass etmeye çalışacağız. İlk olarak sunucuya sızabilmemiz için, bir adet reverse_shell'e ihtiyacımız olacak. Bunu ister google'dan kolayca bulabilir veya kendiniz "weevely" aracını kullanarak oluşturabilirsiniz. Ben şimdilik weevely kullanıyorum; “weevely generate 14536 kodu ile 14536 şifresi ile kendime bir adet php kodu oluşturuyorum. Ardından oluşturduğum bu php dosyasını upload formuna gelip ekliyorum, fakat "Extension not allowed" şeklinde bize aslında .php uzantılı dosyaları yüklemediğini söylemektedir.
  • 5.png
  • Dolayısıyla bizim bu sunucun hangi tür uzantıları kabul ettiğini öğrenmemiz gerek; bunu yapmak için de ister tek tek uzantıları kendimiz değiştir-gönder şeklinde deneyebiliriz ya da burpsuite aracından faydalanabiliriz. Ben normalde değiştir-gönder yapardım ama burada burp'u da göstermekte fayda var; Burp Suite aracını açtıktan sonra ve de firefox'tan proxy'i burp ile aynı yaptıktan sonra (foxyproxy) tekrar burp açık şekilde .php uzantılı dosyamızı gönderelim. Gönderdikten sonra burp'un bu isteğimizi yakaladığını göreceksiniz. Burada "Content-Disposition:" kısmında filename="shell.php" şeklinde uzantımızın gittiğini görmekteyiz. Biz bu isteğe sağ tıklayarak "Send to Intruder" yapıyoruz.
  • 6.png
  • Intruder kısmında sadece isteğin "filename" parametresini seçiyoruz.
  • 7.png
  • Ardından "Payloads" sekmesine geçerek, seçtiğimiz parametreye gönderilecek dosya uzantılarını yazıyoruz; yani php, php1, php5, phtml şeklinde uzantıları girdi olarak verelim ve "Start attack" diyerek saldırımızı başlatalım.
  • 8.png
  • Bu basit tarama sonucu sunucuda phtml dosya uzantısının yüklenebilir olduğunu göreceğiz. Dolayısıyla bizde shell.php dosyamızı shell.phtml olarak değiştiriyoruz. Bunun için; mv shell.php shell.phtm
Nitekim bundan sonra gelelim shell.phtml dosyamızı, internal sayfasından sunucuya yüklemeye. Dosya yükleme kısmında oluşturduğumuz .phtml dosyasını yüklediğimiz zaman gerçekten de dosyamızın yüklendiğini "Succes" ifadesiyle anlıyoruz. Peki şimdi geldi, içeri soktuğumuz bu dosyamıza ulaşıp ondan kendimize bir bağlantı almaya. Şimdi <ip>:3333/internal/uploads sekmesine gidelim, ve burada yüklediğimiz zararlı dosyamızı görelim. Weevely ile oluşturduğumuz için url'yi aldıktan sonra sunucuya erişebileceğiz. Yani yüklediğimiz dosyanın içine girelim ve url’yi komple alalım. url’yi aldıktan sonra terminal'e gelelim ve; weevely <url> <password> kodu ile sunucunun içine girelim.​
10.png
Not: weevely ile shell alacağınız zaman şu şekilde;​
import os
url = input("Shell url: ")
os.system(f"weevely {url} 1453")
küçük kod parçası ile bunu otomatikleştirebilirsiniz.​
Nitekim, şimdi buradan da doğruca cd /home klasörüne gidelim,​
11.png

ve ilk kullanıcımız olan "bill"in içine girelim ve böylece ilk flag'i alalım; 8bd7992fbe8a6ad22a63361004cfcedb.
12.png

aldıktan sonra da sorulara cevaplar verelim;
  • What common file type, which you'd want to upload to exploit the server, is blocked? Try a couple to find out.
  • Bu soruda yükleme yasağı olan dosya uzantısını sormakta, biz bunun .php olduğunu görmüştük; .php
  • Run this attack, what extension is allowed?
  • Burada da yüklemeye izin verilen dosya uzantısını sormakta, bunuda biz burp ile görmüştük; .phtml
  • What is the name of the user who manages the webserver?
  • Burada bulduğumuz ilk kullanıcımızı giriyoruz; bill
  • What is the user flag?
  • burada da bulduğumuz user.txt flag'ini giriyoruz.
  • ve böylece Task4'ü de tamamlamış oluyoruz.
TASK 5: Privilege Escalation

Bu bölümde amacımız reverse_shell ile giriş yaptığımız "www-data" yetkisiz kullanıcısından yetkili bir kullanıcıya yani doğrudan "root"a bağlanmaya çalışmak olacaktır.

Şimdi ilk olarak sudo yetkisini kullanacağımız nesneler arayalım. Bunuda yapmak için; "find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;" komutunu kullanalım. Bu kod parçası tam olarak da istediğimizi karşılayacak sonuçları bize getirecektir. Nitekim yapılan tarama sonucunda çoğu şeye izin verilmediğini, fakat pek az şeylere izin verildiğini görmüş olacağız. Biz izin verilenler arasından init servisini kontrol etmeye yarayan "/bin/systemctl"i kullanacağız.
13.png


Biz aslında burada systemctl'e bir suid bitiği tanımlayacağız ve bu şekilde yetki yükseltemeye çalışacağız. Şimdi bunun için ilk olarak bitiğimizi yazalım;

[Unit]
Description=root

[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'cat /root/root.txt > /tmp/root.txt'

[Install]

WantedBy=multi-user.target

şeklinde bitiğimizi yazıp, “root.service” şeklinde kaydedelim. Ardından şimdi yazdığımız bu bitiği hedef makinemize aktaralım. Bunu netcat ile de aktarabilirsiniz veya "python2 -m SimpleHTTPServer 80" şeklinde python ile bulunduğunuz klasörü host'a dönüştürerek de sunucu tarafından wget ile alabilirsiniz. Ben bu şekilde yapıyorum. Bir şekilde betiğimizi yükledikten sonra gelelim bu betiği kullanmaya. Bu arada bitiği yüklerken /tmp klasörüne yüklemeyi unutmayın ki şayet biliyorsunuz /tmp klasörü her kullanıcının yazmaya izni olan bir yerdir.
14.png


Nitekim ardından sırasıyla "systemctl enable /tmp/root.service" komutunu ve "systemctl start root" komutunu yazalım. Bundan sonra /tmp klasörüne oluşan root.txt'i okuyarak root flag'ini de almış olalım. Bu arada root.txt'inin oluşmasını biz yazdığımız bitik'de belirtmiştik, şayet burada root.txt'nin içeriğini tmp klasörüne yazdırmak yerine root olarak bir shell de alabilirdik.
15.png


Soruları cevaplayacak olursak da;
  • On the system, search for all SUID files. What file stands out?
  • Burada kullandığımız suid nesnesini belirtiyoruz, yani; /bin/systemctl
  • Become root and get the last flag (/root/root.txt)
  • ve en son olarak da root flag'i belirtiyoruz; a58ff8579f0a9270368d33a9966c7fd5

Ve neticede tryackme tarafından oluşturulan Vulnversity odasını da bu şekilde tamamlamış oluyoruz. Buraya kadar okuduğunuz için teşekkürler, bir sonraki makine çözümlerinde görüşmek üzere...<3




yazının pdf hali -> github

İletişim
Ellerine saglik
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.