Tryhackme Gallery Write Up

Crackmeci

Katılımcı Üye
28 Haz 2020
312
170
Web
Merhaba ben Crackmeci, bu konumda sizlere tryhackme'de bulunan bir ctf olan Gallery'nin çözümünü anlatacağım
Makine Zorluk Seviyesi : Kolay

Makine Bağlantısı: TryHackMe | Gallery

ro3fzuc.png

crtbdtm.png

Çözeceğimiz makine bu ancak öncelikle odaya katılmak gerekiyor odaya katıldıktan sonra "
Start Machine" diyerek makineyi başlatabilirsiniz ayrıca kendi bilgisayarınızdan makinenin ip adresi üzerinde işlem yapabilmeniz için aynı ağda bulunmanız gerekiyor bu sebeple de tryhackme hesabınıza özel olarak üretilen openvpn dosyasıyla o ağa bağlantı sağlayabilirsiniz.

s8mbo04.png

TryHackMe | Cyber Security Training bu sayfaya girdikten sonra karşınıza böyle bir sayfa çıkacaktır oradan "
Download My Configuration File" düğmesini kullanarak .ovpn ile biten dosyanızı edinebilirsiniz.

lztzsr7.png

Burada benim tryhackme kullanıcı adım crackmeci olduğu için bağlantı dosyam crackmeci.ovpn olarak indi sizde farklı olacaktır.
Kod:
sudo openvpn kullaniciAdi.ovpn

knhk63e.png

Bağlantı başarılı olduysa "
Initialization Sequence Completed" çıktısı ekrana gelecektir. Artık bağlantıyı kurduğumuza göre makinenin çözümüne geçebiliriz.
hACOou.gif


2psjp5m.png

"Start Machine" dedikten sonra 1 dakikalık geri sayımdan sonra size bir ip adresi verecektir bu ip adresi çözeceğiniz makinenin ip adresidir makineyi her çalıştırdığınızda bu değişir.

g3zd9ko.png

Bazen makine açılsa da çalışmıyor herhangi bir sıkıntı olup olmadığını "
ping makineIp" şeklinde kontrol edebilirsiniz.

ef1rddb.png

Makine hangi servislerin hangi sürümlerini çalıştırıyor öğrenmek için nmap aracıyla temel bir port taraması başlattım.
Parametrelerin Anlamları:
Kod:
-sS : SYN Taraması yapılmasını sağlar ve adrese bir SYN paketi gönderir hedef eğer SYN-ACK türünde cevap döndürürse portun açık olduğunu; eğer RST cevabını alırsa kapalı olduğunu anlar.

-sC: Script taramasını yapılmasını sağlar bazı temel bazı betikleri çalıştırarak sistemdeki bazı özellikleri veya güvenlik açıklarını bulmayı hedefler.

-sV: Çalışan servislerin isimlerinin , sürümlerini , v.b. özelliklerini bulmaya yarar buradan çıkan sonuçlara göre exploitdb üzerinde arama yapabilirsiniz.




6z1s48e.png

Tarama sonuçları geldi temel bir tarama olduğu için büyük ihtimal sistemde çalışan tüm servisleri getirmedi ancak dahasına gerek yok bunlardan bir şey çıkmadı. Ancak tryhackme'de sorulan ilk sorunun cevabını bulduk.
rfccy4z.png

2 port açıktır.
hACOou.gif

O zaman şimdi bir klasör taraması yapalım bunun için "
dirb,dirbuster,gobuster" gibi araçlar olsa da ben bu konuda dirsearch kullanacağım. Dirsearch normalde Kali Lİnux veya Parrot Os gibi sistemlerde yüklü olarak gelmiyor bu sebeple aşağıdaki kod ile kurmanız gerekiyor.
Kod:
sudo apt-get update
sudo apt-get install dirsearch

Artık aracı kullanabiliriz.
n8mipj3.png

Aracı kullanmak için sadece -u parametresi ile url adresi belirtiyoruz kendi wordlisti ile tarama yapıyor.
Kod:
dirsearch -u http://ip-adresi
4zw0aua.png

Tarama sonuçları geldi /gallery adında bir klasör varmış artık tarayıcımız üzerinde açarak klasörde ne olduğunu incelemeye başlayabiliriz.
hACOou.gif


9dbs1zu.png

Adrese girdiğimizde bizi böyle bir sayfa karşılayacak bu sayfada direkt olarak ikinci sorumuzun cevabı yazıyor.
4mfeok1.png


Simple Image Gallery
7atb40r.png

Şimdi elimizde sadece bir giriş yapma yeri var ve başka hiçbir şey yok ancak makinemizin türüyle ilgili "sqli" yazıyor yani sql injection v.b. bir açık kullanmamız gerekebilir bu yüzden hemen admin login bypass yapmayı denemeye karar veriyorum.
9b4jtxf.png

Ve bu şekilde giriş yapmayı deniyorum

Kod:
Kullanıcı Adı:'=' 'or'
Şifre:'=' 'or'


cgvrhvn.png

