zoukankan      html  css  js  c++  java
  • 有道翻译js加密参数分析

    平时在渗透测试过程中,遇到传输的数据被js加密的比较多,这里我以有道翻译为例,来分析一下它的加密参数

    前言 

    这是有道翻译的界面,我们随便输入一个,抓包分析

    我们发现返回了一段json的字符串,内容就是翻译后的内容

    当我们将"i"字段'pig'改为'dog'时,再次重放就会发现返回错误

    这可能就是因为post传输的其他字段的值会有所不同,其他有些字段可能被js加密了,所以,我们如果想返回正确的结果,就必须要明白前端js加密的方法是什么。

    具体分析

    首先我们先比较一下,当传入不同的"i"值,其他字段哪些是有变化的

    i: dog
    from: AUTO
    to: AUTO
    smartresult: dict
    client: fanyideskweb
    salt: 15999987466773
    sign: c7dc4265984a100efa0eedc21e7d1be4
    lts: 1599998746677
    bv: cc652a2ad669c22da983a705e3bca726
    doctype: json
    version: 2.1
    keyfrom: fanyi.web
    action: FY_BY_REALTlME
    
    i: pig
    from: AUTO
    to: AUTO
    smartresult: dict
    client: fanyideskweb
    salt: 16000041380121
    sign: cb9abd73ce41818afa783b0cae7b04c9
    lts: 1600004138012
    bv: cc652a2ad669c22da983a705e3bca726
    doctype: json
    version: 2.1
    keyfrom: fanyi.web
    action: FY_BY_REALTlME

    对比发现,也就3个字段的内容不一样,简单分析一下,"salt"字段很明显就是加盐的意思,"sign"应该是某种加密以后生成的字符串,"lts"看着像是时间戳

    我们先来搜索一下这些字段在js中的具体位置,然后具体分析(我们这里主要是跟踪"sign"字段)

    大概加密的内容就在这块

    var r = function(e) {
            var t = n.md5(navigator.appVersion)
              , r = "" + (new Date).getTime()
              , i = r + parseInt(10 * Math.random(), 10);
            return {
                ts: r,
                bv: t,
                salt: i,
                sign: n.md5("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m")
            }
        };

    关键的加密点我已经用红色标注

    1,我们先来看"ts",其实"ts"就是"lts"字段,将 (new Date).getTime() 放在控制台下运行一下发现它其实就是一个13位的时间戳

    我们在python下跑一下此刻的时间戳

    import time
    
    print(time.time())

    发现它是一个浮点型的,这里我们可以给它*1000然后取整得到我们的"lts"字段的内容

    2,然后我们看一下"salt"字段,很简单,它其实就是刚刚得到的时间戳后面再加上一个10以内的随机整数(不包括10)

    3,最后我们来看一下"sign"字段,它其实就是将"你要翻译的单词"+"sign的内容"+"他给你的那一串字符",最后再进行md5一下就ok了

    分析完成,然后自己写脚本

    最后贴上我写的脚本

     1 import requests
     2 import time
     3 import random
     4 from hashlib import md5
     5 
     6 headers = {
     7     "Accept": "application/json, text/javascript, */*; q=0.01",
     8     "Accept-Encoding": "gzip, deflate",
     9     "Accept-Language": "zh-CN,zh;q=0.9",
    10     "Connection": "keep-alive",
    11     "Content-Length": "240",
    12     "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    13     "Cookie": "OUTFOX_SEARCH_USER_ID_NCOO=1719917773.2504172; OUTFOX_SEARCH_USER_ID="1064702900@10.108.160.19"; _ntes_nnid=b4177d72b2a1c46962196c06301101ab,1592922146778; JSESSIONID=aaaoDc-f2NpN1-vWZwhsx; ___rl__test__cookies=1599998746675",
    14     "Host": "fanyi.youdao.com",
    15     "Origin": "http://fanyi.youdao.com",
    16     "Referer": "http://fanyi.youdao.com/",
    17     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
    18     "X-Requested-With": "XMLHttpRequest"
    19 }
    20 word = input("请输入要翻译的单词:")
    21 ts = str(int(time.time()*1000))
    22 salt = ts + str(random.randint(0,9))
    23 str_ = "fanyideskweb" + word + salt + "]BjuETDhU)zqSxf-=B#7m"
    24 md = md5()
    25 md.update(str_.encode())
    26 sign = md.hexdigest()
    27 data = {
    28     "i": word,
    29     "from": "AUTO",
    30     "to": "AUTO",
    31     "smartresult": "dict",
    32     "client": "fanyideskweb",
    33     "salt": salt,
    34     "sign": sign,
    35     "lts": ts,
    36     "bv": "cc652a2ad669c22da983a705e3bca726",
    37     "doctype": "json",
    38     "version": "2.1",
    39     "keyfrom": "fanyi.web",
    40     "action": "FY_BY_REALTlME"
    41 }
    42 html = requests.post(url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule", headers=headers, data=data).json()
    43 print(html)

    运行结果

    这样我们就可以随意改动"i"字段的值,然后得到自己想要的结果

  • 相关阅读:
    nginx的url重写[rewrite规则和参考]
    nginx虚拟主机配置
    redhat 5下源码安装nginx服务
    apache服务器参数设置
    java实现全排列
    自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)
    如何学习一门新语言
    2018 中印诗人分享会
    C语言细节注意
    C++ vector 多次删除第一个元素
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/13663682.html
Copyright © 2011-2022 走看看