带简易验证码网站自动注册及登录(勿转)

目标网站:www.k780.com
语言:python
任务:自动注册并登录网站爬取用户信息

1、分析post包
http://www.k780.com/?q=account&type=register。由于此网站注册时不需要验证邮箱,所以只需要伪造post包骗过服务器即可完成注册。
抓取浏览器注册时的post内容,header部分用于模拟浏览器请求,body部分用于填写表单。

header:
POST /?q=account&type=register HTTP/1.1\r\n
Host: www.k780.com\r\n
Connection: keep-alive\r\n
Content-Length: 129\r\n
Cache-Control: max-age=0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n
Origin: http://www.k780.com\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36\r\n
Content-Type: application/x-www-form-urlencoded\r\n
DNT: 1\r\n
Referer: http://www.k780.com/?q=account&type=register\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4,zh-TW;q=0.2\r\n
Cookie: PHPSESSID=adgnskgi1kf46khlqce6614u42; AJSTAT_ok_pages=3; AJSTAT_ok_times=5\r\n

body:
usernm=xlltest5&passwd=12345&passwd1=12345&email=terwtwe%40qq.com&authcode=4461&register=%E9%A9%AC%E4%B8%8A%E6%B3%A8%E5%86%8C

header中其他字段在每次请求的时候都不会发生变化,在手动发送post包时照抄即可,而cookie值得我们注意,与网站的验证码机制有关。
body中usernm,passed,passwd1,email字段也都显而易见,在注册时随机生成,保证并没有被使用过即可。authcode字段代表验证码。register字段在此情况内并不会改变,照抄。因此,如何我们填写上正确的authcode就可以完成注册。那么服务器是如何识别post包内填的验证码是否正确呢?

传统的验证码识别机制有两种:1、cookie。2、session
cookie:浏览器在请求注册页面时,服务器会直接将验证码值存入cookie内,待浏览器post时验证body内验证码和cookie的值是否相等。这样子的弊端就是用户可以直接通过分析cookie内的值来反导出验证码值。
session:如果浏览器是第一次访问网页,那么服务器在发现无cookie的浏览器请求验证码时,会首先发一同发送set-session给浏览器,这时浏览器cookie就拥有一个session id了,并在请求网页时带上此cookie。。与此同时,服务器开辟一块以session id标识的空间,存储验证码值。浏览器post后,服务器将body内的值与相对应的session id内的值比对。如果浏览器重新刷新了验证码,服务端也会将刷新后的值替换掉之前的值,存在session id对于的空间中。如果浏览器已经含有cookie,则session id并不会改变,服务器也会在原先的session id处存取验证码值。这样子的好处是验证码存储在服务器内,不会被破解。

分析这个网页,显而易见是session模式。破解这种模式的关键是保证session一致性。整个过程对客户端来说有两份cookie,请求验证码图片时get头中的cookie,以及提交表单,post头中的cookie。保证这两次所带的cookie中session值一致,那么我们所需要破解的验证码便与浏览器所需要验证的验证码一致了,破解才有意义。于是我们有两种方法,1、伪装成已经有session id,copy一份浏览器中的session值并在get验证码图片以及post表单时带上此session。2、伪装成没有session id,不带cookie请求验证码图片,抓取响应头中set-session值,并在post时带上此cookie。

但实际上这种验证机制有个bug,就是服务器端并没有验证session id是服务器自己生成的还是用户自己瞎编的机制,所以伪造session便十分简单,直接随机生成一个字符串,保证get验证码图片和post表单时请求头”Cookie: PHPSESSID=*”一致。

明白这些之后剩下的就是破解验证码了。

2、破解验证码
对于简单的验证码图片破解有两种方式,1、PyTess库 2、自制字库识别。这里采用方法2。

方法2需要安装PIL库

1).所有的验证码都是数字,我们先下载10份验证码。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#下载样本图片
import urllib
for i in range(10):
    url = 'http://vip.k780.com:88/?app=img.set_authcode' #验证码的地址
    print "download", i
    file("./pic/%04d.gif" % i, "wb").write(urllib.urlopen(url).
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值