Ve başarılı olduk. "
Bunun sebebi ne?" diye soracak olursanız veritabanı sorgularında yapılan yanlışlıklardan ötürü oluşan bir çeşit sql injection açığı bu eğer daha detaylı incelemek isterseniz şu konuma bir göz gezdirebilirsiniz.
Admin Panel Bypass
10i92ei.png

Kurcalarken "
Albums" diye bir yer fark ettim ve incelemek için girdim burada galeri sistemindeki resimler ve bağlı oldukları albümler var belki biz de şuan bu albümlerden birine resim ayağına shell veya başka bir php dosyası yüklemeyi deneyebiliriz.
rypvvzq.png

Rastgele bir albüme tıkladım ve beni attığı sayfada "
Upload" düğmesine bastım şimdi buraya test amaçlı bir php dosyası yüklemeyi deneyeceğim eğer başarılı olursa ardından shell yüklemeyi deneyip sisteme erişmiş olacağız.
hcwa8so.png

Test etmek için bir php dosyası yüklemeyi denedim ve başarılı oldum en azından burp suite ile uğraşmaya gerek kalmadı. Şimdi reverse shell alalım. Bunun için githubda en çok kullanılan php reverse shell olan pentestmonkey'in shellini kullanacağım.
php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell
1tw3byh.png

Reverse shell dönüş yapacağı bir ip adresine ihtiyaç duyar bu sebeple ip adresimi öğrenmek için ifconfig yazdım ve şimdi buradan 10.xxx ile başlayan openvpn ağında bana atanan ip adresini öğreneceğim.
Kod:
ifconfig
7j0apd4.png

İp adresimin 10.8.229.46 olduğunu öğrendim şimdi shellin bana dönüş yapacağı portu dinlemeye alacağım bu portu ben 4444 olarak seçtim ve bunun için de netcat(nc) adlı aracı kullanacağım.
a85r42j.png

Şuan 10.8.229.46:4444 adresini dinlemeye almış oldum yani kendi ip adresim: dinlediğim port buraya herhangi bir istek geldiğinde onu yakalamış olacağım.
Kod:
nc -lnvp 4444

82m3ts0.png

Shelli de bu şekilde düzenledim artık upload edebilirim.
2ccxqa9.png

Shelli yükleyip orada üzerine tıkladım ve bağlantı düştü hatta bir komut çalıştırdım.

4jbg083.png

Ama şimdi bash shelle geçmemiz lazım bu sebeple şu kodu çalıştırdım.
Kod:
python3 -c 'import pty; pty.spawn("/bin/bash")'

Şimdi tryhackme'deki soruyu cevaplandırmamız gerekiyor bu yüzden mysql'e bağlanmalıyız eğer veritabanına kayıt varsa bir veritabanı konfigürasyon dosyası vardır diye düşünüp websitenin bulunduğu dizini incelemeye başlıyorum.
3j5rgwd.png

Kod:
cd /var/www/html/gallery
Burada gözüme initialize.php dosyası çarpıyor çünkü initialize kelimesi ingilizce başlatmak, hazırlamak v.b. anlamlara geliyor bu sebeple bunun config dosyası olabileceğini düşünüp okumaya karar veriyorum.

59er28g.png

Pek haksız da sayılmazmışım çünkü bu dosyada veritabanı bağlantısını kurarak kullanıcı şifresini bulmamıza yarayacak her şey bulunuyor.

70y286s.png

Ufak bir hatadan sonra artık mysql komutlarını çalıştırabilirim.
Makefile:
mysql -u gallery_user -p
Enter password: passw0rd321
htq2p6x.png

Burada ilk komut ile kullanıcının erişiminin olduğu veritabanlarını listelettikten sonra ikinci komut ile bu veritabanlarından birini seçtik ve artık çalıştırdığımız komutlar onu etkileyecek.

Kod:
show databases;
use gallery_db;

c1odamv.png

İlk komut ile seçtiğimiz veritabanında bulunan tabloları ekrana bastırdıktan sonra ikinci komut ile users tablosundan tüm kolonları çektik.
Kod:
show tables;
SELECT * FROM users;



pcbnemt.png

Artık sorumuzun cevabına ulaştık.
a228b12a08b6527e7978cbe5d914531c

g7mfnqm.png

Sistemde kısa bir gezintiden sonra /var/backups klasörünün altında "
mike_home_backup" isminde garip bir klasör fark ediyorum ve içine girip ne var ne yok diye bakıyorum.

2cql5q3.png

Documents ve images klasörlerini inceledikten sonra onlarda işimize yarayacak pek bir şey olmadığını fark ediyorum ve belki terminal geçmişi yardımcı olur diye cat .bash_history diyerek terminal geçmişini ekrana bastırıyorum.

poa4qlr.png

Ve artık mike'ın şifresi elimizde çünkü kendi terminalinizde de denerseniz sudo -l yazınca sizden kullanıcının şifresini isteyecektir ve boşluk v.b. bir şey olmadan siz parolayı girince kullanıcınızın yetkilerinizi görebileceksiniz. Yani mike'ın şifresi "
b3stpassw0rdbr0xx" mış.

