草庐IT

自动加解密请求包响应包插件(autoDecoder)

f0ng 2023-03-28 原文

续上之前一个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=http://127.0.0.1:8080

数据包如下:

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

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

sqlmap结果

开启插件:

再次使用sqlmap,代理到proxy,增加命令 --proxy=http://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 附录

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

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

有关自动加解密请求包响应包插件(autoDecoder)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  5. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  6. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  7. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  8. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  9. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  10. ruby - Ruby 中的单 block AES 解密 - 2

    我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec

随机推荐