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.