Sıfırdan Kendi Backdoor Trojanımızı Geliştirelim #1

anonymouserto

Yeni üye
7 Eyl 2023
15
1
Selamlar Değerli TurkHackTeam Üyeleri, hepinize iyi günler dilerim. Bugün yeni bir seriye başlıyorum. Adından da anlaşıldığı gibi, forumda daha önce hiç denk gelmediğim bir konudan bahsedeceğiz: Sıfırdan başlayıp kademe kademe bir Backdoor Trojan oluşturacağız.


Not: Her şeyden önce, bu seri ile sizlere hazır bir ortalama düzey trojan sunmak değil, trojanların çalışma mantığı ve trojan oluşturmak için gerekli temellerin öğretilmesi amaçlanmıştır. Ayrıca bu seri bir çok deneme-yanılma işlemi ile oluşturulmuştur. Bazen bir işlemin sürmesi 5 dakika bile almıştır. Aynı şekilde birinci, ikinde denemede çalışmayan kod üzerinde değişiklik yapılmadığı halde sonraki denemelerde çalışmıştır. Sizlere önerim bu tür bir virüs oluşturacaksanız .NET dillerini kullanmanız, python duruma göre yetersiz veya yavaş olabiliyor.


İlk olarak, hangi dilde kodlama yapacağım hakkında çok fazla bir fikrim yoktu. Bildiğim dillerden C# bu iş için idealdi ancak ben yine de anlatımı daha basit olsun ve zaten iyi bildiğim bir dil olduğu için Pythonu seçtim. Uzun lafın kısası, sizlerle Python kullanarak gelişmiş düzeyde bir virüs oluşturacağız. Tabi bu bir öğretici yazı, yani Tutorial olduğu için pyqt5 gibi kütüphaneleri kullanarak karışık olan işlerimizi iyice karıştırıp arayüzü olan bir virüs yapmak yerine klasik métasploitteki gibi server-reverse_shell şeklinde olan basit mantığı kullanacağız.

Pekala, konu tanımına başlayalım.


xRDuEc.png



Başlıklar:


- Backdoor Trojanların Çalışma Mantığı

- Basitçe Server Oluşturmak

- Reverse Shell ile Servera Bağlanmak

- Backdoor Mantığı ile Küçük Bir Mesajlaşma Uygulaması Yapmak

- Server Üzerinden Karşıdaki Makine Terminalinde Kod Çalıştırma İşlemi


xRDuEc.png


İlk olarak söylemek isterim ki bu öğretici seri için epey bir çalışma yaptım. Bir sürü python kütüphanesini araştırdım ve saatlerce konu ile alakalı yazı okudum ve video izledim. Tüm bu birikimimi sizlere olabildiğince en basit şekilde aktarmaya çalışacağım. Lütfen takıldığınız yerler hakkında soru sormaktan çekinmeyin.


xRDuEc.png



Backdoor Trojanların Çalışma Mantığı


Öncelikle trojanın ne olduğuna bir göz atalım. Trojan virüsü, başka bir dosya gibi görünüp aslında hedefin cihazına sızan bir virüs türüdür. İsmini Homerosun ünlü eseri olan Odysseiada Troyaya girmek için kurnazca içine asker yerleştirilip bir hediye gibi sunulan, ardından gece olunca içinden çıkan askerlerin içten kaleyi fethetmesini sağlayan büyük, ahşap bir at olan Truva atından almıştır.


Truva Virüsü; kurbanın cihazı üzerinde tam yetki sağlama, dosyalarını, resimlerini çalma, anlık görüntü kaydetme, kayıtlı şifreleri çalma ve kredi kartı bilgilerini çalma gibi eylemleri gerçekleştirebilir.


trojan-1.jpeg


Virüsün çalışma mantığı ise temel olarak; önce bir server kurulur, bu servera bağlantı sağlayacak bir reverse_shell kurulur ve reverse_shelli kurbanın çalıştırması gerekir. Başlangıçta da bahsettiğim üzere biz bu olayı 0dan yapacağız ve mantığını daha iyi öğreneceğiz.


xRDuEc.png



Basitçe Server Oluşturmak