g818swe.png

Evet bu şekilde mike kullanıcısına geçip user flagi aldık şimdi yetki yükseltme işlemini gerçekleştirip root flagi arayalım.
Kod:
su mike: Bu komut ile terminalde aktif olan kullanıcıyı mike ile değiştirir ve eğer değiştirilecek kullanıcının şifresi varsa şifre sorar.

rfh55mn.png

THM{af05cd30bfed67849befd546ef}

rvkk93y.png

Root flaga ulaşmak için mike kullanıcısının yetkileri yetersiz geldiği için root dizine mike ile giremedik ama bence hala mike işimize yarayabilir...

76868bw.png

sudo -l komutu ile mike kullanıcısının yetkilerini kontrol ettiğimizde mike kullanıcısının /opt dizininde bulunan rootkit.sh isimli bir dosyayı yönetici olarak çalıştırabildiğini görüyoruz şimdi gidip dosyanın içeriğini inceleyelim.
2ffn1uy.png

Dosyayı incelediğimizde dosyayı yönetici olarak çalıştırırsak çalıştırdığı nano ve rkhunter'ın da yönetici olarak çalışacağını görüyoruz şimdi gidip nano veya rkhunter ile yetki yükseltme olup olmadığını kontrol etmek için gtfobins adlı siteye bakacağız bu site yetki yükseltme ile ilgili komutların paylaşıldığı bir site içerisinde bir sürü programla ilgili yetki yükseltmeye yarayan kodlar bulabilirsiniz.

8d8knhp.png

Gtfobins'e girdiğimde rkhunter ile ilgili bir şey bulamadım ancak nano ile ilgili bu vardı. Ctrl + R ve Ctrl +X ile komut çalıştırma yerine girildiğinde reset; sh > 1&0 2>&0 yazıldığında yetkimizin root olacağını söylemiş.
Gtfobins: GTFOBins

9cfz6fx.png

Bu şekilde gönderirsek nano aracı açılacaktır.
ep8j1y2.png

Ancak bu hatayı aldık bunun sebebi netcat shellinin stabilitesi ile alakalı bu sebeple aşağıdaki kodu çalıştırmamız gerekiyor.
Kod:
export TERM=xterm
CTRL+Z ile durdurun
stty raw -echo;fg
Burada da iki kere enter tuşuna basın



Bu kod terminalin ortam değişkenini xterm olarak ayarlar.
bzr03e1.png

Yaptığımız değişiklikten sonra tekrar denediğimizde gördüğünüz gibi nano açıldı.
6vcfhng.png

Komutu çalıştırdım artık root olmuş olduk.
t0tcrut.png
Kod:
cd /root
cat root.txt



jzxuemn.png


THM{ba87e0dfe5903adfa6b8b450ad7567bafde87}
hACOou.gif

Konumu okuduğunuz için teşekkür ederim ilk defa ctf çözümüyle ilgili konu yazıyorum o yüzden bazı yerleri gereksiz olarak uzatmış olabilirim kusura bakmayın.
 
Son düzenleme:

invisible blood

Uzman üye
15 Eyl 2023
1,177
442
Merhaba ben Crackmeci, bu konumda sizlere tryhackme'de bulunan bir ctf olan Gallery'nin çözümünü anlatacağım
Makine Zorluk Seviyesi : Kolay

Makine Bağlantısı: TryHackMe | Gallery

ro3fzuc.png

crtbdtm.png

Çözeceğimiz makine bu ancak öncelikle odaya katılmak görekiyor odaya katıldıktan sonra "
Start Machine" diyerek makineyi başlatabilirsiniz ayrıca kendi bilgisayarınızdan makinenin ip adresi üzerinde işlem yapabilmeniz için aynı ağda bulunmanız gerekiyor bu sebeple de tryhackme hesabınıza özel olarak üretilen openvpn dosyasıyla o ağa bağlantı sağlayabilirsiniz.

s8mbo04.png

TryHackMe | Cyber Security Training bu sayfaya girdikten sonra karşınıza böyle bir sayfa çıkacaktır oradan "
Download My Configuration File" düğmesini kullanarak .ovpn ile biten dosyanızı edinebilirsiniz.

lztzsr7.png

Burada benim tryhackme kullanıcı adım crackmeci olduğu için bağlantı dosyam crackmeci.ovpn olarak indi sizde farklı olacaktır.
Kod:
sudo openvpn kullaniciAdi.ovpn

knhk63e.png

Bağlantı başarılı olduysa "
Initialization Sequence Completed" çıktısı ekrana gelecektir. Artık bağlantıyı kurduğumuza göre makinenin çözümüne geçebiliriz.
hACOou.gif


2psjp5m.png

"Start Machine" dedikten sonra 1 dakikalık geri sayımdan sonra size bir ip adresi verecektir bu ip adresi çözeceğiniz makinenin ip adresidir makineyi her çalıştırdığınızda bu değişir.

g3zd9ko.png

Bazen makine açılsa da çalışmıyor herhangi bir sıkıntı olup olmadığını "
ping makineIp" şeklinde kontrol edebilirsiniz.

