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

Dolyetyus

Co Admin
21 Nis 2020
1,207
670
Delft
Hepinize tekrardan merhabalar TurkHackTeam üyeleri,
Bugün, “Sıfırdan Kendi Backdoor Trojanımızı Geliştirelim” serimizin üçüncü bölümünü anlatacağım. Bu bölüm, serinin önceki iki bölümüne göre daha kolay diyebilirim. Zaten bol bol kullanılan kütüphaneleri kullanıp, bilindik işlemlere yer vereceğiz.

Şu ana kadar virüs yapımımız iyi gitti denebilir. Hatta bu bölümü yazmaya, ikinci bölümden tam 2 gün sonra başladım ve bu süre boyunca her bilgisayarı kapayıp açtığımda görev yöneticisinde trojan.exe programını görmek beni biraz heyecanlandırdı :). Aşağıda da görebilirsiniz zaten.

ubh1rY.jpg


Regedit’e eklenen key sayesinde yeterli kalıcılık sağladığımızı düşünüyorum. Neyse, bu bölümde biraz daha işe yarar, casusluk kısmı da diyebileceğimiz kısımla ilgileneceğiz. Hadi bir başlıklara göz atalım.

xRDuEc.png


Konu Başlıkları:

- Dizin Değiştirmek
- Cihazdan Dosya Almak Ve Göndermek
- İnternetten Dosya İndirmek
- Trojan İle Programları Çalıştırmak Ve Bug’ları Düzeltmek


xRDuEc.png


Dizin Değiştirmek

Virüsümüzü nereye atıp, çalıştırırsak yetkilerimiz sadece o konum içinde geçerli olur. Ben virüsü masaüstümde başlattığım için masaüstü dışına çıkamam. Cd komutu ve whoami komutları ile göstereyim hatta.

pghIL8.jpg


Games isimli bu klasöre girmeye çalışacağım.

mczMao.jpg


Yukarıda da görebildiğiniz üzere Games klasörümüze giremedik. Şimdi ilk yapacağımız iş reverse shell’imize bu özelliği eklemek.

Bu yeni özelliğimizi kabuk fonksiyonu içine ekleyeceğiz. Normalde iki tane seçeneğimiz vardı: 0 ile çıkış yapmak ve normal bir string komut yazarak karşı makinede çalıştırmak. Şimdi onların arasına else if kullanarak yeni bir komut eklememiz lazım.

2CpBTf.jpg


Pekâlâ, şimdi cd komutunun kullanımına bir göz atmamız gerek. Cd komutumuzu çalıştırırken cd x\y\z şeklinde komutumuzu giriyoruz. Yani asıl gitmek istediğimiz yol, “cd “ kısmından sonra. Bu yüzden komutumuzun sadece başındaki cd kısmını kod olarak kabul etmemiz gerek, devamını değil. Yoksa sadece tek bir dizine gitme hakkımız olur. Bunun için de sadece cd kısmını yazınca elif kısmını çalıştıracak kodu giriyorum. 3 karakteri alacak kod yani.

vIK7uL.jpg


Aynı zamanda programımızın çökmemesi için, girilen kodun 2 karakterden uzun olması gerek. Bunun için gereken şartı da and bloğu ile ekliyorum.

Dopdbx.jpg


Ardından ise cd komudumuz ile istediğimiz dizine gitmemizi sağlayacak kod dizinini ekliyorum. Bunun için os kütüphanesi lazım, ki zaten önceki derste dahil etmiştik bu kütüphaneyi.

utVX8U.jpg


Kodumuzun 3. karakterinden sonraki kısmı, yani belirttiğimiz dizini koda verdik. Ancak istediğimiz dizin yoksa veya yanlış yazdıysak programımız çökmesin diye bu kodları try-except blokları içine alıyorum.

bGlOIg.jpg


Böylelikle olası bir durumda while döngümüz devam edecek.

Şimdi bu kodları server’ımıza da eklememiz gerekiyor. O yüzden gerekli kodları server’a ekleyelim.

46yga1.jpg


Bu kısımdaki işimiz bitti. Virüsümüzü executable yapalım ve dizin değiştirme işlemimizi deneyelim.

4CL6ug.jpg


Mkdir ile masaüstümüze bir yeni klasör oluşturduk. Ardından cd komutu ile klasörün içine girdik.

FlIsIH.jpg


Şimdi ise klasörün içinde doliatius.txt isimli bir metin belgesi oluşturduk. İçine de selamlar THT metnini yazdık. Kontrol edelim.