Bir server oluşturmak için önce bir yeni pyhton dosyası oluşturalım. Ben server.py adını veriyorum. Server oluşturmak için öncelikle programımıza socket kütüphanesini dahil etmeliyiz.

Bunun için de kodumuza aşağıdaki kısım ile başlıyoruz.


tWGlBx.jpg


Arkadaşlar, ben server panelimizin daha güzel görünmesi için ayriyeten colorama kütüphanesini de kodumuza ekliyorum. Bunu sizin yapmanıza gerek yok.


HjVxWB.jpg


Ardından ise TCP üzerinden bağlantımızı almak için birkaç işlem yapacağız. Burada bazı uzun kodları yazmamak için onları bir değişkene atıyorum. Ben soket isimli değişkeni kullandım. Sonrasında ise bağlantı için gerekli olan kodları yazdım.TCP uygulamaları vebenzeri durumlar için Pythondaki bu kod dizini neredeyse tüm kodlama dillerinde benzer veya aynıdır.


anj33r.jpg


Ardından ise virüsü ben kendi yerel ağımda çalıştıracağım için gerekli socket ve port ayarlarını yapıyorum. Bu ayarları ve daha fazlasını detaylıca web üzerinde bulabilirsiniz.


gwgDfn.jpg

Şimdi ise hangi IP adresi ve hangi port üzerinden kurbanı dinleyeceksek o kısımları belirtmemiz lazım. Aşağıda bunu nasıl yaptığımı görebilirsiniz. Ben kendi local ağımın IP numarasını ve dinlemek istediğim 7171 portunu giriyorum. Burada önemli olan şey; zaten kullanımda olan bir portu dinlemeye almaya çalışmamak.


gdCdJm.jpg


Ardından kaç tane bağlantıyı dinleyeceğimizi seçiyoruz. İster 10 tane bağlantı kurun, ister 1 tane. Ben şu anlık 1 tane kuruyorum ki temelleri anlayalım.


tVxNBh.jpg


Şimdi ise bağlantıyı tam olarak kabul etmek için kurbanı tanımlamak ve bağlantı isteğine açık olmamız lazım. Ben üstüne bir de hangi IP adresinden bağlantı geldiğini öğrenmek için aynı zamanda ip değişkeni de tanımlıyorum.


JY9Mhd.jpg


Şu anlık temel seviyede serverımız kuruldu. Şimdi birkaç ufak dokunuşlar yapalım. Servera herhangi bir bağlantı sağlandığında bize uyarı versin. Ardından ise serverı kapatalım. Aynı şekilde servera birisinin bağlanmasını beklerken de bir mesaj görünsün ekranda ki neyin ne olduğunu bilelim.

Şimdi soracaksınız Neden serverı kapatıyoruz ki? Güzel soru, çünkü şu an daha yapabileceğimiz bir şeyler eklemedik. Boşu boşuna açık durmasına gerek yok. Zaten ilerleyen zamanlarda kapatmayacağız.


ts5sHL.jpg


Şimdi ise serverı çalıştıralım. Çalışıyor mu diye kontrol edelim. Tabi öncesinde chmod +x server.py komutu ile daha rahat şekilde çalıştırabilir hale getirelim. İlk denememde çalışmadı,

#! /usr/bin/env python

# -*- coding: UTF-8 -*-

satırlarını eklemeyi unutmuşum da :D.

Aynı zamanda birkaç ufak yazım hatası yapmışım, çalışan kodun son hali şöyle:


Jw8Gm5.jpg


Ve çalışmış hali de şöyle:


8dGy1u.jpg


Evet, gördüğünüz üzere serverımız çalışıyor. Şimdi ise sırada bağlantı sağlamak için bir reverse shelle ihtiyacımız var.


xRDuEc.png



Reverse Shell ile Servera Bağlanmak


Bu kısımda ise bağlantıyı kurmamızı sağlayacak reverse shellimizi, yani asıl virüs kısmını oluşturacağız. İlk olarak bunun için bir dosya oluşturarak başlıyoruz.


Aynı şekilde başlangıçta socket kütüphanesini import ediyoruz. Ancak normal bir durumda colorama kütüphanesini eklemememiz gerek. Lakin benim virüsü deneyeceğim bilgisayarda colorama kütüphanesi yüklü, bu sebepten bir sıkıntı çıkmaz.