ef1rddb.png

Makine hangi servislerin hangi sürümlerini çalıştırıyor öğrenmek için nmap aracıyla temel bir port taraması başlattım.
Parametrelerin Anlamları:
Kod:
-sS : SYN Taraması yapılmasını sağlar ve adrese bir SYN paketi gönderir hedef eğer SYN-ACK türünde cevap döndürürse portun açık olduğunu; eğer RST cevabını alırsa kapalı olduğunu anlar.[/B][/SIZE][/COLOR][/CENTER][/B][/SIZE][/COLOR][/CENTER]
[COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER][COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER]-sC: Script taramasını yapılmasını sağlar bazı temel bazı betikleri çalıştırarak sistemdeki bazı özellikleri veya güvenlik açıklarını bulmayı hedefler.
-sV: Çalışan servislerin isimlerinin , sürümlerini , v.b. özelliklerini bulmaya yarar buradan çıkan sonuçlara göre exploitdb üzerinde arama yapabilirsiniz.





6z1s48e.png

Tarama sonuçları geldi temel bir tarama olduğu için büyük ihtimal sistemde çalışan tüm servisleri getirmedi ancak dahasına gerek yok bunlardan bir şey çıkmadı. Ancak tryhackme'de sorulan ilk sorunun cevabını bulduk.
rfccy4z.png

2 port açıktır.
hACOou.gif

O zaman şimdi bir klasör taraması yapalım bunun için "
dirb,dirbuster,gobuster" gibi araçlar olsa da ben bu konuda dirsearch kullanacağım. Dirsearch normalde Kali Lİnux veya Parrot Os gibi sistemlerde yüklü olarak gelmiyor bu sebeple aşağıdaki kod ile kurmanız gerekiyor.
Kod:
sudo apt-get update
sudo apt-get install dirsearch

Artık aracı kullanabiliriz.
n8mipj3.png

Aracı kullanmak için sadece -u parametresi ile url adresi belirtiyoruz kendi wordlisti ile tarama yapıyor.
Kod:
dirsearch -u http://ip-adresi
4zw0aua.png

Tarama sonuçları geldi /gallery adında bir klasör varmış artık tarayıcımız üzerinde açarak klasörde ne olduğunu incelemeye başlayabiliriz.
hACOou.gif


9dbs1zu.png

Adrese girdiğimizde bizi böyle bir sayfa karşılayacak bu sayfada direkt olarak ikinci sorumuzun cevabı yazıyor.
4mfeok1.png


Simple Image Gallery
7atb40r.png

Şimdi elimizde sadece bir giriş yapma yeri var ve başka hiçbir şey yok ancak makinemizin türüyle ilgili "sqli" yazıyor yani sql injection v.b. bir açık kullanmamız gerekebilir bu yüzden hemen admin login bypass yapmayı denemeye karar veriyorum.
9b4jtxf.png

Ve bu şekilde giriş yapmayı deniyorum

Kod:
Kullanıcı Adı:'=' 'or'
Şifre:'=' 'or'


cgvrhvn.png

Ve başarılı olduk. "
Bunun sebebi ne?" diye soracak olursanız veritabanı sorgularında yapılan yanlışlıklardan ötürü oluşan bir çeşit sql injection açığı bu eğer daha detaylı incelemek isterseniz şu konuma bir göz gezdirebilirsiniz.
Admin Panel Bypass
10i92ei.png

Kurcalarken "
Albums" diye bir yer fark ettim ve incelemek için girdim burada galeri sistemindeki resimler ve bağlı oldukları albümler var belki biz de şuan bu albümlerden birine resim ayağına shell veya başka bir php dosyası yüklemeyi deneyebiliriz.
rypvvzq.png

Rastgele bir albüme tıkladım ve beni attığı sayfada "
Upload" düğmesine bastım şimdi buraya test amaçlı bir php dosyası yüklemeyi deneyeceğim eğer başarılı olursa ardından shell yüklemeyi deneyip sisteme erişmiş olacağız.
hcwa8so.png

Test etmek için bir php dosyası yüklemeyi denedim ve başarılı oldum en azından burp suite ile uğraşmaya gerek kalmadı. Şimdi reverse shell alalım. Bunun için githubda en çok kullanılan php reverse shell olan pentestmonkey'in shellini kullanacağım.
php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell
1tw3byh.png

Reverse shell dönüş yapacağı bir ip adresine ihtiyaç duyar bu sebeple ip adresimi öğrenmek için ifconfig yazdım ve şimdi buradan 10.xxx ile başlayan openvpn ağında bana atanan ip adresini öğreneceğim.
Kod:
ifconfig
7j0apd4.png

İp adresimin 10.8.229.46 olduğunu öğrendim şimdi shellin bana dönüş yapacağı portu dinlemeye alacağım bu portu ben 4444 olarak seçtim ve bunun için de netcat(nc) adlı aracı kullanacağım.
a85r42j.png

