首页 > 其他分享 >【web_逆向12】RSA加密实战

【web_逆向12】RSA加密实战

时间:2023-08-26 14:22:22浏览次数:39  
标签:web cookies 12 get url RSA session login data

目标

  • 中大网校登录获取数据

分析

  • 根据接口分析,我们需要对密码逆向,识别验证码
  • 加密入口
  • 加密逻辑,标准的RSA加密
  • 查找ress.data,注意:这里不一定是时间戳,不能简单暴力的使用data.now()代替;根据call stack往回找
  • 发现此处的data是ajax请求,成功返回的数据,url就是gettime
  • 所以此处的ress.data必须通过请求获取
  • 验证码识别使用ddddocr获取其它三方平台,都可以正常破解
  • 到目前为止,登录接口需要的参数已经全部准备好

登录不成功

  • 根据获取到的参数及加密后,我们发现还是不能成功登录
  • 这里通过阅读代码,发现在登录成功后,还操作了cookies
    • 注意点:这里是ajax操作的cookie,我们使用python中requests的保持session是无法实现的,必须手动处理
    • 这里是网站封装了ajax

完整代码

import subprocess
from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')

import execjs
import requests

# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ddddocr
import ddddocr  # 免费. 应对一些简单的验题.证码没问 包括滑块
import base64
import json

def login():
    f = open("某网校登陆.js", mode="r", encoding="utf-8")
    js = execjs.compile(f.read())
    f.close()

    session = requests.session()

    session.headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }

    login_page_url = "https://user.XXXX.cn/login?url=http%3A%2F%2Fks.wangxiao.cn%2F"
    session.get(login_page_url)  # 走全流程. 防止遗漏cookie

    # 怼请求头
    session.headers['Content-Type'] = "application/json;charset=UTF-8"

    # 获取验证码
    img_url = "https://user.XXXX.cn/apis//common/getImageCaptcha"

    img_resp = session.post(img_url)
    img_dict = img_resp.json()
    img_b64 = img_dict.get("data").replace("data:image/png;base64,", "")

    img = base64.b64decode(img_b64)
    with open("tu.png", mode="wb") as f:
        f.write(img)

    # 识别验证码 (图鉴, 超级鹰)
    dddd = ddddocr.DdddOcr(show_ad=False)
    result = dddd.classification(img)
    print(result)

    # 加密
    # getTime
    getTime_url = "https://user.XXXX.cn/apis//common/getTime"
    getTime_resp = session.post(getTime_url)
    getTime_data = getTime_resp.json().get("data")
    print(getTime_data)

    data = {
        "imageCaptchaCode": result,
        "password": js.call("encryptFn", "密码" + str(getTime_data)),
        "userName": "用户名手机号",
    }

    login_url = "https://user.XXX.cn/apis//login/passwordLogin"
    login_resp = session.post(login_url, data=json.dumps(data, separators=(',', ':')))
    # 登陆成功后需要拿到登陆信息. 并保存到cookie
    print(login_resp.json())

    login_success_data = login_resp.json()['data']

    session.cookies['autoLogin'] = "null"
    session.cookies['userInfo'] = json.dumps(login_success_data, separators=(',', ':'))
    session.cookies['token'] = login_success_data.get("token")

    session.cookies["UserCookieName"] = login_success_data.get("userName")
    session.cookies["OldUsername2"] = login_success_data.get("userNameCookies")
    session.cookies["OldUsername"] = login_success_data.get("userNameCookies")
    session.cookies["OldPassword"] = login_success_data.get("passwordCookies")
    session.cookies["UserCookieName_"] = login_success_data.get("userName")
    session.cookies["OldUsername2_"] = login_success_data.get("userNameCookies")
    session.cookies["OldUsername_"] = login_success_data.get("userNameCookies")
    session.cookies["OldPassword_"] = login_success_data.get("passwordCookies")

    return session

# 只负责登陆
sess = login()

for i in range(1):  # 如果需要反复请求获取数据
    # 检测是否真的可以拿到数据了
    question_url = "http://ks.XXXX.cn/practice/listQuestions"
    data = {
        "practiceType": "2",
        "sign": "jz1",
        "subsign": "8cc80ffb9a4a5c114953",
        "examPointType": "",
        "questionType": "",
        "top": "30"
    }

    resp = sess.post(question_url, data=json.dumps(data, separators=(',', ':')))
    if resp.text.startswith("<"):  # 登陆失效了, 这个判断只针对该案例.
        sess = login()  # 重新登陆即可
    print(resp.text)

  • JS代码
