西南交大教务处登录及填写评价抓包分析和成品软件分享
众所周知,想要看成绩就必须得先经过评价系统,而填写完所有的评价耗时实在是太长太长了,于是我花了更长的时间抓了包(哭)
2019.11.16更新:更新了评价软件
1.登录
很明显,第一步需要解决的问题就是登录,顺便一提,学校怎么取消https了。
登录前的准备工作
清空cookies打开http://jwc.swjtu.edu.cn/service/login.html 界面
抓包看一下
没啥特别的,置了一个cookies JSESSIONID=xxxxxxxxE10FD75F66DB89B440625; Path=/; HttpOnly
很明显,这个是关键cookies,保存保存。
继续向下看,有个http://jwc.swjtu.edu.cn/vatuu/GetRandomNumberToJPEG?test=1557456422864 请求,155xxx很明显是时间戳,手动访问就会弹出验证码,这个就是获取验证码的url了,记得带cookies访问。
抓包登录
故意填错验证码,点击登录抓到一个POST包
POST http://jwc.swjtu.edu.cn/vatuu/UserLoginAction HTTP/1.1
Host: jwc.swjtu.edu.cn
Connection: keep-alive
Content-Length: 121
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://jwc.swjtu.edu.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jwc.swjtu.edu.cn/service/login.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=xxxxxxx75F66DB89B440625; username=201811xxxx
username=201811xxxx&password=mimal&url=http%3A%2F%2Fjwc.swjtu.edu.cn%2Findex.html&returnUrl=&area=&ranstring=SSSS
这个登录包就算抓完了,结构清晰一目了然,注意请求的head需要包含
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jwc.swjtu.edu.cn/service/login.html
否则会出错
验证登录
写这个系统的人脑洞有点大,我没弄明白,如果你只执行了上一步,获取了 登录成功的msg,但没有这一步,那么你的cookies访问其他界面仍然会是未登录状态。
这一步就是紧接着登录包的那个页面
POST http://jwc.swjtu.edu.cn/vatuu/UserLoadingAction HTTP/1.1
Host: jwc.swjtu.edu.cn
Connection: keep-alive
Content-Length: 401
Cache-Control: max-age=0
Origin: http://jwc.swjtu.edu.cn
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://jwc.swjtu.edu.cn/service/login.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=xxxxxxxxxxx75F66DB89B440625; username=201811xxxx
url=http%3A%2F%2Fjwc.swjtu.edu.cn%2Findex.html&returnUrl=&loginMsg=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
请求解码后为:
url: http://jwc.swjtu.edu.cn/index.html
returnUrl:
loginMsg: 登录成功!【201811xxxx,xxx】欢迎您回来,您上次登录时间为:2019-xxxxx,登录IP:182.xxxxxxx【】
想不到吧?我还把上一步获取到的msg再传回去显示在页面上!天才程序员骚操作啊。
同样,head需要对应。
以下是python3的登陆代码:
#!/usr/bin/python
#coding:utf-8
import requests
import time
from PIL import Image
from io import BytesIO
import os
import json
#获取验证码
print("正在获取验证码......")
session = requests.session()
session.get("http://jwc.swjtu.edu.cn/service/login.html")
r = session.get("http://jwc.swjtu.edu.cn/vatuu/GetRandomNumberToJPEG?test="+str(int(time.time())))
img = Image.open(BytesIO(r.content))
img.save("code.jpg")
os.startfile("code.jpg")
#获取用户信息
yzm = input("请输入验证码:")
username = input("请输入用户名:")
password = input("请输入密码:")
#模拟登陆
#第一步,POST发送
sendmsg = {
'username' : username,
'password' : password,
'url' : 'http://jwc.swjtu.edu.cn/vatuu/UserExitAction&returnUrl',
'area' : '',
'ranstring' : yzm,
}
login_header = {
'Referer' : 'http://jwc.swjtu.edu.cn/service/login.html',
'Origin' : 'http://jwc.swjtu.edu.cn',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'DNT' : '1',
'Accept' : 'application/json, text/javascript, */*; q=0.01',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With' : 'XMLHttpRequest',
}
r = session.post("http://jwc.swjtu.edu.cn/vatuu/UserLoginAction", data=sendmsg ,headers=login_header)
json = json.loads(r.text)
print(json['loginMsg'])
#第二步,确认登陆
sendmsg = {
'url' : 'http://jwc.swjtu.edu.cn/vatuu/UserExitAction&returnUrl',
'returnUrl' : '',
'loginMsg' : json['loginMsg']
}
login_header = {
'Referer' : 'http://jwc.swjtu.edu.cn/vatuu/StudentScoreInfoAction?setAction=studentMarkUseProgram',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'DNT' : '1',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'Upgrade-Insecure-Requests' : '1',
'Accept-Encoding' : 'deflate',
'Accept-Language' : 'zh-CN,zh;q=0.9'
}
r = session.post("http://jwc.swjtu.edu.cn/vatuu/UserLoadingAction", data=sendmsg ,headers=login_header)
#已经成功登陆
2.填写评价
理论上来讲,上一步过了后就应该可以做到这一步了。
获取评价的url
首先抓到评价界面的包
GET http://jwc.swjtu.edu.cn/vatuu/AssessAction?setAction=list HTTP/1.1
Host: jwc.swjtu.edu.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://jwc.swjtu.edu.cn/vatuu/AssessAction?setAction=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=xxxxxxxxxxxxx0FD75F66DB89B440625; username=201811xxxx
一个简单的GET,然后所有的URL都在里面,写个正则批量获取出来就行。
组装评价好的发送包
打开任意URL对应的页面,自己填写一次抓包保存,可以看到POST的数据是由几个参数构成的。
并不是很难,JS是直接写在页面末尾的,很简单而且没混淆,甚至还有注释,自己看一看应该就能把包组好
发送组装好的包
注意!页面上有一行 少于1分钟会强制重写,我一开始以为这是在吓唬我,后来没想到是真的。
打开URL后,需要等待1分钟以上才能提交包,否则直接返回参数错误!
坑了我好久好久。。。
这个程序不是很难,写的挺随意,看完分析的可以自己尝试,如果只是想水过去的可以下载附件,自己操作即可。
西南交大自动评价.7z
如果被杀软拦截,请添加白名单。受不了的请勿使用。
如果你觉得文章写得还不错,或者看在我辛苦码了半天的份上,可以请我喝杯可乐。