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.
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.