Şuan 10.8.229.46:4444 adresini dinlemeye almış oldum yani kendi ip adresim: dinlediğim port buraya herhangi bir istek geldiğinde onu yakalamış olacağım.
Kod:
nc -lnvp 4444

82m3ts0.png

Shelli de bu şekilde düzenledim artık upload edebilirim.
2ccxqa9.png

Shelli yükleyip orada üzerine tıkladım ve bağlantı düştü hatta bir komut çalıştırdım.

4jbg083.png

Ama şimdi bash shelle geçmemiz lazım bu sebeple şu kodu çalıştırdım.
Kod:
python3 -c 'import pty; pty.spawn("/bin/bash")'

Şimdi tryhackme'deki soruyu cevaplandırmamız gerekiyor bu yüzden mysql'e bağlanmalıyız eğer veritabanına kayıt varsa bir veritabanı konfigürasyon dosyası vardır diye düşünüp websitenin bulunduğu dizini incelemeye başlıyorum.
3j5rgwd.png

Kod:
cd /var/www/html/gallery
Burada gözüme initialize.php dosyası çarpıyor çünkü initialize kelimesi ingilizce başlatmak, hazırlamak v.b. anlamlara geliyor bu sebeple bunun config dosyası olabileceğini düşünüp okumaya karar veriyorum.

59er28g.png

Pek haksız da sayılmazmışım çünkü bu dosyada veritabanı bağlantısını kurarak kullanıcı şifresini bulmamıza yarayacak her şey bulunuyor.

70y286s.png

Ufak bir hatadan sonra artık mysql komutlarını çalıştırabilirim.
Makefile:
mysql -u gallery_user -p
Enter password: passw0rd321
htq2p6x.png

Burada ilk komut ile kullanıcının erişiminin olduğu veritabanlarını listelettikten sonra ikinci komut ile bu veritabanlarından birini seçtik ve artık çalıştırdığımız komutlar onu etkileyecek.

Kod:
show databases;
use gallery_db;

c1odamv.png

İlk komut ile seçtiğimiz veritabanında bulunan tabloları ekrana bastırdıktan sonra ikinci komut ile users tablosundan tüm kolonları çektik.
Kod:
show tables;[/B][/SIZE][/COLOR][/CENTER][/B][/SIZE][/COLOR][/CENTER]
[COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER][COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER]SELECT * FROM users;




pcbnemt.png

Artık sorumuzun cevabına ulaştık.
a228b12a08b6527e7978cbe5d914531c

g7mfnqm.png

Sistemde kısa bir gezintiden sonra /var/backups klasörünün altında "
mike_home_backup" isminde garip bir klasör fark ediyorum ve içine girip ne var ne yok diye bakıyorum.

2cql5q3.png

Documents ve images klasörlerini inceledikten sonra onlarda işimize yarayacak pek bir şey olmadığını fark ediyorum ve belki terminal geçmişi yardımcı olur diye cat .bash_history diyerek terminal geçmişini ekrana bastırıyorum.

poa4qlr.png

Ve artık mike'ın şifresi elimizde çünkü kendi terminalinizde de denerseniz sudo -l yazınca sizden kullanıcının şifresini isteyecektir ve boşluk v.b. bir şey olmadan siz parolayı girince kullanıcınızın yetkilerinizi görebileceksiniz. Yani mike'ın şifresi "
b3stpassw0rdbr0xx" mış.

g818swe.png

Evet bu şekilde mike kullanıcısına geçip user flagi aldık şimdi yetki yükseltme işlemini gerçekleştirip root flagi arayalım.
Kod:
su mike: Bu komut ile terminalde aktif olan kullanıcıyı mike ile değiştirir ve eğer değiştirilecek kullanıcının şifresi varsa şifre sorar.

rfh55mn.png

THM{af05cd30bfed67849befd546ef}

rvkk93y.png

Root flaga ulaşmak için mike kullanıcısının yetkileri yetersiz geldiği için root dizine mike ile giremedik ama bence hala mike işimize yarayabilir...

76868bw.png

sudo -l komutu ile mike kullanıcısının yetkilerini kontrol ettiğimizde mike kullanıcısının /opt dizininde bulunan rootkit.sh isimli bir dosyayı yönetici olarak çalıştırabildiğini görüyoruz şimdi gidip dosyanın içeriğini inceleyelim.
2ffn1uy.png

Dosyayı incelediğimizde dosyayı yönetici olarak çalıştırırsak çalıştırdığı nano ve rkhunter'ın da yönetici olarak çalışacağını görüyoruz şimdi gidip nano veya rkhunter ile yetki yükseltme olup olmadığını kontrol etmek için gtfobins adlı siteye bakacağız bu site yetki yükseltme ile ilgili komutların paylaşıldığı bir site içerisinde bir sürü programla ilgili yetki yükseltmeye yarayan kodlar bulabilirsiniz.

8d8knhp.png

Gtfobins'e girdiğimde rkhunter ile ilgili bir şey bulamadım ancak nano ile ilgili bu vardı. Ctrl + R ve Ctrl +X ile komut çalıştırma yerine girildiğinde reset; sh > 1&0 2>&0 yazıldığında yetkimizin root olacağını söylemiş.
Gtfobins: GTFOBins

