自动加解密请求包响应包插件(autoDecoder)如何实现高效加密?

2026-05-17 09:141阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1517个文字,预计阅读时间需要7分钟。

自动解码请求包响应插件(autoDecoder):- 明文传输,明文响应;- 密文传输,密文响应 + 前一个flag;- 明文传输,明文响应;- 密文传输,密文响应 + 0x01 + 背景 + 当数据包中都是密文时,我们从未以下;

自动加解密请求包响应包插件(autoDecoder),明文传,明文响应;密文传,密文响应

续上之前一个flag:明文传,明文响应;密文传,密文响应

0x01 背景

当数据包里都是密文,我们无从下手;就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要解密,响应包也需要解密,比较麻烦,所以它——autoDecoder来了。

其实取auto这个名字并不是真正的auto,加解密算法还是需要自己去逆出来的,只是相对于数据包里的密文来说,可以算是半自动。

0x02 优点
  1. 明文传,明文响应;密文传,密文响应,不影响原本通讯包的基础上,增加一个bp扩展页面查看明文信息。
  2. 自定义加解密的接口,当存在复杂数据加密的时候,可以自行编写python代码对接口进行加解密, 自定义需要加解密域名,即开即用。
0x03 插件的加解密方式
  1. 直接通过插件自带的算法去加解密数据包(较为简单,仅支持部分AES、DES、DESede加密)。
  2. 通过python的flask接口去编写加解密数据包的api(不一定是flask框架,也可以起其他框架,只需要接口地址正确且加解密流程正确即可)。
具体来说说加解密的方式
  • 自带算法进行加解密

支持较为简单的AES/CBC/PKCSPadding、AES/ECB/PKCSPadding等简单加解密方法,适合请求包或者响应包全部为加密的内容传参,如下文举例中的《使用自带算法进行加解密》章节。

  • 自定义接口进行加解密

自定义加解密的内容,默认传入的参数是整个请求体(request body)与整个响应体(response body),支持复杂的加解密算法,当然,这些都需要自行去写代码解密了。

0x04 举例

这里主要考虑到很多app、小程序的请求是多个的,上一个请求获取到的响应包会进行自动解密并且获取里面的参数,而获取到的参数中有下一个请求包的参数,如果将密文直接替换为明文进行回显,那么程序可能在第二个数据包请求就会报错。

所以为了解决上面的问题,增加了一个扩展页面查看明文,而当burp里指定域名的请求包是明文,那么响应包会自动响应明文。

为了方便理解,以testsql.php这个测试文件举例,testsql.php是一个以DES加密请求包和响应包的测试页面,存在SQL注入漏洞。

{"id":"2"}举例,加密后的密文为Gh9+wH+QSIkOwCj/QK/Kiw==

使用自带算法进行加解密

插件配置如下:

原始请求如下

点击autoDecoder

再次点击Send按钮进行请求,响应包自动解密

也可以直接拿sqlmap进行测试,为做对比,先关闭插件的加解密

直接明文进行sqlmap跑注入,代理到proxy,增加命令 --proxy=127.0.0.1:8080

数据包如下:

burp里sqlmap的第一个请求数据包如下:

跑不出来注入(没有启动插件,传参是明文,所以无回显)

sqlmap结果

开启插件:

再次使用sqlmap,代理到proxy,增加命令 --proxy=127.0.0.1:8080

burp里sqlmap的第一个请求(启动了插件,传参是明文,会自动加密,所以有回显)

sqlmap结果

注入成功跑出

使用自定义接口进行加解密

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('data') # 获取 post 参数 encry_param = des_encrypt(param.strip("\n")) print(param) print(encry_param) return encry_param @app.route('/decode',methods=["POST"]) def decrypt(): param = request.form.get('data') # 获取 post 参数 decrypt_param = des_decrypt(param.strip("\n")) print(param) print(decrypt_param) return decrypt_param if __name__ == '__main__': app.debug = True # 设置调试模式,生产模式的时候要关掉debug app.run(host="0.0.0.0",port="8888")

插件配置如下:

原始请求如下:

点击autoDecoder

再次请求

sqlmap使用也是一样的,代理到burp即可,这里不再赘述

实战环境中

APP1

APP2

0x05 总结
  1. 越来越多的小程序、app都使用了加密算法,要想更容易挖到漏洞,对于加解密的知识还是要有所了解的。
  2. 对于这种加解密的程序,其实也可以用被动漏扫,上游代理解密和下游代理加密,中间穿插被动漏扫,有时间也可以记录下。
0x06 附录

github.com/f0ng/autoDecoder [Burp插件]

mp.weixin.qq.com/s/_7wSWy0gIMMZmVeOtFgdsw [某APP测试]