yTJGfq.jpg


Ardından, önceki bölümde TCP bağlantısını sağlamak için kullandığımız satırı yeniden yazıyoruz daha doğrusu kopyala yapıştır yapıyoruz :D-.


xpOCQL.jpg


Sonrasında bu reverse shellin hangi IP adresine hangi port üzerinden bağlantı kuracağını ayarlıyoruz.


KelREn.jpg


Ardından ise işlemi bitiriyoruz. Bahsettiğim gibi, ileride çok fazla bağlantıyı kesmemeye çalışacağız.


VPROF0.jpg


Aynı şekilde kullanım kolaylığı açısından buna da chmod +x trojan.py komutunu uyguluyoruz.

Ardından önce Serverı, sonra da trojanı çalıştırıyoruz.


ozGbYX.jpg


(trojan.py çalıştırılmadı)


B4bI0T.jpg


(trojan.py çalıştırıldı)


Gördüğünüz gibi bağlantımız sağlandı. Pekâlâ, şimdilik virüs mantığı ile çalışan ama virüsten uzak bir gizli mesajlaşma uygulaması yapalım.


xRDuEc.png



Backdoor Mantığı ile Küçük Bir Mesajlaşma Uygulaması Yapmak


Öncelikle, bu programın kodlarını GitHubda verip vermemek konusunda kararsızım. Fakat barizdir ki önemli veya gizli konular konuşulacağı zaman bu program sayesinde birisi ile konuşabilirsiniz. Tek kötü tarafı, biraz aşırı ilkel ve arayüzü olmayan bir mesajlaşma uygulaması olur. Ek olarak, eğer local ağ üzerinden değil de dış ağdan birisi ile iletişime geçiyorsanız üstüne bir de statik IP parası eklenir :).


İlk olarak bu mesajlaşmadaki veri alış-verişini gerçekleştirmemiz lazım. Socket kütüphanesinin bu olayı gerçekleştirmemizi sağlayan modülleri var, bunlar sayesinde programı bir bilgi alışverişi sağlayan duruma getireceğiz.


İlk olarak, isterseniz kurbanın bilgilerini kendi serverımızda yazdırlarım, ardından da raw_input ile yazacağımız mesajı girelim.


y4OwY8.jpg


Çalıştıralım:


WBag1C.jpg


Gördüğünüz gibi, çalıştı ve kurbanın hangi IP adresinden geldiğini yazdı. Ancak, girdiğimiz mesajı diğer terminalde görmedik. Bunun için socketi kullanacağız. Send.mesaj() ile yazdığımız mesajı kurbana gönderebiliriz.


pCyRhr.jpg


Mesajı gönderebiliyoruz şu an ancak karşı tarafta bu mesajı karşılamak için bir komut yok. O yüzden şimdi trojan.pyye bu gönderdiğimiz mesajı alması için gerekli kodları ekliyoruz.

Receive modülünün sonuna kaç byte olarak gelecekse veri, onu giriyoruz. Ardından ise mesajı yazdırıyoruz.


Vik0qM.jpg


Çalıştıralım:


PabjT3.jpg


Evet, mesajımız iletildi ve yazdırıldı. Şu anlık tek taraflı olarak mesaj gönderebiliyoruz. Ancak bunu karşılıklı yapmamız gerek. Bu yüzden de ilk olarak server üzerinden karşı tarafın gönderdiği mesajı almak için gerekli kodları giriyoruz. Buradaki receive kodları, trojan.py dosyası üzerindekiler ile aynı. Sonunu da soket.close() ile kapatalım.


8lhb9g.jpg


Yalnız bir sorunumuz var: Trojanınımız bize mesaj gönderemiyor. Şimdi ise trojan üzerinden mesaj göndermek için gerekli olan kodları halledelim.


BXUQBX.jpg


Pekala, şimdi denemeye hazır.


x0EP3K.jpg


Görüldüğü üzere tek seferlik de olsa bir mesaj alışverişi yaptık. Şimdi bunu asıl kullanışlı hale döngüler ve şart blokları ile getireceğiz.

İlk olarak While döngüsünü kullanıyorum ki tek seferde mesajlaşmamız bitmesin. Gerekli yerleri while döngüsüne alıyoruz.


