Çoğu zaman bir etkileşimde kendimi Kali linux saldırı kutumdan güvenliği ihlal edilmiş bir Windows makinesine bir araç veya veri yükü kopyalamaya ihtiyaç duyarken buluyorum. Mükemmel bir örnek olarak, yakın zamanda yapılan bir sızma testinde savunmasız bir ColdFusion sunucusu buldum ve bir CFM web kabuğu yükleyebildim. Çok sınırlı, etkileşimli olmayan bir kabuktu ve saldırı makinemden ters bir Meterpreter ikili dosyası indirip çalıştırmak istedim. Veriyi Veil ile oluşturdum ancak dosyayı basit komutlarla ColdFusion çalıştıran Windows sunucusuna aktarmanın bir yoluna ihtiyacım vardı.
Bu gönderiyi, dosyaları aktarmanın en sevdiğim yolları için bir çeşit “kopya kağıdı” olarak bir araya getiriyorum.
Gösterim amacıyla, tüm bu yöntemleri kullanarak kopyalayacağım dosyanın adı met8888.exe
ve yer almaktadır /root/shells
.
HTTP
Masaüstüne erişiminiz varsa ve bir web tarayıcısı açabiliyorsanız dosyaları HTTP aracılığıyla indirmek oldukça basittir, ancak bunu komut satırı aracılığıyla da yapmak mümkündür.
Sunucuyu Başlatma
Genellikle Kali’den HTTP üzerinden bir dosya sunmanın iki yolu ya Apache aracılığıyla ya da Python HTTP sunucusu aracılığıyladır.
Bir dosyayı Apache üzerinden sunmak için dosyayı kopyalamanız yeterlidir. /var/www/html
ve Apache hizmetini etkinleştirin. Apache, Kali’de varsayılan olarak kuruludur:
Diğer seçenek ise doğrudan kabuk dizininin içinde bir Python web sunucusu başlatmaktır. Bu, Python’un SimpleHTTPServer modülü sayesinde yalnızca tek bir Python satırı gerektirir:
|
|
Varsayılan olarak 8000 numaralı bağlantı noktasında hizmet verir, ancak sonunda bir bağlantı noktası numarası da belirtebilirsiniz.
Bu çalışırken geçerli dizindeki tüm dosyalara HTTP üzerinden erişilebilir. Ctrl-C
işiniz bittiğinde sunucuyu öldürecek.
Dosyaları indirme
Masaüstü erişiminiz varsa şu adrese göz atmanız yeterlidir: http://YOUR-KALI-IP/shell8888.exe
ve dosyayı indirmek için tarayıcıyı kullanın:
Yalnızca komut satırı erişiminiz varsa (örneğin bir kabuk aracılığıyla), yerleşik Windows eşdeğeri olmadığından HTTP yoluyla indirme işlemi biraz daha zordur. curl
veya wget
. En iyi seçenek PowerShell’in WebClient nesnesini kullanmaktır:
|
|
Bunu normal bir Windows komut isteminden de arayabilirsiniz:
Burada özetlenen birkaç yöntem daha var, ancak bunların hiçbirinin yukarıdaki PowerShell pasajı kadar basit olduğunu düşünmüyorum.
FTP’de
Dosyaları aktarmanın başka bir yolu da FTP’dir. Windows’un yerleşik bir FTP istemcisi vardır. C:\Windows\System32\ftp.exe
dolayısıyla bu seçenek neredeyse her zaman işe yarayacaktır.
Sunucuyu Başlatma
Kesinlikle aşağıdaki gibi tam özellikli bir FTP sunucusu kurabilirsiniz: vsftpd
Kali’de ama bunun çoğu zaman abartılı olduğunu düşünüyorum. Dosyaları paylaşmak için aşağı yukarı döndürebileceğim basit, geçici bir FTP sunucusu istiyorum. Bunu yapmanın en iyi iki yolu Python veya Metasploit’tir.
Piton. pytftpd
kütüphane, yukarıdaki HTTP gibi, bir Python FTP sunucusunu tek satırda döndürmenizi sağlar. Varsayılan olarak yüklü olarak gelmez, ancak apt ile yükleyebilirsiniz:
|
|
Artık hizmet vermek istediğiniz dizinden Python modülünü çalıştırmanız yeterli. Hiçbir argüman olmadan bağlantı noktasında çalışır 2121
ve anonim kimlik doğrulamayı kabul eder. Standart bağlantı noktasında dinlemek için:
HTTP üzerinden FTP kullanmanın bir avantajı, dosyaları her iki yönde de aktarabilme yeteneğidir. Anonim kullanıcıya yazma erişimi vermek istiyorsanız -w
bayrak da.
Metasploit. Ayrıca Metasploit’te yerleşik olarak dağıtılması ve yapılandırılması kolay bir yardımcı FTP sunucusu da bulunmaktadır. Şurada yer almaktadır: auxiliary/server/ftp
. Ayarla FTPROOT
paylaşmak ve çalıştırmak istediğiniz dizine exploit
:
Sunucu arka planda çalışacaktır. Onunla öldür jobs -k
Dosyaları indirme
Daha önce de belirtildiği gibi, Windows’un PATH’de yerleşik bir FTP istemcisi vardır. Bir FTP bağlantısı açabilir ve dosyaları doğrudan komut satırından Kali’den indirebilirsiniz. Kullanıcıyla kimlik doğrulama anonymous
ve herhangi bir şifre
FTP komut istemine girip komutlar verebileceğiniz etkileşimli bir kabuğunuz varsa bu harikadır, ancak yalnızca komut enjeksiyonunuz varsa ve bir seferde yalnızca bir komut yayınlayabiliyorsanız o kadar da kullanışlı değildir.
Neyse ki Windows FTP, komutların bir “kodunu” doğrudan komut satırından alabilir. Bunun anlamı, sistemde şunu içeren bir metin dosyamız varsa:
|
|
basitçe koşabiliriz ftp -s:ftp_commands.txt
ve kullanıcı etkileşimi olmadan bir dosya indirebiliriz.
Bu metin dosyası nasıl alınır? Her seferinde bir satırda yankı yapabiliriz:
|
|
Veya hepsini tek bir uzun satırda yapın:
|
|
Her iki durumda da sonunda met8888.exe
Windows ana bilgisayarında.
TFTP
Önemsiz dosya aktarım protokolü, eğer tftp
Sisteme kuruludur. Eskiden Windows XP’de varsayılan olarak yüklenirdi ancak artık Windows’un daha yeni sürümlerinde manuel olarak etkinleştirilmesi gerekiyor. Erişiminiz olan Windows makinesi şuna sahipse: tftp
Ancak istemci yüklendiğinde, dosyaları tek bir komutla almanın gerçekten kolay bir yolunu sağlayabilir.
Sunucuyu Başlatma
Kali yüklü bir TFTP sunucusuyla birlikte gelir, atftpd
basit bir adımla başlatılabilen service atftpd start
. Yine de onu yapılandırırken ve çalıştırırken her zaman çok zorlandım ve nadiren bir hizmet olarak bir TFTP sunucusunu başlatıp çalıştırmaya devam etmem gerekiyor, bu yüzden sadece daha basit olan Metasploit modülünü kullanıyorum.
Metasploit, FTP’de olduğu gibi, bir yardımcı TFTP sunucu modülüne sahiptir. auxiliary/server/tftp
. Aşağıdakiler de dahil olmak üzere modül seçeneklerini ayarlayın: TFTPROOT
hangi dizinin sunulacağını belirler ve OUTPUTPATH
Windows’tan TFTP yüklemelerini de yakalamak istiyorsanız.
Dosyaları İndirme
Yine varsayarsak tftp
yardımcı programı yüklüyse, Windows komut isteminden tek satırlık bir dosya alabilirsiniz. Herhangi bir kimlik doğrulama gerektirmez. Sadece basitçe kullanın -i
bayrak ve GET
aksiyon.
Dosyaları TFTP yoluyla dışarı çıkarmak da basittir. PUT
aksiyon. Metasploit sunucusu bunları kaydeder /tmp
varsayılan olarak
TFTP, kimlik doğrulama gerektirmediği ve her şeyi tek bir komutla gerçekleştirebildiği için dosyaları aktarmanın kullanışlı ve basit bir yoludur.
Dipnot: TFTP’yi Yükleme. Bahsettiğim gibi, TFTP Windows’un yeni sürümlerinde varsayılan olarak bulunmaz. Gerçekten istiyorsanız, TFTP’yi komut satırından etkinleştirebilirsiniz:
İşe yarayabilir ama her zaman “toprakla yaşamayı” ve halihazırda mevcut olan araçları kullanmayı tercih ederim.
KOBİ
Bu aslında bir dosyayı Windows ana bilgisayarına aktarmak için en sevdiğim yöntemdir. SMB, Windows’ta yerleşiktir ve Windows UNC yollarını anladığı için herhangi bir özel komut gerektirmez. Sadece standardı kullanabilirsiniz copy
Ve move
komutları ve SMB, dosya aktarımını sizin için otomatik olarak gerçekleştirir. Daha da iyisi, Windows aslında size izin verecek dosyaları yürütmek UNC yolları aracılığıyla, tek komutla bir yükü indirip çalıştırabileceğiniz anlamına gelir!
Sunucunun Kurulumu
Samba’yı Linux’ta düzgün bir şekilde kurup yapılandırmaya çalışmak bir acıdır. Kimlik doğrulamayı, izinleri vb. yapılandırmanız gerekiyor ve açıkçası sadece bir dosya indirmek istersem bu çok fazla abartılıyor. Şimdi Samba, Windows AD ile güzel bir şekilde çalışacak şekilde yapılandırdığınızda gerçekten harika şeyler yapıyor, ancak çoğu zaman herhangi bir kimlik doğrulamayı kabul eden ve dosyaları sunan veya kabul eden süper basit bir sunucunun çalışır durumda olmasını istiyorum.
Girmek smbserver.py
Impacket projesinin bir parçası. Belki bir gün Impacket’ten bahsetmeden bir blog yazısı yazarım ama o gün bugün değil.
445 numaralı bağlantı noktasında basit bir SMB sunucusu başlatmak için bir paylaşım adı ve paylaşmak istediğiniz yolu belirtmeniz yeterlidir:
|
|
Python betiği sizin için tüm yapılandırmaları halleder, 445’e bağlanır ve her türlü kimlik doğrulamayı kabul eder. Hatta kendisine bağlanan herhangi bir sistem için hash edilmiş meydan okuma yanıtlarının çıktısını bile alacaktır.
Tek satırda, çalışır durumda olan bir KOBİ paylaşımımız var. İle onaylayabilirsiniz smbclient
Linux’tan:
Veya ile net view
Windows’tan:
Dosyaları Kopyalamak
Windows UNC yollarını yönettiğinden, yalnızca ROPNOP
sanki Windows’tan yerel bir klasörmüş gibi paylaşın. Gibi temel Windows dosya komutları dir
, copy
, move
vb. hepsi işe yarıyor:
Çıktısına bakarsanız smbserver.py
Paylaşıma her eriştiğimizde, mevcut Windows kullanıcısından NetNTLMv2 karmasının çıktısını aldığını görebilirsiniz. Bunları John veya Hashcat’e besleyebilir ve isterseniz kırabilirsiniz (Sisteme yükselip Mimikatz’dan alamayacağınızı varsayarak)
Dosyaları SMB’den yürütme. Windows’un UNC yollarını işleme şekli nedeniyle, ikili dosyamızı ilk önce kopyalamaya bile gerek kalmadan doğrudan SMB paylaşımından yürütmek mümkündür. Yürütülebilir dosyayı zaten yerelmiş gibi çalıştırın; yük etkinleşecektir:
Bu, karşılaştığım başka bir ColdFusion istismarı sırasında inanılmaz derecede faydalı oldu. Korumasız bir ColdFusion yönetici paneline erişim kazandıktan sonra, bir test başarısız olduğunda tetiklenecek bir “sistem araştırması” yapılandırabildim. Bir programı başarısızlık eylemi olarak yürütmeme izin verdi ve Kali makinemde barındırılan Meterpreter yükünü yürütmek için UNC yolunu kullandım:
Araştırma başarısız olduğunda, ColdFusion SMB paylaşımıma bağlandı ve yükü yürüttü; ben de kapanıp çalışıyordum.
Özet
İyi bir pentester’ın “toprakla geçinmesi” ve dosyaları aktarmanın birkaç farklı yolunu bilmesi gerekir. Bırakın GUI’yi, etkileşimli bir kabuğa her zaman güvenemezsiniz; bu nedenle, yükleri aktarmak ve yürütmek için farklı komutları ve teknikleri anlamak çok önemlidir.
Dört farklı protokol kullanarak birkaç farklı tekniğin ana hatlarını çizdim:
Kullanımları hedefte nelerin mevcut olduğuna ve ağda nelere izin verildiğine bağlıdır.
Umarım bu yazı birine yardımcı olur ve bir tür “hile” görevi görebilir. En sevdiğiniz tekniklerden herhangi birini kaçırırsam bana bildirin!
-ropnop