Background Image

BLOG

17 Şubat 2018 CTF

DKHOS - Web 200 - Kırmızım Kandan Bahtım Karadan


Bu soru oldukça kolay olmasına rağmen dikkat gerektiren bir soruydu. Çünkü sorunun farklı noktalarına saplanıldığı zaman, gerçek çözümden çok uzaklaşılabiliyor. Siteye ilk giriş yaptığınızda içerisinde "not found" yazan boş bir sayfa karşılıyordu. Kaynak kodundan asıl pathi bularak  /site/ dizinine geçmemiz gerekiyor.

Bu pathe gittiğimizde de bizi içerisi henüz hazırlanmamış bir blog karşılıyordu. Sayfa içerisinde dinamik olarak çalışan bir tek contact sayfası vardı. Bu sayfa üzerinden sisteme upload yapılabilmekteydi. Ancak bu özellik içerisinde herhangi bir zaafiyet barındırmıyordu. Aynı gerçek hayat senaryolarında olduğu gibi, sistemlerin çok fazla alt modülü vs olabilirken zaafiyeti bulmak zaman ve emek gerektirmektedir. Çoğu yarışmacı upload kısmıyla ilgilense de zaafiyet tamamen farklı bir noktadaydı.

Siteyi birazcık daha dikkatle bakıldığında footer kısmında yer alan aşağıdaki kısmın dikkat çekmesi gerekiyordu. Gene günlük hayatta çok defa karşımıza çıkmış bir olaydan esinlenilmişti. dev isminde bir virtual host sistemde mevcuttu ancak DNS server içerisinde tanımlanması yapılmamıştı. Dolayısıyla gönderdiğimiz HTTP requestleri içerisinde Host headeri ile bu virtual hostu yollayabiliriz veya /etc/hosts dosyasımıza ekleyerek local bir adres çözümlenmesi yapılmasını sağlayabiliriz.

Virtual hostu tespit ettikten sonra bizi klasik bir CTF sorusu beklemekteydi. Zaten parametresi boş olarak /file?name= anasayfa içerisinde yazan pathe gidildiği takdirde, çalışan uygulamanın kaynak kodları da elde edilebilmekteydi. Bundan sonra sadece kaynak kod içerisinde yer alan basit blacklist yaklaşımını geçmek ve bayrağın tutulduğu yeri bulmak gerekiyordu. İpucu olması açısından  get_flag isimli bir fonksiyon konulmuştu ve environment içerisinden FLAG değişkeni okunmaktaydı. Buradan gerçekten flagin değişkenler içerisinde tutulduğu sonucuna ulaşılabilirdi. Linux sistemler içerisindeenvironment değişkenleri  /proc/<pid>/environ altında tutulmaktadır. Blacklistimiz içerisinde  proc kelimesi mevcut olduğu için başka bir yola ihtiyacımız vardır. Bu sorunun benzer çok çözümü olsa da ben /dev/fd/ pathinin /proc/self/fd pathine  symlink atanmış olmasından dolayı  /dev/fd/../environ payloadı ile flagin alınmasını bekliyordum.

Flag değeri environtment içinde yazdığı üzere: DKHOS_{y0u_g0t_m3_pyth0n1st4}