hYc2Dz.jpg


Gördüğümüz gibi çalışıyor. Normalde “dir” komutu ile de kontrol edebilirdik ama ne yazık ki çalışmıyor hiçbir şekilde, uzun uzun araştırdım, denedim ama eksiksiz ve düzgün çalışmıyor şu anlık bu komut.

Bir sonraki bölüme geldi sıra.

xRDuEc.png


Cihazdan Dosya Almak Ve Göndermek

Gayet önemli bir konu şahsimce. Kurbanımızın cihazından kendi cihazımıza veri aktarımı olmazsa olmazlardan birisi. Aynı şekilde kendi cihazımızdan karşıya da dosya gönderimi yapabilmek lazım. Bu kısımda bu işlemlere değineceğiz.

İlk olarak dosya aktarım işlemleri sırasında encode/decode işlemleri kullanacağımızdan dolayı base64 kütüphanemizi projemize dahil edelim. Her iki python dosyamızda da kullanacağız bu kütüphaneyi.

SDhszo.jpg


Ardından indirme komutumuz için gerekli olan else if bloğunu ayarlayalım.

Q34KHI.jpg


Burada yaptığımız şey, cd komutunda yaptığımızın aynısı. Şimdi ise dosya aktarım işlemleri için gereken kodlara başlayalım, daha doğrusu şimdilik karşı cihazdan dosya almak için gerekli olan kodlar.

dEXrF9.jpg


Buradaki “wb” kısmı write bytes, yani byte’ları yaz anlamındadır. Aynı şekilde dosyayı gönderirken de “rd” read bytes, yani bytlerı oku anlamına gelen parametreyi kullanacağız.

Şimdi ise programımızın çökmemesi için base64 ile şifreleme kullanacağız.

lsxmVP.jpg


Base64 kütüphanemizde decode işlemi böyle yapılıyor. Peki, daha ortada encode edilmiş bir şey yoksa niye decode ediyoruz? Güzel soru, şimdi zaten trojan.py programımıza geçip ona da indir kısmını ekleyip, orada dosyayı encode’layacağız.
Aynı şekilde buraya da base64 kütüphanemizi ekleyelim.

4FwwHd.jpg


Ardından server üzerinde yaptığımız işlemleri, buraya düzenleyerek yazıyoruz.

o9VvQG.jpg


Dosya karşılama işlemi için gereken kodlar tamam, şimdi sıra test etmeye geldi.

Aynı şekilde executable yapıp deneyelim Windows makinemiz üzerinde.

ME4sBp.jpg


Şimdi masaüstümüzde tht.png isimli bir resim var, bunu kendi virüsümüz üzerinden Kali Linux makinemize indireceğiz.

B18tEk.jpg


KRtBvD.jpg


Görüldüğü üzere şu an bu resim bizim server’ımızın yer aldığı konumda. İşlem biraz yavaş gerçekleşti, tahminimce python dili ve internet şebekem ile alakalı.

Her neyse, dosya aldık. Şimdi karşıya dosya gönderme işlemini deneyelim. Bunun için aynı yaptığımız işlemin tersini de yapabiliriz ancak ben onun yerine farklı bir kod dizisi kullanacağım. Amacım işlevsellikten ziyade zaten nasıl çalıştığı bu yazılımların.

Pekâlâ, şimdi ilk olarak servera kodlarımızı girelim.

5ubPTC.jpg


Elif bloğunu oluşturduğumuza göre altını doldurma vakti.

NvERMv.jpg


Kısaca açıklamak gerekirse, önceki işlemin neredeyse aynısı. Sadece json kütüphanesini kullanmak yerine biraz daha döngüye başvurup dosyayı açtık, okuduk ve gönderdik. Bu arada encode işlemine gerek yok. Bu kısımdaki kodlar için en az 4-5 saat kafa yormuşumdur. Milyon deneme yanılma ile çalıştırmayı başardım :D.

Gerekli kodları şimdi trojan.py programımız için uygulayalım.

879W5E.jpg


Burada da server üzerinden gönderilen datayı önce bir dosya açtık, ardından da bu dosyaya yazdırdık. Bu kısımda sadece birkaç tane ufak format hatası olabiliyor bazen. Onun haricinde tek seferlik durumda eksiksiz çalışıyor.

Ayrıca belki fark etmiş olabilirsiniz ki 7171 portu yerine 7575 portunu kullanıyorum şu an. Epey deneme-yanılma ve bug onarımı hakkında çalıştığım için birkaç port hatası yaşadım.

