dondraper
Üye
Merhaba herkese, bugün Hacker101 üzerindeki Cody’s First Blog makinesini çözeceğiz. Makine çok zor olmamakla birlikte, web uygulaması üzerindeki fonksiyonların nasıl çalıştıklarını temelde iyi analiz etmek çözüme giden yolu bir hayli kolaylaştıracaktır.
PHP Kod Enjeksiyonu
Admin Authentication
Bypass PHP Dosya Okuma
Web sitesine ilk eriştiğimde beni en başta yukarıdaki gibi bir sayfa karşılıyor. Verilen bilgiye göre ortam PHP ile oluşturulmuş.
Hızlıca kullanılan altyapıyı tespit etmek adına wappalyzer uygulamamı açıyorum ve sayfanın PHP tabanlı olduğunu doğruluyorum. Comment fonksiyonunu test etmek adına bir yorum giriyorum:
Yorum girildikten sonra beni approval sürecine yönlendiriyor, yani yorumun yetkili bir kişi tarafından onaylanması lazım.
Ortamın PHP ile kodlanmasından dolayı belki bir PHP kodu girerek sistem üzerinde bir şeyler tetikleyebilirim diye düşünüyorum ve aşağıdaki kodu giriyorum:
Flag’i verdi ama herhangi çalışan bir şey yok çünkü yorum daha onay mekanizmasından daha geçmedi. Ancak doğru yolda olduğumu düşünerek ilk flag’imi almış oluyorum.
Sayfa kaynağına girip incelediğimde şu şekilde bir yorum olduğunu görüyorum:
Adrese geldiğimde yukarıdaki gibi bir admin login sayfasına erişiyorum. Burada ilk akla gelen SQLi oluyor ancak denemeler fayda etmiyor. page parametresi üzerinde çeşitli denemeler yapıyorum ve buranın aldığı değerin bir dosya ismi olduğunu görüyorum. Yani ben şu an admin.auth.inc dosyasının içindeyim. Bu durum potansiyel bir LFI zafiyetinin olabileceğini aklıma getiriyor.
O zaman bu page parametresine bir fuzzing yapıp acaba içerisinde hangi sayfalar barınıyor görmeyi deniyorum. Bunun için aşağıdaki komutu kullanıyorum.
Çıktılara göz attığımda admin.inc sayfasının olduğunu görüyorum. Yani bulunduğum sayfa olan admin.auth.inc’nin auth’suz hali.
Admin yetkisinin bulunduğu sayfaya yani admin paneline erişmiş oluyorum. Burada da yazdığım yorumun beklemede olduğunu ve onaylayabileceğimi görüyorum. Böylelikle ikinci flag’imi de elde etmiş oldum.
İlk flag’imizi aldığımızda PHP çalıştırarak almıştık. Bu fonksiyonelliği kullanarak acaba web uygulamasının kaynak kodlarına erişebilir miyim diye düşünüyorum. Ardından PHP ile kaynak kodu okumaya dair yukarıdaki gibi komutlar gönderiyorum ancak görüyorum ki admin panelinden onayladığım yorumlar birer yorum satırı olarak düşüyor.
Gönderdiğim kod parçaları çalışmıyor ve bu durum beni farklı çözümler aramaya itiyor. Sistem dışarısı ile iletişim kurmuyor ve local taraftaki dosyalarla iletişimini sürdürüyor olduğundan (page parametresi içerideki dosyaları çekip getiriyor) tekrardan bu çerçevede düşünmem gerektiğini bir kenara not ediyorum.
Yorum satırına enjekte ettiğim PHP kodu üzerinden kaynak kodu okuyamadığım için bu sefer sistemin içine erişimi olan başka bir atak vektörü olan page parametresini tekrardan devreye sokuyorum. İsteği sistemin içerisine yapacağım için localhost üzerinden sayfaya erişmeye deniyorum ve okumak istediğim sayfayı dizin olarak belirtiyorum.
Böylelikle kodları leak etmiş olduk ve üçüncü flag’imizi de aldık.
Okuduğunuz için teşekkürler.
PHP Kod Enjeksiyonu
Admin Authentication
Bypass PHP Dosya Okuma
PHP Kod Enjeksiyonu
Web sitesine ilk eriştiğimde beni en başta yukarıdaki gibi bir sayfa karşılıyor. Verilen bilgiye göre ortam PHP ile oluşturulmuş.
Hızlıca kullanılan altyapıyı tespit etmek adına wappalyzer uygulamamı açıyorum ve sayfanın PHP tabanlı olduğunu doğruluyorum. Comment fonksiyonunu test etmek adına bir yorum giriyorum:
Yorum girildikten sonra beni approval sürecine yönlendiriyor, yani yorumun yetkili bir kişi tarafından onaylanması lazım.
Ortamın PHP ile kodlanmasından dolayı belki bir PHP kodu girerek sistem üzerinde bir şeyler tetikleyebilirim diye düşünüyorum ve aşağıdaki kodu giriyorum:
PHP:
<?PHP
$command = "ls -l";
$output = exec($command);
Flag’i verdi ama herhangi çalışan bir şey yok çünkü yorum daha onay mekanizmasından daha geçmedi. Ancak doğru yolda olduğumu düşünerek ilk flag’imi almış oluyorum.
Admin Authentication Bypass
Sayfa kaynağına girip incelediğimde şu şekilde bir yorum olduğunu görüyorum:
Sonrasında bu adrese erişiyorum:<!--<a href="?page=admin.auth.inc">Admin login</a>-->
Adrese geldiğimde yukarıdaki gibi bir admin login sayfasına erişiyorum. Burada ilk akla gelen SQLi oluyor ancak denemeler fayda etmiyor. page parametresi üzerinde çeşitli denemeler yapıyorum ve buranın aldığı değerin bir dosya ismi olduğunu görüyorum. Yani ben şu an admin.auth.inc dosyasının içindeyim. Bu durum potansiyel bir LFI zafiyetinin olabileceğini aklıma getiriyor.
O zaman bu page parametresine bir fuzzing yapıp acaba içerisinde hangi sayfalar barınıyor görmeyi deniyorum. Bunun için aşağıdaki komutu kullanıyorum.
Burada Kali Linux üzerinde varsayılan olarak bulunan directory-list-2.3-small.txt wordlist’ini kullanarak .PHP ve .inc uzantılı dosyalar arıyorum.ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u https://7cc44d64095fc8e890664351a61c5d77.ctf.hacker101.com/?page=FUZZ -e ".PHP,.inc" -fr "Undefined"
Çıktılara göz attığımda admin.inc sayfasının olduğunu görüyorum. Yani bulunduğum sayfa olan admin.auth.inc’nin auth’suz hali.
Admin yetkisinin bulunduğu sayfaya yani admin paneline erişmiş oluyorum. Burada da yazdığım yorumun beklemede olduğunu ve onaylayabileceğimi görüyorum. Böylelikle ikinci flag’imi de elde etmiş oldum.
PHP Dosya Okuma
PHP:
<?PHP echo file_get_contents('index.PHP') ?>
Gönderdiğim kod parçaları çalışmıyor ve bu durum beni farklı çözümler aramaya itiyor. Sistem dışarısı ile iletişim kurmuyor ve local taraftaki dosyalarla iletişimini sürdürüyor olduğundan (page parametresi içerideki dosyaları çekip getiriyor) tekrardan bu çerçevede düşünmem gerektiğini bir kenara not ediyorum.
Yorum satırına enjekte ettiğim PHP kodu üzerinden kaynak kodu okuyamadığım için bu sefer sistemin içine erişimi olan başka bir atak vektörü olan page parametresini tekrardan devreye sokuyorum. İsteği sistemin içerisine yapacağım için localhost üzerinden sayfaya erişmeye deniyorum ve okumak istediğim sayfayı dizin olarak belirtiyorum.
Belirtimi yaptıktan sonra yukarıdaki gibi bir URL ortaya çıkmış oluyor. Tarayıcıda bu adresi ziyaret ediyorum ve ardından sayfanın kaynak kodunu okuyorum:
Böylelikle kodları leak etmiş olduk ve üçüncü flag’imizi de aldık.
Okuduğunuz için teşekkürler.