OCR ile captcha güvenlik önleminin atlatılması



Başlıklar
  • OCR ve Tesseract nedir?
  • Linux dağıtımı üzerine tesseract kurulumu
  • Tesseract ile örnek bir resmin metine çevrilmesi
  • Captcha ve oturum(session) yönetimi
  • Örnek uygulamada captchanın atlatılması



Yazıda kullanılan materyaller : https://github.com/tnsk/captcha_bypass/



[+] OCR nedir ?



Türkçe’ye Optik Karakter Tanıma olarak çevirilen OCR, İngilizce “Optical Character Recognition” ifadesinin kısaltmasıdır. Kısaca açıklamak gerekirse herhangi bir belgenin elektronik ortamda taranıp istenilen dosya şekline getirilmesi görevini görmektedir. Tarayıcı(scanner) cihazları, akıllı telefonlar vb. cihazlar aynı mantık ile çalışmaktadır.



[+] Tesseract nedir ?



Tesseract birçok işletim sistemi için geliştirilmiş açık kaynaklı optik karakter tanımlama motorudur.1985 ve 1995 yılları arasında Hewlett-Packard tarafından tescilli olarak geliştirilmiştir. 2005 yılında açık kaynak olarak sunulmuştur. Şuan Google sponsorluğunda geliştirilmektedir.



[+] Linux üzerine tesseract kurulumu



Kurulum için https://code.google.com/p/tesseract-ocr/ bağlantısından indirilip manuel olarak derlenebilir. Eğer Debian veya Ubuntu tabanlı bir dağıtım kullanıyorsanız aşağıdaki gibi kuruluma devam edebilirsiniz.



# sudo apt-get install tesseract-ocr





[+] Tesseract ile örnek bir resmin metin’e çevrilmesi



Örnek olarak gimp aracı ile basit bir png dosyası oluşturulmuştur. Bu örnek png dosyası metine çevirilecektir.
Örnek resim aşağıdaki gibidir.
Adsız.png



Örnek resimde görüldüğü gibi resmin içerisinde Bilgi Guvenligi Akademisi yazmaktadır. Şimdi tesseract kullanarak resim içerisindeki metin, icerik isimli bir dosyaya yazılacaktır.



# tesseract test.png icerik



komutu çalıştırıldığında tesseract test.png dosyasını okuyup icerik.txt dosyasına karakterleri yazmaktadır.
Dosya görüntülendiğinde, resim dosyasında geçen metnin icerik.txt içerisine yazıldığını görmekteyiz.



[+] Captcha ve Oturum yönetimi



Captcha oluşturulduğunda kullanılan programlama dili içerisindeki gd kütüphanesi(vb kütüphaneler) bir değer tanımlar. Bu değeri resim dosyası olarak üretir ve resim dosyasındaki değeri oturuma set eder. Bazen programcıların yaptıkları bir hata, captchanın işlevini yitirmesine sebep olmaktadır. Buna örnek olarak, form içerisinde captcha geçen ve bu formu post etmek için captcha değeri girilen bir sayfa düşünülebilir. Doğrulama sayfası ilgili captcha ile oluşturulan oturumu(session) sadece 1 kere kabul etmek zorundadır. Aksi halde captcha tekrar çağırılana kadar ilk captchanın değeri oturumda geçecektir ve sayfa kontrolü gerçekleştirdiğinde captcha çağırılmadığından her istekte ilk kullanılan captcha geçerli olacaktır.



[+] Örnek uygulamada captchanın atlatılması
Uygulama çalıştırıldığında debug mod olarak koyulmuş bazı püf noktaları yer almaktadır. İstek POST olarak gönderildiğinde oturumun ekrana yazdırıldığını görmekteyiz.
İlk istekte bir önceki captcha değeri ekrana yazılmaktadır.



İlk istek :
İkinci istek :
İkinci istekteki ekran görüntüsünden anlaşıldığı gibi ilk istekteki captcha değeri oturuma atanmıştır. Burada örnek bir fuzzer yazılacaktır. Dil olarak Python tercih edilmiştir. Fuzzer’a başlamadan önce adım adım iş mantığı tekrar gözden geçirilmiştir.
Oturumun hafızada tutabilmesi için cookielib modulü kullanılmıştır. Bir opener oluşturulmuş ve opener’a cookielib eklenmiştir. Captchanın olduğu URL açtırılmış ve captcha değeri oturuma otomatik olarak eklenmiştir. Dönen cevabın body kısmı kir.png olarak kayıt edilmiş ve bu tesseract ile okutulup metin.txt içerisine yazdırılmıştır. Son olarak tekrar metin.txt’yi okutup sayfaya bu değeri captcha parametresine değer olarak verip POST isteği yapılır. Böylece captcha OCR ile atlatılmış olur. İlgili uygulamanın kodları github’da paylaşılmıştır.



NOT: Php dosyası içerisinde ilgilenenler için oturum yönetimi(session management) ile ilgili bir hata bilerek bırakılmıştır. İpucu için yazıdaki captcha kısmı incelenebilir.