9cfz6fx.png

Bu şekilde gönderirsek nano aracı açılacaktır.
ep8j1y2.png

Ancak bu hatayı aldık bunun sebebi netcat shellinin stabilitesi ile alakalı bu sebeple aşağıdaki kodu çalıştırmamız gerekiyor.
Kod:
export TERM=xterm[/B][/SIZE][/COLOR][/CENTER][/B][/SIZE][/COLOR][/CENTER]
[COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER][COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER]CTRL+Z ile durdurun
stty raw -echo;fg
Burada da iki kere enter tuşuna basın




Bu kod terminalin ortam değişkenini xterm olarak ayarlar.
bzr03e1.png

Yaptığımız değişiklikten sonra tekrar denediğimizde gördüğünüz gibi nano açıldı.
6vcfhng.png

Komutu çalıştırdım artık root olmuş olduk.
t0tcrut.png

Kod:
cd /root[/B][/SIZE][/COLOR][/CENTER][/B][/SIZE][/COLOR][/CENTER]
[COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER][COLOR=rgb(255, 255, 255)][SIZE=6][B][CENTER]cat root.txt




jzxuemn.png


THM{ba87e0dfe5903adfa6b8b450ad7567bafde87}
hACOou.gif
Konumu okuduğunuz için teşekkür ederim ilk defa ctf çözümüyle ilgili konu yazıyorum o yüzden bazı yerleri gereksiz olarak uzatmış olabilirim kusura bakmayın.
Ellerinize sağlık hocam👍.
 

tamam ağa

Uzman üye
7 Haz 2023
1,458
831
Tryhackme'deki bazı ctf'ler ücretli değil mi?
herkes gibi eline sağlık diyip geçmeyeceğim gayet güzel anlatmışsın teşekkür ederiz.
 

Crackmeci

Katılımcı Üye
28 Haz 2020
312
170
Web

Speedy Gonzales

Katılımcı Üye
12 Kas 2021
634
296
in every technology system
Merhaba ben Crackmeci, bu konumda sizlere tryhackme'de bulunan bir ctf olan Gallery'nin çözümünü anlatacağım
Makine Zorluk Seviyesi : Kolay

Makine Bağlantısı: TryHackMe | Gallery

ro3fzuc.png

crtbdtm.png

Çözeceğimiz makine bu ancak öncelikle odaya katılmak gerekiyor odaya katıldıktan sonra "
Start Machine" diyerek makineyi başlatabilirsiniz ayrıca kendi bilgisayarınızdan makinenin ip adresi üzerinde işlem yapabilmeniz için aynı ağda bulunmanız gerekiyor bu sebeple de tryhackme hesabınıza özel olarak üretilen openvpn dosyasıyla o ağa bağlantı sağlayabilirsiniz.

s8mbo04.png

TryHackMe | Cyber Security Training bu sayfaya girdikten sonra karşınıza böyle bir sayfa çıkacaktır oradan "
Download My Configuration File" düğmesini kullanarak .ovpn ile biten dosyanızı edinebilirsiniz.

lztzsr7.png

Burada benim tryhackme kullanıcı adım crackmeci olduğu için bağlantı dosyam crackmeci.ovpn olarak indi sizde farklı olacaktır.
Kod:
sudo openvpn kullaniciAdi.ovpn

knhk63e.png

Bağlantı başarılı olduysa "
Initialization Sequence Completed" çıktısı ekrana gelecektir. Artık bağlantıyı kurduğumuza göre makinenin çözümüne geçebiliriz.
hACOou.gif


2psjp5m.png

"Start Machine" dedikten sonra 1 dakikalık geri sayımdan sonra size bir ip adresi verecektir bu ip adresi çözeceğiniz makinenin ip adresidir makineyi her çalıştırdığınızda bu değişir.

g3zd9ko.png

Bazen makine açılsa da çalışmıyor herhangi bir sıkıntı olup olmadığını "
ping makineIp" şeklinde kontrol edebilirsiniz.

ef1rddb.png

Makine hangi servislerin hangi sürümlerini çalıştırıyor öğrenmek için nmap aracıyla temel bir port taraması başlattım.
Parametrelerin Anlamları:
Kod:
-sS : SYN Taraması yapılmasını sağlar ve adrese bir SYN paketi gönderir hedef eğer SYN-ACK türünde cevap döndürürse portun açık olduğunu; eğer RST cevabını alırsa kapalı olduğunu anlar.

-sC: Script taramasını yapılmasını sağlar bazı temel bazı betikleri çalıştırarak sistemdeki bazı özellikleri veya güvenlik açıklarını bulmayı hedefler.

-sV: Çalışan servislerin isimlerinin , sürümlerini , v.b. özelliklerini bulmaya yarar buradan çıkan sonuçlara göre exploitdb üzerinde arama yapabilirsiniz.




6z1s48e.png

