Captchasec ile Captcha Güvenlik Testi

Captchasec ile Captcha Güvenlik Testi

Merhaba

Son zamanlarda gerçekleştirdiğim güvenlik testlerinin bir çoğunda captcha mekanizmaları ile ilgili talepler karşıma çıkmakta. Gelen taleplerin arasında da en çok sorulan soru şu ki ; “Captcha’mız kırılabiliyor mu ? ”

Bu soruya doğrudan cevap vermek mümkün değil. Özellikle OWASP v4 checklist’te ki bazı adımları doğrulamak gerekmekte. Bu adımlardan bir taneside captcha olarak sorulan resmin otomatize yazılımlar ( OCR )  ile çözümlenebilme oranı ile ilgili. Her testte tek tek bu hesaplamayı yapmaktan usandım ve işi otomatize etmeye karar verdim.  Böylece captchasec doğmuş oldu.

Captchasec nedir ?

Başlarda kendi işlerimi yapmak adına geliştirdiğim bu küçük bir python uygulaması.

Belirttiğiniz dizinde ki dosyaların içerisinde resim olanları seçip de-captcher.com OCR sunucusuna gönderip image to text işlemi yapmakta. Ardından HTML başta olmak üzere JSON, CSV formatında rapor oluşturmaktadır.

Kurulumu oldukça kolaydır.

git clone git@github.com:mmetince/captchasec.git
cd captchasec
python setup.py install

Adımlarının uygulanması ile kurulum tamamlanabilir. Klasik bir pentester komut satırı aracı olan captchasec’in kullanımıda oldukça basittir.

➜  ~  captchasec -h
usage: captchasec [-h] -u USERNAME -p PASSWORD -d DIRECTORY
                  [-o {html,json,csv}]

Command line tool for testing captcha..

optional arguments:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        Set username of de-captcher.com
  -p PASSWORD, --password PASSWORD
                        Set password of de-captcher.com
  -d DIRECTORY, --directory DIRECTORY
                        Set directory that includes captcha images
  -o {html,json,csv}, --output {html,json,csv}
                        Specify report format.

PTT’nin kargo sorgulama sayfasında bulunan captcha’dan 20 adet örnek alıp captchasec ile test ettiğimizde ise sonuç aşağıdaki gibidir.

➜  ~  captchasec -u mmetince -p 687226 -d /tmp/ptt/
Your current account balance = 9.848000000
Determining of jpeg files from given directory...
Total number of jpeg = 20
Sending /tmp/ptt/1. image to api...
Yay! Cracked in 7.196321 second..! Answer is = 825b3
Sending /tmp/ptt/10. image to api...
Yay! Cracked in 15.235815 second..! Answer is = mrv6n
Sending /tmp/ptt/11. image to api...
Yay! Cracked in 13.220645 second..! Answer is = vh32j
Sending /tmp/ptt/12. image to api...
Yay! Cracked in 5.227966 second..! Answer is = ggz8k
Sending /tmp/ptt/13. image to api...
Yay! Cracked in 3.146601 second..! Answer is = 8xk34
Sending /tmp/ptt/14. image to api...
Yay! Cracked in 10.163727 second..! Answer is = 2nd3w
Sending /tmp/ptt/15. image to api...
Yay! Cracked in 7.188108 second..! Answer is = 46rgd
Sending /tmp/ptt/16. image to api...
Yay! Cracked in 8.175217 second..! Answer is = x76xy
Sending /tmp/ptt/17. image to api...
Yay! Cracked in 2.163303 second..! Answer is = 
Sending /tmp/ptt/18. image to api...
Yay! Cracked in 8.165439 second..! Answer is = 5h6mr
Sending /tmp/ptt/19. image to api...
Yay! Cracked in 5.157223 second..! Answer is = t82pc
Sending /tmp/ptt/2. image to api...
Yay! Cracked in 16.233299 second..! Answer is = nvg5y
Sending /tmp/ptt/20. image to api...
Yay! Cracked in 5.194488 second..! Answer is = 8wfd3
Sending /tmp/ptt/3. image to api...
Yay! Cracked in 4.234764 second..! Answer is = sfs9d
Sending /tmp/ptt/4. image to api...
Yay! Cracked in 13.203672 second..! Answer is = cms67
Sending /tmp/ptt/5. image to api...
Yay! Cracked in 12.225136 second..! Answer is = h3g4j
Sending /tmp/ptt/6. image to api...
Yay! Cracked in 6.161707 second..! Answer is = 58vd6
Sending /tmp/ptt/7. image to api...
Yay! Cracked in 16.198338 second..! Answer is = 78c2j
Sending /tmp/ptt/8. image to api...
Yay! Cracked in 7.174163 second..! Answer is = 238z4
Sending /tmp/ptt/9. image to api...
Yay! Cracked in 17.220729 second..! Answer is = k3dgv
Results are saved into result_02-16-15-09:59:42.html

Oluşturduğu HTML raporu ise oldukça basit ve dinamik şekilde graph oluşturmaktadır. Eğer image to text işlemi sonucunda yanlış bir çözüm oluşturulmuş ise is solved ? maddesindeki tick’i kaldırarak graph’ta anlık hesaplamayı etkileyebilirsiniz.

captchasec

 

Neler eksik ?

Şimdilik eksik olan özellikler ve iyileştirilmesi gereken yanları aşağıdaki gibidir. Opensource’a destek olmak adına bu ihtiyaçlardan birini çözüp PR gönderebilirsiniz.

  • Error handling
  • Custom OCR server
  • Fetch captcha images from url.

https://github.com/mmetince/captchasec