本文共计1517个文字,预计阅读时间需要7分钟。

自动解码请求包响应插件(autoDecoder):- 明文传输,明文响应;- 密文传输,密文响应 + 前一个flag;- 明文传输,明文响应;- 密文传输,密文响应 + 0x01 + 背景 + 当数据包中都是密文时,我们从未以下;

自动加解密请求包响应包插件(autoDecoder),明文传,明文响应;密文传,密文响应

续上之前一个flag:明文传,明文响应;密文传,密文响应

0x01 背景

当数据包里都是密文,我们无从下手;就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要解密,响应包也需要解密,比较麻烦,所以它——autoDecoder来了。

其实取auto这个名字并不是真正的auto,加解密算法还是需要自己去逆出来的,只是相对于数据包里的密文来说,可以算是半自动。

0x02 优点
  1. 明文传,明文响应;密文传,密文响应,不影响原本通讯包的基础上,增加一个bp扩展页面查看明文信息。
  2. 自定义加解密的接口,当存在复杂数据加密的时候,可以自行编写python代码对接口进行加解密, 自定义需要加解密域名,即开即用。
0x03 插件的加解密方式
  1. 直接通过插件自带的算法去加解密数据包(较为简单,仅支持部分AES、DES、DESede加密)。
  2. 通过python的flask接口去编写加解密数据包的api(不一定是flask框架,也可以起其他框架,只需要接口地址正确且加解密流程正确即可)。
具体来说说加解密的方式
  • 自带算法进行加解密

支持较为简单的AES/CBC/PKCSPadding、AES/ECB/PKCSPadding等简单加解密方法,适合请求包或者响应包全部为加密的内容传参,如下文举例中的《使用自带算法进行加解密》章节。

  • 自定义接口进行加解密

自定义加解密的内容,默认传入的参数是整个请求体(request body)与整个响应体(response body),支持复杂的加解密算法,当然,这些都需要自行去写代码解密了。

0x04 举例

这里主要考虑到很多app、小程序的请求是多个的,上一个请求获取到的响应包会进行自动解密并且获取里面的参数,而获取到的参数中有下一个请求包的参数,如果将密文直接替换为明文进行回显,那么程序可能在第二个数据包请求就会报错。

所以为了解决上面的问题,增加了一个扩展页面查看明文,而当burp里指定域名的请求包是明文,那么响应包会自动响应明文。

为了方便理解,以testsql.php这个测试文件举例,testsql.php是一个以DES加密请求包和响应包的测试页面,存在SQL注入漏洞。

{"id":"2"}举例,加密后的密文为Gh9+wH+QSIkOwCj/QK/Kiw==

使用自带算法进行加解密

插件配置如下:

原始请求如下

点击autoDecoder

再次点击Send按钮进行请求,响应包自动解密

也可以直接拿sqlmap进行测试,为做对比,先关闭插件的加解密

直接明文进行sqlmap跑注入,代理到proxy,增加命令 --proxy=127.0.0.1:8080

数据包如下:

burp里sqlmap的第一个请求数据包如下:

跑不出来注入(没有启动插件,传参是明文,所以无回显)

sqlmap结果

开启插件:

再次使用sqlmap,代理到proxy,增加命令 --proxy=127.0.0.1:8080

burp里sqlmap的第一个请求(启动了插件,传参是明文,会自动加密,所以有回显)

sqlmap结果

注入成功跑出

使用自定义接口进行加解密

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('data') # 获取 post 参数 encry_param = des_encrypt(param.strip("\n")) print(param) print(encry_param) return encry_param @app.route('/decode',methods=["POST"]) def decrypt(): param = request.form.get('data') # 获取 post 参数 decrypt_param = des_decrypt(param.strip("\n")) print(param) print(decrypt_param) return decrypt_param if __name__ == '__main__': app.debug = True # 设置调试模式,生产模式的时候要关掉debug app.run(host="0.0.0.0",port="8888")

插件配置如下:

原始请求如下:

点击autoDecoder

再次请求

sqlmap使用也是一样的,代理到burp即可,这里不再赘述

实战环境中

APP1

APP2

0x05 总结
  1. 越来越多的小程序、app都使用了加密算法,要想更容易挖到漏洞,对于加解密的知识还是要有所了解的。
  2. 对于这种加解密的程序,其实也可以用被动漏扫,上游代理解密和下游代理加密,中间穿插被动漏扫,有时间也可以记录下。
0x06 附录

github.com/f0ng/autoDecoder [Burp插件]

mp.weixin.qq.com/s/_7wSWy0gIMMZmVeOtFgdsw [某APP测试]