Tarama sonuçları geldi temel bir tarama olduğu için büyük ihtimal sistemde çalışan tüm servisleri getirmedi ancak dahasına gerek yok bunlardan bir şey çıkmadı. Ancak tryhackme'de sorulan ilk sorunun cevabını bulduk.
rfccy4z.png

2 port açıktır.
hACOou.gif

O zaman şimdi bir klasör taraması yapalım bunun için "
dirb,dirbuster,gobuster" gibi araçlar olsa da ben bu konuda dirsearch kullanacağım. Dirsearch normalde Kali Lİnux veya Parrot Os gibi sistemlerde yüklü olarak gelmiyor bu sebeple aşağıdaki kod ile kurmanız gerekiyor.
Kod:
sudo apt-get update
sudo apt-get install dirsearch

Artık aracı kullanabiliriz.
n8mipj3.png

Aracı kullanmak için sadece -u parametresi ile url adresi belirtiyoruz kendi wordlisti ile tarama yapıyor.
Kod:
dirsearch -u http://ip-adresi
4zw0aua.png

Tarama sonuçları geldi /gallery adında bir klasör varmış artık tarayıcımız üzerinde açarak klasörde ne olduğunu incelemeye başlayabiliriz.
hACOou.gif


9dbs1zu.png

Adrese girdiğimizde bizi böyle bir sayfa karşılayacak bu sayfada direkt olarak ikinci sorumuzun cevabı yazıyor.
4mfeok1.png


Simple Image Gallery
7atb40r.png

Şimdi elimizde sadece bir giriş yapma yeri var ve başka hiçbir şey yok ancak makinemizin türüyle ilgili "sqli" yazıyor yani sql injection v.b. bir açık kullanmamız gerekebilir bu yüzden hemen admin login bypass yapmayı denemeye karar veriyorum.
9b4jtxf.png

Ve bu şekilde giriş yapmayı deniyorum

Kod:
Kullanıcı Adı:'=' 'or'
Şifre:'=' 'or'


cgvrhvn.png

Ve başarılı olduk. "
Bunun sebebi ne?" diye soracak olursanız veritabanı sorgularında yapılan yanlışlıklardan ötürü oluşan bir çeşit sql injection açığı bu eğer daha detaylı incelemek isterseniz şu konuma bir göz gezdirebilirsiniz.
Admin Panel Bypass
10i92ei.png

Kurcalarken "
Albums" diye bir yer fark ettim ve incelemek için girdim burada galeri sistemindeki resimler ve bağlı oldukları albümler var belki biz de şuan bu albümlerden birine resim ayağına shell veya başka bir php dosyası yüklemeyi deneyebiliriz.
rypvvzq.png

Rastgele bir albüme tıkladım ve beni attığı sayfada "
Upload" düğmesine bastım şimdi buraya test amaçlı bir php dosyası yüklemeyi deneyeceğim eğer başarılı olursa ardından shell yüklemeyi deneyip sisteme erişmiş olacağız.
hcwa8so.png

Test etmek için bir php dosyası yüklemeyi denedim ve başarılı oldum en azından burp suite ile uğraşmaya gerek kalmadı. Şimdi reverse shell alalım. Bunun için githubda en çok kullanılan php reverse shell olan pentestmonkey'in shellini kullanacağım.
php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell
1tw3byh.png

Reverse shell dönüş yapacağı bir ip adresine ihtiyaç duyar bu sebeple ip adresimi öğrenmek için ifconfig yazdım ve şimdi buradan 10.xxx ile başlayan openvpn ağında bana atanan ip adresini öğreneceğim.
Kod:
ifconfig
7j0apd4.png

İp adresimin 10.8.229.46 olduğunu öğrendim şimdi shellin bana dönüş yapacağı portu dinlemeye alacağım bu portu ben 4444 olarak seçtim ve bunun için de netcat(nc) adlı aracı kullanacağım.
a85r42j.png

Şuan 10.8.229.46:4444 adresini dinlemeye almış oldum yani kendi ip adresim: dinlediğim port buraya herhangi bir istek geldiğinde onu yakalamış olacağım.
Kod:
nc -lnvp 4444

82m3ts0.png

Shelli de bu şekilde düzenledim artık upload edebilirim.
2ccxqa9.png

Shelli yükleyip orada üzerine tıkladım ve bağlantı düştü hatta bir komut çalıştırdım.

4jbg083.png

Ama şimdi bash shelle geçmemiz lazım bu sebeple şu kodu çalıştırdım.
Kod:
python3 -c 'import pty; pty.spawn("/bin/bash")'

Şimdi tryhackme'deki soruyu cevaplandırmamız gerekiyor bu yüzden mysql'e bağlanmalıyız eğer veritabanına kayıt varsa bir veritabanı konfigürasyon dosyası vardır diye düşünüp websitenin bulunduğu dizini incelemeye başlıyorum.
3j5rgwd.png

Kod:
cd /var/www/html/gallery
Burada gözüme initialize.php dosyası çarpıyor çünkü initialize kelimesi ingilizce başlatmak, hazırlamak v.b. anlamlara geliyor bu sebeple bunun config dosyası olabileceğini düşünüp okumaya karar veriyorum.

