Skip to content

Latest commit

 

History

History
110 lines (92 loc) · 3.48 KB

File metadata and controls

110 lines (92 loc) · 3.48 KB
created updated
2023-02-21 19:21:35 +0800
2023-02-21 21:48:57 +0800

该案例属于autoDecoder的调试办法中的一例

算法为DES/CBC/PKCS5Padding算法,密钥为f0ngtest,iv为f0ngf0ng

请求体为

I9z1fsH5QQ2NUbJi/7a8lw==

响应体为

dCtLdlmk7wI=

python文件如下:

# -*- coding:utf-8 -*-  
# author:f0ngf0ng  
  
from flask import Flask,Response,request  
from pyDes import *  
import base64  
  
def des_encrypt(s):  
    """  
    DES 加密    :param s: 原始字符串    :return: 加密后字符串,16进制  
    """    
    secret_key = "f0ngtest"  
    iv = "f0ngf0ng"  
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)  
    en = k.encrypt(s, padmode=PAD_PKCS5)  
    return base64.encodebytes(en).decode()  
  
def des_decrypt(s):  
    """  
    DES 解密    :param s: 加密后的字符串,16进制    :return:  解密后的字符串  
    """    
    secret_key = "f0ngtest"  
    iv = "f0ngf0ng"  
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)  
    de = k.decrypt(base64.decodebytes(bytes(s,encoding="utf-8")), padmode=PAD_PKCS5)  
    return de.decode()  
  
app = Flask(__name__)  
  
@app.route('/encode',methods=["POST"])  
def encrypt():  
    param = request.form.get('dataBody')  # 获取  post 参数  
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse = request.form.get('requestorresponse')  # 获取  post 参数  
    encry_param = des_encrypt(param.strip("\n"))  
    print(param)  
    print(encry_param)  
    if param_requestorresponse == "request":  
        return param_headers + "\r\n\r\n\r\n\r\n" + encry_param  
    return encry_param  
  
@app.route('/decode',methods=["POST"])  
def decrypt():  
    print(request.form)  
    param = request.form.get('dataBody')  # 获取  post 参数  
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse = request.form.get('requestorresponse')  # 获取  post 参数  
    decrypt_param = des_decrypt(param.strip("\n"))  
    print(decrypt_param)  
    print(param_headers)  
    print(param_requestorresponse)  
    if param_requestorresponse == "request":  
        return param_headers + "\r\n\r\n\r\n\r\n" + decrypt_param  
    else:  
        return decrypt_param  
  
if __name__ == '__main__':  
    app.debug = True # 设置调试模式,生产模式的时候要关掉debug  
    app.run(host="0.0.0.0",port="8888")

将以上代码保存为app.py,运行python3 app.py

复制请求包到接口

POST /testsql.php HTTP/1.1
Host: 10.211.55.4
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

I9z1fsH5QQ2NUbJi/7a8lw==

解密可以看到请求体被解密了,加密也可以看到请求体被加密了

复制响应包到接口,解密可以看到响应体被解密了,加密也可以看到响应体被加密了

如果需要修改请求头,选中对数据头进行处理即可

响应头同理