一、抓包分析
首先我们打开浏览器的开发者工具,随便输入一个用户名和密码登录,抓包分析:
显然,我们登录的时候发送了一个POST请求,而Data里面有六个数据,分别是rsa、ul、pl、lt、execution、_eventld。这显然不同于正常的username、password形式,我们逐一对其分析。
1.ul和pl
之前我是随便输的用户名和密码进行登录(用户名和密码都是111),不难看出,ul和pl分别代表用户名和密码的长度。
u = username
p = password
l = length
2.lt、execution和_eventId
我们直接Ctrl+F在网页源代码中搜索execution发现:
显然,这三个参数的值都直接给出来了。
3.rsa
还是直接搜索rsa,有两个结果:
第一个就是上面的图,我们打开第二个:
阅读代码不难发现,rsa的值是通过调用了一个名为strEnc的函数得到,于是我们搜索strEnc:
这个函数位于一个名为des.js的文件中,这个文件只有这一个函数,用处也就是用于计算rsa值。那么函数找到了,我们来分析参数:
(1)u取自un, p取自pd,后两者就是用户名和密码。
(2)lt显然就是之前的lt。
(3)‘1’, ‘2’, ‘3’为固定值。
为了检验我们的结果,我们直接在控制台调用strEnc函数计算:
结果是完全一致的。
二、功能实现
1.主要思路
首先使用GET方法,拿到POST所需的参数,并调用des.js计算rsa值,最后POST登录。
2.获取参数
我们使用session对象记录cookie,使用Xpath获取参数。
import requests
from faker import Factory
from lxml import etree
u = input("请输入用户名:")
p = input("请输入密码:")
loginUrl = "http://pass.sdu.edu.cn/cas/login?service=http://bkjws.sdu.edu.cn/f/j_spring_security_thauth_roaming_entry"
headers = {
"User-Agent"