59er28g.png

Pek haksız da sayılmazmışım çünkü bu dosyada veritabanı bağlantısını kurarak kullanıcı şifresini bulmamıza yarayacak her şey bulunuyor.

70y286s.png

Ufak bir hatadan sonra artık mysql komutlarını çalıştırabilirim.
Makefile:
mysql -u gallery_user -p
Enter password: passw0rd321
htq2p6x.png

Burada ilk komut ile kullanıcının erişiminin olduğu veritabanlarını listelettikten sonra ikinci komut ile bu veritabanlarından birini seçtik ve artık çalıştırdığımız komutlar onu etkileyecek.

Kod:
show databases;
use gallery_db;

c1odamv.png

İlk komut ile seçtiğimiz veritabanında bulunan tabloları ekrana bastırdıktan sonra ikinci komut ile users tablosundan tüm kolonları çektik.
Kod:
show tables;
SELECT * FROM users;



pcbnemt.png

Artık sorumuzun cevabına ulaştık.
a228b12a08b6527e7978cbe5d914531c

g7mfnqm.png

Sistemde kısa bir gezintiden sonra /var/backups klasörünün altında "
mike_home_backup" isminde garip bir klasör fark ediyorum ve içine girip ne var ne yok diye bakıyorum.

2cql5q3.png

Documents ve images klasörlerini inceledikten sonra onlarda işimize yarayacak pek bir şey olmadığını fark ediyorum ve belki terminal geçmişi yardımcı olur diye cat .bash_history diyerek terminal geçmişini ekrana bastırıyorum.

poa4qlr.png

Ve artık mike'ın şifresi elimizde çünkü kendi terminalinizde de denerseniz sudo -l yazınca sizden kullanıcının şifresini isteyecektir ve boşluk v.b. bir şey olmadan siz parolayı girince kullanıcınızın yetkilerinizi görebileceksiniz. Yani mike'ın şifresi "
b3stpassw0rdbr0xx" mış.

g818swe.png

Evet bu şekilde mike kullanıcısına geçip user flagi aldık şimdi yetki yükseltme işlemini gerçekleştirip root flagi arayalım.
Kod:
su mike: Bu komut ile terminalde aktif olan kullanıcıyı mike ile değiştirir ve eğer değiştirilecek kullanıcının şifresi varsa şifre sorar.

rfh55mn.png

THM{af05cd30bfed67849befd546ef}

rvkk93y.png

Root flaga ulaşmak için mike kullanıcısının yetkileri yetersiz geldiği için root dizine mike ile giremedik ama bence hala mike işimize yarayabilir...

76868bw.png

sudo -l komutu ile mike kullanıcısının yetkilerini kontrol ettiğimizde mike kullanıcısının /opt dizininde bulunan rootkit.sh isimli bir dosyayı yönetici olarak çalıştırabildiğini görüyoruz şimdi gidip dosyanın içeriğini inceleyelim.
2ffn1uy.png

Dosyayı incelediğimizde dosyayı yönetici olarak çalıştırırsak çalıştırdığı nano ve rkhunter'ın da yönetici olarak çalışacağını görüyoruz şimdi gidip nano veya rkhunter ile yetki yükseltme olup olmadığını kontrol etmek için gtfobins adlı siteye bakacağız bu site yetki yükseltme ile ilgili komutların paylaşıldığı bir site içerisinde bir sürü programla ilgili yetki yükseltmeye yarayan kodlar bulabilirsiniz.

8d8knhp.png

Gtfobins'e girdiğimde rkhunter ile ilgili bir şey bulamadım ancak nano ile ilgili bu vardı. Ctrl + R ve Ctrl +X ile komut çalıştırma yerine girildiğinde reset; sh > 1&0 2>&0 yazıldığında yetkimizin root olacağını söylemiş.
Gtfobins: GTFOBins

9cfz6fx.png

Bu şekilde gönderirsek nano aracı açılacaktır.
ep8j1y2.png

Ancak bu hatayı aldık bunun sebebi netcat shellinin stabilitesi ile alakalı bu sebeple aşağıdaki kodu çalıştırmamız gerekiyor.
Kod:
export TERM=xterm
CTRL+Z ile durdurun
stty raw -echo;fg
Burada da iki kere enter tuşuna basın



Bu kod terminalin ortam değişkenini xterm olarak ayarlar.
bzr03e1.png

Yaptığımız değişiklikten sonra tekrar denediğimizde gördüğünüz gibi nano açıldı.
6vcfhng.png

Komutu çalıştırdım artık root olmuş olduk.
t0tcrut.png
Kod:
cd /root
cat root.txt



jzxuemn.png


THM{ba87e0dfe5903adfa6b8b450ad7567bafde87}
hACOou.gif

Konumu okuduğunuz için teşekkür ederim ilk defa ctf çözümüyle ilgili konu yazıyorum o yüzden bazı yerleri gereksiz olarak uzatmış olabilirim kusura bakmayın.
eline sağlık
 
Ü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.