浅谈某些网页验证码以及绕过验证

平时上网纵观各式各样的验证码,能起到识别人为操作,避免机器人作用的不到半数。

此前,我已经写过一篇关于验证码识别的文章《无聊入门一下传说中的验证码识别技术》

很多很多验证码都是很水的。他们能起的作用是,

1. 加这个验证码是让查的人不那么急,流量不那么拥挤 (wf同学认为)

2. 加这个验证码的目的可能是让用户有机会停下来确认输入的数据是否正确 (44670同学)

 

案例一

首先,看看广东教育考试院首页的登录验证嘛,我到浏览器是firefox!

我擦,这是什么验证码,居然还分两行显示,教育部门都这么先进了吗?

再看看验证码图片的链接,

看到这个地址我无语了,显示数字5就直接请求地址为5.gif的图片。

这个应该验证码应该不是防机器人爆口令的吧。

 

案例二

接着再看我母校首页的,

这个验证码图片,看上去挺丑的,一块一块的。但是看多几个之后,你会惊奇地发现:

验证码图片里只有数字,而且每个相同的数字竟然都是一张相同的图片!

这也太不负责任了,稍微记录这些字模的图片,然后直接比较一下就破解掉了。

 

案例三

这个是某高校查询考生录取结果的网站入口,

暂且不说这个验证码跟案例2是一样的水,且说如何不使用识别验证码的方式直接提交表单获取结果。

这个方法,可以说是能够成功对付国内超过50%网站的验证码。当然,那些网站不一定是比较水的网站,有可能是很牛B的人也会疏忽犯下这种错误。现在的网页程序员做的验证码,大多数是在请求验证码的时候,使用SESSION来记录验证码的信息。

但是,

这里有一个问题!

就是,有的程序员在提交表单验证了用户输入的正确的验证码后,没有及时清空SESSION里的验证码信息,导致原来的验证码可以被无限地重复利用。举个例子来说,

现在的验证码图片显示的是2552的图片,

然后你输入了正确的数字,提交成功之后,你还可以返回原来的页面,继续提交一次,验证码还是正确的。

这说明,你可以利用这一点,成功地绕过它的验证码,只不过,你需要人工识别第一张验证码,在SESSION没有超时的情况下(一般20分钟无操作则超时),提交无数次的表单。

前几天帮Jessica写一个监控录取专业结果的Python程序,用的就是这一种方法,现在分享一下!

 

参考资料: http://www.puremango.co.uk/2005/11/breaking_captcha_115/

浅谈某些网页验证码以及绕过验证》有17个想法

  1. samhjn

    更重要的,有的程序员没对session为空的情况进行处理,导致不访问验证码页面,直接提交,连输入验证码都不要了。

    回复
  2. princehaku

    还有种利用方式就是他只在请求图片上写session
    然后表单提交的时候又没有清session
    导致结果是:
    比如 验证码是2938
    用工具提交..不让下载那张验证码图片..验证码就永远都是2938..
    穷举就搞定了..
    CMCC的登录页面就是这样..
    囧.

    回复
    1. Xiaoxia 文章作者

      嗯,这个跟案例三不是一样的原理吗?不过要是你用作CMCC登录,那不是挺麻烦的?每次登录还是要输一次验证码?

      回复
  3. 便秘灵

    reCAPTCHA和Google一起挂了,现在能用啥呢?
    经验0:不要搜索类似”php 验证码”之类的关键字,应该搜索”php CAPTCHA”

    回复
  4. yueye

    我想写一个爬虫来自动抓取成绩,但是遇到了一点问题,我查了很多次google,但是都不满意,可以给个联系方式,让我问下你吗?

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据