黑板课爬虫闯关第三关

来源:互联网 发布:御龙在天淘宝商城 编辑:程序博客网 时间:2024/04/28 23:34

前面两关算是比较容易,第三关就有些难度了,因为还需要有web方面的知识才能想到方法。第二关结束后,点击下一关,出来以下页面:

这里写图片描述

乍一看还以为进错了,先不管,注册登录再说。登录后才进入这个页面:

这里写图片描述

题目说比上一关多了两层保护,我们可以看到顶部有个注销按钮,也就是说首先要先登录才能继续做题。根据我那薄弱的web知识,当时第一想法就是:第一,通过增加header伪装浏览器;第二,拿我当前登录的cookie去登录。最后华丽地失败了。

于是我开始观察在登录的时候除了用户名和密码到底还发送了些什么。打开chrome->右键审查元素->网络,然后再输入用户名密码登录,看右边面板中的Form Data,也就是我们发送的数据:

这里写图片描述

图中我们可以看到,除了发送用户名和密码,我们还发送了一个csrfmiddlewaretoken的数据,这个数据是什么呢?正好最近的web安全课里讲过csrf攻击,也就知道点。那这个csrfmiddlewaretoken是怎么来的呢?回到题目的页面,刷新下网页,在Response Headers也就是服务器响应的数据的Set-Cookie里发现有个csrftoken的字段:

这里写图片描述

我们先记住这个值,然后再登录一遍,发现发送的表单数据中的csrfmiddlewaretoken中的值就是这个:

这里写图片描述

也就是说,每次登录的时候还要拿进入这个页面服务器给你的“csrftoken”作为你下次登录时的“csrfmiddlewaretoken”和用户名密码一起传给服务器。
经过观察还发现,登录“黑板课记账”的时候用的也是相同的方法,这就是题目所说的“两层保护”

# coding=utf-8import requestswebsite1 = 'http://www.heibanke.com/accounts/login'website2 = 'http://www.heibanke.com/lesson/crawler_ex02'wrongNotify = '您输入的密码错误, 请重新输入's = requests.Session()s.get(website1)     # 访问登录页面获取登录要用的csrftokentoken1 = s.cookies['csrftoken']      # 保存csrftoken# 将csrftoekn存入字段csrfmiddlewaretokendataWebsite1 = {'username': 'user',                'password': 'password',                'csrfmiddlewaretoken': token1                }s.post(website1, data=dataWebsite1)pwd = 1while pwd < 30:    # 以下步骤原理和上面一样    s.post(website2)    token2 = s.cookies['csrftoken']    dataWebsite2 = {'username': 'Thare',                'password': pwd,                'csrfmiddlewaretoken': token2                }    result = s.post(website2, data=dataWebsite2)    if wrongNotify in result.content:        print '密码%d错误' % pwd        pwd += 1    else:        print '密码是%d' % pwd        break
1 0
原创粉丝点击