Neyse, şimdi alttaki resimde de görebildiğiniz gibi forumda bu konuyu yazarken kullandığım profil resmini server üzerinden Windows bilgisayara göndereceğim.

zKRMSk.jpg


H9Tygi.jpg


Pekâlâ, şu anlık dosya uzantımız olmadığı için önizlemesi yok. Ancak dosyayı açmak için program seçince gayet gözüküyor resmimiz.

4InxPx.jpg


Evet, bu kısımdaki işimiz şimdilik bitti. Tabi virüsümüzü geliştirmek adına son bölümde buraya tekrardan değineceğiz. Şimdi bir sonraki bölüme geçelim.

xRDuEc.png


İnternetten Dosya İndirmek

Bu bölümde benim için daha güzel ve kullanışlı olan bir kısma değineceğiz: İnternetten dosya indirmek. Bu işlemimiz için python’da zaten bulunmayıp sonradan indirilmesi gereken requests kütüphanesini kullanacağız. İnternetten url kullanarak resim, video veya müzik indirmek zaten pyhton kullanıcılarının ilk öğrendiği şeylerden birisi olabilir, daha doğrusu requests kütüphanesinin kullanımını çoğu kişi biliyordur.

Bu özelliği eklemek için öncelikle requests kütüphanesini indirmek gerekli.

qgkl6H.jpg


Kurulumu zaten ben daha önceden yapmıştım ancak sizlere göstermek için yeniden yaptım.

Requests kütüphanemizi trojan.py’ye ekleyeceğiz.

f1ShBr.jpg


Ardından indirme işlemi için bir fonksiyon ekleyelim dosyamıza.

C9C0ei.jpg


Şimdi ise fonksiyon içinde gerçekleşen işlemde verilen URL’deki dosyayı indirip bilgisayara kaydedilsin.

gtdJ0q.jpg


Şimdi indirilen dosyamızın ismi ne olsun kısmına geçtik. Burada istediğiniz şekilde adlandırma yapabilirsiniz ancak dosyanın, url sonundaki isim ile kaydedilmesini istiyorum.
Örnek olarak: https://tht.com/doliatiusprofilresmi.png url’sine sahip bir dosyanın sadece son kısmını alalım. Yani doliatiusprofilresmi.png olarak cihaza kaydedilsin.

51C3JF.jpg


Burada url adresimizinin içerdiği her “/” karakterine göre böldük. En son kısmını da dosyaismi olarak aldık.
Şimdi ise az önceki kısımlarda da yaptığımız gibi yazdırma kısmını ekleyelim.

Qtq7hs.jpg


Alınan kodlar bölümüne de indirme komutumuzu webindir ismi ile ekleyelim ki bir önceki indir ile karışmasın. Aynı şekilde eğer dosya indirildiyse bize tekrardan bir bildirim göndersin ki indirildiğini anlayalım.

NrAg03.jpg


Trojan.py kısmında işimiz tamam, şimdi sırada server’ımız üzerinde else if bloğu kullanarak url’den indirme işlemini gerçekleştirmek var.
Aynı önceki eklemelerde olduğu gibi buraya da aynı şekilde bir blok ekliyoruz.

rbg63T.jpg


Pekala, programımızı çalıştırmadan önce indirmek için bir dosya bulalım. Tht’de dolanırken bu resme denk geldim.
https://www.turkhackteam.org/customavatars/avatar817848_1.gif. Şimdi bu resmi indirmeye çalışacağız.

OStP9r.jpg


Güzel, evet görebildiğiniz gibi internetten bu resmi indirmeyi başardık. İnternetten dosya indirme işlemi ile alakalı bölümümüz de şu an sona erdi. Geçelim bakalım son bölüme.

xRDuEc.png


Trojan İle Programları Çalıştırmak Ve Bug’ları Düzeltmek

Burada ilk olarak söylemek istediğim şey; ilk bölümün başında da bahsettiğim gibi, bu seriyi hazırlarken elinize direkten bir trojan backdoor vermek gibi bir amacım yoktu. Sadece normal python işlemlerini kullanarak nasıl Trojan olarak adlandırılan virüs yazılımından oluşturursunuz kısmı ile ilgilendim. Amacım trojan backdoor’ların çalışma mantıklarını göstermek olduğum için konularıma eklediğim fotoğrafları hazırladıktan sonra virüsü çalıştırınca birkaç ufak hata olduğu için geri kodlardaki hataları düzelttim. En basitinden, bir önceki bölümde reverse shell’imizin içindeki webindir fonksiyonunun parantez içine url değişkenini almayı unuttuğum birkaç işlem sonrası geldi ve onu ekledim. Lakin belirttiğim gibi zaten uzun süren bu seriyi hazırlarken iyice o fotoğraf karmaşasına girmeyeyim diye sonradan düzeltmedim. An itibari ile international tim başta olmak üzere genelde yoğunum ve o yüzden en az karışıklık ile bu seriyi yapma kararı almıştım.