// npm install node-jsencrypt
var JSEncrypt = require("node-jsencrypt");

function encryptFn (e) {
    var o = new JSEncrypt;
    return o.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB"),
    o.encrypt(e)
}

标签:web,cookies,12,get,url,RSA,session,login,data
From: https://www.cnblogs.com/xwltest/p/17658763.html

相关文章

  • 深入了解Webpack:特性、特点和结合JS混淆加密的实例
    Webpack是现代前端开发中最受欢迎的构建工具之一,其强大的特性和灵活性使得开发者能够更有效地管理和优化项目资源。在本文中,我们将深入探讨Webpack的特性和特点,并结合实例演示如何使用Webpack与JS混淆加密相结合。Webpack的特性和特点1.模块化管理Webpack支持将项目拆分为多个模块......
  • GBU812-ASEMI逆变器专用整流桥GBU812
    编辑:llGBU812-ASEMI逆变器专用整流桥GBU812型号:GBU812品牌:ASEMI芯片个数:4封装:GBU-4恢复时间:>50ns工作温度:-55°C~150°C浪涌电流:200A正向电流:8A反向耐压:1200V正向压降:1.10V引脚数量:4GBU812特性:ASEMI品牌GBU812是采用工艺芯片,该芯片具有良好的稳定性及抗冲击能力,能够持续保证了GBU812......
  • GBU812-ASEMI逆变器专用整流桥GBU812
    编辑:llGBU812-ASEMI逆变器专用整流桥GBU812型号:GBU812品牌:ASEMI芯片个数:4封装:GBU-4恢复时间:>50ns工作温度:-55°C~150°C浪涌电流:200A正向电流:8A反向耐压:1200V正向压降:1.10V引脚数量:4GBU812特性:ASEMI品牌GBU812是采用工艺芯片,该芯片具有良好的稳定性及抗冲击能力,能够......
  • webpack 起步
    Webpack起步webpack用于编译JavaScript模块。一旦完成安装,你就可以通过webpackCLI或API与其配合交互。如果你还不熟悉webpack,请阅读核心概念和对比,了解为什么要使用webpack,而不是社区中的其他工具。基本安装首先我们创建一个目录,初始化npm,然后在本地安装webp......
  • Webstorm 免费激活教程(2023最新,亲测有效)
    Webstorm是jetbrains公司旗下一款JavaScript开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScriptIDE”等。Webstorm目前已经更新到最新的2023.2版本了,许多小伙伴私聊问我,为啥之前2021.3.1的激活套路对新版本2023.2......
  • Webstorm 最新激活教程,亲测有效
    本激活教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。下载最新的Webstorm2023.2版本安装包我们先从Webstorm官网下载Webstorm2023.2版本的安装包,下载链接如下:https://www.jetbrains.com/webstorm/download点击下载,静心等待......
  • 如何从web端查看HTTP请求头信息
    在谷歌浏览器中1.按fn+F12打开开发者模式2.选择Network,开启调试模式3.输入想要查看的地址,点击地址,查看Header ......
  • Webstorm2023 下载(附图文激活教程,亲测有效)
    笔者几乎试了网上几乎所有的Webstorm激活方案,发现这种靠谱的激活方法,先上图。第一步:下载最新的Webstorm2023.2版本安装包我们先从Webstorm官网下载Webstorm2023.2版本的安装包,下载链接如下:https://www.jetbrains.com/webstorm/download点击下载,静心等待其下载完......
  • Webstorm 安装使用教程(最新图文教程,亲测有效)
    前言本教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。笔者几乎试了网上几乎所有的Webstorm激活方案,发现这种靠谱的激活方法,先上图。第一步:下载最新的Webstorm2023.2版本安装包我们先从Webstorm官网下载Webstorm2023.2......
  • Webstorm 2023激活图文方法(亲测有效)
    WebStorm是jetbrains公司旗下一款JavaScript开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScriptIDE”等。本激活教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。写在前面Webs......