Beacon Session’a sağ tıklayarak -> Interact ile Beacon’un console’una erişebiliriz.Bizim Beacon sessionumuz için bir user interface sunar.
Eriştiğimiz zaman console’a orda göreceğimiz şey bir status bar vardır bizim console (beacon>) ile sessionlarımız arasında orda birkaç bilgi var ;
Hedefin NETBIOS ismini verir (DESKTOP-M9I8HL6)
Username’ni verir. (DotnetGuard)
Beacon Paylaoadı için Session’umuzun çalıştığı PID (Process ID) değerini verir = 6040.
Ve son olarak da ne zaman Beacon’umuzun tasklerini almak için team server’a istek attığını gösterir (16s – hours-saat.)
Console'a yerine öncelikle help yazarsak neler kullanabileceğimizi görebiliriz.
Hemen hemen bütün commandlara tek tek değineceğiz şimdi sırayla beacon ile nasıl etkileşime giriyoruz bunu menu’den nasıl vericez bakalım.
Beacon Menu
Beacon Menu’sune erişmek için Beacon Session’umuza sağ tıklayıp görüntüleyebiliriz.Beacon console’unu açmak gibidir fakat beacon menu’yü de console’un GUI halini düşünebilirsiniz.
Access: Genellikle elimizde bulunan trust materialler ile (hedefin admin hash’i olur , yada krbtgt hashi olur) yetki yükseltmek için bu menu’yu kullanırız.
Explore-> Hedef’in sistemi hakkında bilgileri dışarıya export etmek için kullanılabilir örneğin, Desktop’unu VNC ile görüntülemek istersek yada dosyalarını gezip indirmek istersek , açık portlarını taramak istersek gibi gibi...
Pivoting-> Beacon ile aramızdaki network trafiğini tünellemek istediğimiz zaman bu menude ki toolardan yararlanabiliriz.
Session-> Beacon Session’uile ilgili hatırlayıcı olması için kendimize yada takım arkadaşlarımız için beacon rengini değiştirmek , beacon’dan çıkış yapmak yada silmek için burası kullanılır.
Asynchronous and Interactive Operations
Şimdi burası önemli bir konu değinmek istiyorum , önceden kısaca bahsetmiştik ama üstünden bi geçelim , sizler beacon için task verdiğinizde bu direkt olarak gerçekleşmez default’da beacon gelip taskleri alması 1 dk’dır fakat siz beacon her zaman gelip sizden taskleri indirmesini isterseniz bunu da sleep komutunu kullanarak değiştirebilirsiniz mesela beacon her zaman tasklerini indirsin derseniz :
beacon> sleep 0
(komutunu kullanabilirsiniz) -> interactive communication
Yada beacon her 2 dk da bir gelip tasklerini indirsin derseniz :
beacon> sleep 120s
(yazılabilir) -> asynchronous communication
Yada random olarak bir aralıkta gelmesini isterseniz mesela :
beacon> sleep 200 10
(10 kısım jitter olarak bilinir yani 200’ün yüzde onunu alalım.20 yapar ve bunu 200-20=180 olur yani bizim beacon 180 ile 200 saniye arasında random bir vakitte gelecek mesela 190 yada 183 yada 199 gibi gibi...)
Console da Komut Çalıştıralım
- shell: komutu bizim target’da cmd.exe ile komut çalıştırmamıza yarar.Karşı sistemde temporary olarak cmd.exe processi oluşturur.Örneğin karşı tarafta ipconfig ve whoami komutunu çalıştırmak isteyelim.
- beacon> shell whoami
- beacon> shell ipconfig
Yazarak cmd.exe yoluyla karşıda komut çalıştırabiliriz.Bu sayede çıktıları console’da görüntüleyebiliriz.
- run: bu komut da cmd.exe çalıştırmadan karşıda komut çalıştırmamıza yarar.Yine aynı komutları run ile çalıştıralım bu sefer:
- beacon> run whoami
- beacon> run ipconfig
run ve shell arasında fark vardır.run komutu system32\ altındaki bir uygulama komutu varsa onu çalıştırır.örneğin “run dir” yazarsanız çalışmaz çünkü system32\ altında yoktur böyle bir şey , fakat “shell dir” yazarsanız cmd’den direkt olarak bunu çalıştırır.Isterseniz system32\ altında ipconfig.exe dosyası var onu da kontrol edebilirsiniz.
Run komutunda çalıştırdığımız çıktılar cmd.exe olmadan çalışır ve console’da output’u görüntüleyebiliriz.
- execute: bu komut da üsttekiler gibi komut çalıştırmamıza yarar fakat bu işin backgroundun da çalışır ve bize bir output vermez beacon console’muzda biz bu outputu göremeyiz.Örneğin karşı tarafa bir smb beaconu atıp çalıştırıp link ile bağlantı gerçekleştirebilirsiniz.
- powershell: bu komut ile target sistemde temporary olarak powershell.exe çalıştırıp bir powershell komutu çalıştırabiliriz.
- beacon> powershell whoami
- beacon> powershell ipconfig
- powerpick -> powershell.exe olmadan , Unmanaged powershell kullanarak powershell cmdlets çalıştırmamıza yarar . Default olarak rundll32.exe oluşturur ve onun üzerinden komutlar çalıştırılır.
- psinject –> Unmanaged powershell’i specific bir process’e inject ederek , o process’den sizin cmdlet’lerinizi çalıştıracak.
beacon> psinject <pid> <arch> <komut>
3692 msedge.exe çalıştığı yer ve ben buraya inject ettim bu sayede artık yazdığım komutlar bunun üzerinden gerçekleşecek.
Artık başka bir komut daha çalıştırmak istersek şunu kullanacağız
beacon> psinject 9696 x64 ipconfig
Bütün işlemler conhost.exe üzerinden gerçekleşecek.
- powershell-import -> Beacon içerisinde bir powershell script’i inject etmemize yarar.Daha sonra tabi biz bu scriptten yararlanarak powerpick gibi komutlarımızı çalıştırabiliriz.
- execute-assembly -> .NET executable (.exe) dosyalarımızı çalıştırmak için kullanabiliriz tabi yanına herhangi bir parametre alıyorsa bunu da yazabiliriz.Örneğin bir c# kodumuz olsun ekrana çıktı yazsın sadece.
namespace DotnetguardRecon{
public class Reconner{
static void Main(string[] args){
System.Console.WriteLine("Execute assembly hacked by Dotnetguard.blog");
}
}
}$ csc -out:Reconner.exe execute.csŞimdi reconner.exe'yi ben teamserver'in bulunduğu linux'a atacağım ve ordan çalıştıracağım.
execute-assembly karşıda default olarak rundll32.exe açar ve çalıştırır.
- cd -> bu komut ile directory’mizi değiştrebiliriz.
- pwd -> hangi directory’de olduğumuzu görüntüleyebiliriz.
- setenv -> Herhangi bir environment variable eklemek istediğimizde bu komutttan yararlanırız.