模拟登陆网站,发现post表单时密码和账号都被加密,加密的js可以找到,但是加密的参数还有一个是服务器随机返回的,怎么办?

丁低调
  • 19

一、
模拟登陆一个网站,发现post表单时密码和账号都被加密,加密后的数据传递给一个type属性为hidden的input,我想获取这个input,但是点击登录按钮后这个input就刷新了
这是js代码
这是登录的js代码,可以看出加密后的参数传为encoded
图片描述
我尝试将input的type属性hidden改为txt,再获取它的value,但是也没成功
二、
登录的验证码怎么获取
图片描述
验证码没有直接用URL给出,而是src=‘’,获取验证码的URL会加一个random的参数
post表单

上面是post的表单

最后网站链接为链接描述

回复
阅读 4.4k
3 个回答

编码函数相当简单,可以直接转换成 python 代码,如下

# !/usr/bin/python2
# -*- coding: utf-8 -*-
import requests


def get_login_data():
    # 请替换成合适的域名
    url = 'http://xxx.xxx.xxx/Logon.do?method=logon&flag=sess'
    rsp = requests.get(url)
    rsp.raise_for_status()
    return rsp.text.encode()


def encode(usr, pwd, data):
    scode, sxh = data.split('#')
    raw = usr + '%%%' + pwd
    enc = ''
    for i in range(len(raw)):
        if i < 20:
            enc += raw[i] + scode[0:int(sxh[i])]
            scode = scode[int(sxh[i]):]
        else:
            enc += raw[i:]
            break
    return enc


def login():
    # encoded = encode(xx, xx, get_login_data())
    # requests.post(...)
    # ...

若遇到非常复杂的编码(加密)函数,可提取 javascript 代码,直接用 js 引擎(如 nodejs)执行它得到结果。

我看到的encoded是通过请求这个接口/Logon.do?method=logon&flag=sess得到一字串,然后前半部分是需要混合的字串,后半部分是混合的长度,然后与用户名和密码拼接起来字串进行交叉混合得到最终的encoded
验证码你需要识别图片

你知道吗?

宣传栏