Exploitation Thru OCR

(Jekyll ile falan uğraşmaya üşendiğim için dümdüz yazıyorum. Gözünü kanattıklarımız kusurumuza bakmasın :] )

Cümleten selamlar. Bu yazımda sizlere keşfetmiş olduğum değişik bir mevzudan bahsedeceğim. Bilerek mevzu diyorum çünkü tam olarak yeni bir açık değil.
Not: Benden önce biri bu tarz bişeyler karaladı ise twitter adresimden ulaştırırsanız "keşfetmiş olduğum" ibaresini kaldırayım. Ben biraz araştırdım daha önce birinin bulduğuna dair bir şeye rast gelmedim.

Nedir Bu OCR?

Türkçesi Optik Karakter Tanıma olan OCR herhangi bir belgenin , resimin istenilen dosya tipine dönüştürülmesini sağlayan bir teknolojidir. OCR, sizin verdiğiniz belgedeki görüntüleri işleyerek size yazı halinde bir çıktı veriyor.

Bu teknoloji güvenlikçilerin captcha bypass konusunda vazgeçilmezlerinden biri olsa da çeşitli yerlerde farklı görevler de görebiliyor.

OCR ' i locale kurup incelemek isteyenler için -> https://github.com/thiagoalessio/tesseract-ocr-for-php



Exploitation Thru OCR

Pentest aşamasında OCR tarafından okutulan veri nereye gidiyor tam olarak kestirmek mümkün olmayabilir. Ben localhostumdan atak senaryolarını anlatacağım. Mantığını anladıktan sonra zaten pentest esnasında illa ki gözünüze çarpacaktır :)

Örneğin bir site var. Öğrenciler kitaplarını sayfa sayfa fotoğraf çekiyor. Siteye yüklediğinde sistem resimi yazıya çeviriyor. Yani basit bir OCR kullanımı :)

Şimdi düşünelim. Eğer ki kullanıcıdan aldığı resmi OCR ile okuttuktan sonra ekrana direk olarak bastırırsa XSS açığı meydana gelir. Eğer ekrana bastırmadan direkt olarak bir dosya türüne çevirirse ve bu dosya türü .php , .html , .aspx gibi tehlikeli tiplerden ise sisteme basitçe shell atıp erişebilirsiniz. Böyle anlatınca lafta kalıyor ama önce zihninizde canlandırıp sonra uygulamaya geçmek istedim :)



Yazıda adam zaten vermiş ama ben yine de kod bloğunu buraya koyayım.

Form

PHP Okuma Kısmı





Basit olarak bu şekilde bir test lab hazırladım. Resimi yüklüyorsunuz arkaplanda işliyor ve size text olarak geri döndürüyor. Okuttuğum yazı;

Çıktısı;


Buraya kadar hiçbir sıkıntı yok gayet güzel çalışıyor. Peki ya biz buraya basit bir XSS payload'ı okutursak ne olur? Bi deneyelim.

Okutulan resim;

Çıktı;


Bum :) Basit bir XSS atak senaryosu.

Peki ya daha fazla ne yapılır? Bir oyun şirketi düşünün. Aktivasyon keyi için kendi hash tipleri olsun. Siz bu firmanın oyununu satın aldığınızda sitesine gidip o kısımı fotoğraf çekip okuttuğunuzda hesabınız aktif hale gelsin. Ama bu sefer kullanıcıdan alınan key databasede sorgulansın acaba var mı yok mu diye :) Örnek bir script yazarak onu da göstereyim.

Tekrar tekrar uğraşmayalım diye direk önceki form ekranını kullanıyorum sadece backend kısmında basit bir SQL Sorgusu ile okunan veriyi db'de kontrol ettireceğim.

Form:


BackEnd'i görmek için


Okutulan resim ;




Çıktı;




Bu ve bunun gibi bir sürü atak çeşidi mevcut. Tek yapmanız gereken sistemde alınan veri nerede ve nasıl kontrol ediliyor iyi analiz etmek. Ataklarını ona göre şekillendirir iseniz kesin sonuç elde edeceksinizdir :)

Bu yazıda anlatacaklarım bu kadardı. Eğer ilgi görürse 2. serisinde daha gelişmiş atak senaryolarından bahsedeceğim. Başka bir yazıda görüşmek üzere, hoşçakalın :)