4ZM8WJ.jpg


Ardından döngümüz sonsuzluğa uzamasın diye çıkış blokları ekliyoruz. Bunun için de If-Else bloklarını kullanıyoruz.


7s3XjB.jpg


Pekala, şimdilik server üzerindeki işlemler tamam. Sırada trojan.py üzerindeki döngü ve şart bloklarını düzenlemek kaldı.


jDpR5L.jpg


Şu an eksiksiz çalışan bir mesajlaşma uygulamamız var elimizde. Ufak birkaç tane hatası olabilir. Biz yine de şu an bu kodları daha kullanıcı dostu ve anlaşılır hale getirelim.


bCdEpA.jpg


88qqUf.jpg


Evet, şimdi daha güzel bir görüntüye sahip olacağımızı umuyorum. Hadi şimdi bakalım uygulamaya.


vEcHLx.jpg


Evet, gayet göründüğü üzere şimdilik gayet güzel çalışıyor. İlerleyen zamanlarda kullanım basitliği olsun diye port ve IP adresini input olarak almaya başlayacağız, o zaman belki bunu yeniden gözden geçiririz.

Neyse, hadi bu bölümün son alt başlığına geçelim.


xRDuEc.png



Server Üzerinden Karşıdaki Makine Terminalinde Kod Çalıştırma İşlemi


E, tamam güzel backdoor mantığını anladık ve kullandık ama virüs olabilmesi için karşı tarafa böyle mesaj göndermek yetmez. Daha ne yapmamız lazım?

Tabiki de en basit şekliyle komut satırı üzerinden karşı cihazda kodları çalıştırabilmemiz lazım. Bu bölümde bunları yapacağız. Haydi başlayalım o zaman.


İlk olarak, bir virüs olarak kullanılabilmesi için programımızda şu ana kadar geliştirdiğimiz mesajlaşma uygulamasındaki bazı kısımları siliyoruz. Aynı şekilde değişkenlerimizi mesaj yerine kod olarak adlandırıyoruz.


YU0YvG.jpg


Aynı şekilde aynı işlemleri server.py dosyasına da uyguluyoruz.


tfeCpH.jpg


Şu anlık trojan.py dosyamız, virüs olarak çalışılmak üzere hazır. Şimdi ise server üzerinden aldığı kodları bulunduğu cihazın shellinde çalıştırması ve çalıştırılan koda gelen cevabı bize göndermesi için gerekli olan kodları giriyoruz. Öncelikle subprocess kütüphanesini import etmemiz lazım tabi. Küçük bir araştırma ile web üzerinden neyin ne işe yaradığını okuyabilirsiniz, ben çok uzatmak istemiyorum.


B0SMmi.jpg


Yazılımlarımız hazır, şimdi deneme yapalım.


wauXen.jpg


Gördüğünüz gibi, bizim serverdan girdiğimiz komut trojan.py üzerinde çalışıyor ve detayları server üzerinde görebiliyoruz. Ayrıca bilerek yazdığımız kodu trojanın üzerinde yazdırdım ki daha anlaşılır dursun. Bundan sonra asıl eğlence başlayacak diyebilirim.


xRDuEc.png


Ancak, şu an çok basit anlamda bir virüsümüz olsa bile bir sürü hata ve sıkıntı ile karşılaşmamız çok olası. Bu yüzden ileriki derslerde önce bugları düzelteceğiz, ardından ise yeni yeni özellikler ekleyeceğiz. Kullanıcının cihazında ayrıcalıklarımızı arttıracağız, ekran resmini alacağız ve belgelerine ulaşacağız. Yani uzun lafın kısası bir sonraki bölümlerde asıl karmaşık olan yerleri halletmeye çalışacağız. Eğer bir aksilik çıkmazsa 2 gün içinde diğer bölümü de yayınlamayı düşünüyorum.


Takıldığınız yerlerde bana sormayı unutmayın.

Beklemede kalın, kendinize dikkat edin.

sa
 

16CaVuS16

Yeni üye
17 Eki 2023
3
0
Eline, emeğine sağlık. Benim gibi acemiler için çok süper olmuş. Uzun süre dönüp dönüp okuyacağım heralde 😂
 
Ü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.