Ancak zaten yukarıda örnekteki gibi düzelttiğim bazı hataları bir sonraki fotoğraflarda çalışır şekilde görebilirsiniz. Sadece bazı durumlarda saatlerce küçük, 2-3 satır kod için saatler harcıyorum, o durumlarda biraz aklınız karışmış olabilir. Bu yüzden soru sormaktan çekinmeyin. Elimden geldiğince yardımcı olurum.

Neyse, şimdi asıl son bölüme geçelim. İlk olarak düzeltmek istediğim ve bug’a sebebiyet verecek kısımları düzeltelim.

İsterseniz olası durumlarda sorun yaşamamak için gerekli yerlere try-except blokları koyalım. İndir ve yükle seçeneklerine server üzerinde basitçe try-else bloklarını koyuyorum.

lDyzIt.jpg


Böylelikle server üzerinde bilgisayarda olmayan bir dosyayı indirmeye çalıştığımızda program donup kalmayacak. Aynı şekilde işlem bizim bilgisayarda olmayan bir dosyayı karşı tarafa atmaya çalıştığımızda da yaşanmayacak.

Ardından reverse shell’imiz üzerinde birkaç oynama yapalım.

YVefMu.jpg


Şu anlık her bloğumuzda try-except var. Fakat burada ayarlamak istediğim bir şey daha var, yükle seçeneğini şu anlık sadece bir kere kullanabiliyoruz. Bunu istediğimiz kadar dosyaya çıkarmak için basit ama etkili yeni bir kod dizisi daha ekliyorum.

tAfKVM.jpg


Böylelikle 0’dan başlayarak her indirilen dosyada dosyanın adı 1,2,3,4… diye gidecek.

Ve buradaki son değineceğimiz bug ise, server üzerinden start x yazarak x.exe programını başlatabiliyoruz.

3C0SQX.jpg


Ancak notepad veya hangi x uygulamasını açtıysak açalım, o program kapatılana kadar server üzerinden virüse erişimimiz olmuyor.
Şimdi notepad’i kapatıyorum ve yazdığımız kodlar yeniden çalışıyor.

tgQ2ZK.jpg


Uzun lafın kısası, bu bölümde son olarak bu hatayı düzelteceğiz ve ardından serimizin 3. Bölümünü bitireceğiz.

Şimdi ilk olarak trojan’ımıza girelim. Orada yeni bir elif bloğu kullanarak bu işlemde oluşacak hatayı düzeltelim.

hRMZRb.jpg


Programı açtırıyoruz, ardından ise işlem başarıldı olduysa bize bildirim gönderecek. Tabi ne olur ne olmaz, yazım yanlışı gibi durumlarda program çökmesin diye bir try-except bloğu da ekleyelim.

sujrPu.jpg


Bu kısımdaki işimiz bitti. Dürüst olmak gerekirse bu komut için server üzerinde bir blok oluşturmak gerekli değil. Soracaklar olabilir; “E o zaman neden webindir için server üzerinde blok oluşturdun?” Güzel soru, canım istedi çünkü :D. Neden olmasın?

Neyse, şimdi sırada çalıştırıp kontrol etmek var.

Pgs4VW.jpg


Görüldüğü üzere neredeyse masaüstüm gözükmez oldu. Böylelikle en basit olarak birisini şakalayabilirsiniz.

xRDuEc.png


Evet değerli THT ailesi, bu bölümün de sonuna gelmiş bulunmaktayım. Sorularınız için benimle iletişime geçebilirsiniz. Ayrıca yavaş yavaş serinin sonuna geliyoruz, çoğu ihtimalle vaktim olursa 5 bölümde bitiririm gibi seriyi. Bir sonraki bölümde biraz daha crypter konularına girerim diye düşünüyorum. Ayrıca belki birkaç güzel özellik daha eklerim python 2 için gerekli algoritma ve kodları halledersem.

Hepinize iyi günler dilerim, bir sonraki bölüme kadar beklemede kalın.
 
Ü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.