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