西南交大教务处登录及填写评价抓包分析和成品软件分享
浏览 1798 | 评论 1 | 字数 6516
卖女孩的小火柴
2019年05月31日
  • 众所周知,想要看成绩就必须得先经过评价系统,而填写完所有的评价耗时实在是太长太长了,于是我花了更长的时间抓了包(哭)


    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
    如果被杀软拦截,请添加白名单。受不了的请勿使用。
    如果你觉得文章写得还不错,或者看在我辛苦码了半天的份上,可以请我喝杯可乐。

    本文作者:卖女孩的小火柴
    本文链接:https://www.shinenet.cn/archives/3.html
    最后修改时间:2019-11-16 00:30:08
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    如果文章对您有帮助,不妨打赏杯可乐?微信-赞赏码
    评论
    如果可能,请填写真实邮箱,有回复会送至邮箱。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    已有 1 条评论
    2020-09-09 15:18
    图书馆的系统升级了,等考完试再看看吧