【实战】|记一次不存在的加解密实战渗透

admin 2023年9月5日16:13:51评论26 views字数 4952阅读16分30秒阅读模式

点击上方[蓝字],关注我们

建议大家把公众号“Z2O安全攻防”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。

【实战】|记一次不存在的加解密实战渗透

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。

文章正文


0x00 起因

某天做梦,梦见老板让我对这个网站渗透,我打开一看,诶!!!前端js加密???

0x01 入手

1.相信不少小伙伴在渗透过程中都遇到过,抓包中存在着一些加密传输字符。

【实战】|记一次不存在的加解密实战渗透


2.当我们作为一个毫无办法的新手时,我们需要做的第一件事就是“搜”。
3.搜什么呢?如上图数据包,哪里加密搜哪里。这里搜frameUrlSecretParam与frameBodySecretParam。
4.我们的frameUrlSecretParam搜出来存在与一段混淆加密的js里。

【实战】|记一次不存在的加解密实战渗透


5.我打上断点,定睛一看,诶,并没有停到此处。说明,业务流程与这儿毫无关系。
6.那么我接着搜下一个frameBodySecretParam参数名,直接搜不到,WTF?

【实战】|记一次不存在的加解密实战渗透


7.不怕,掏出我20种常用办法之一,搜索encrypt。

encrypt
decrypt
JSON.parse
JSON.stringify
ajax
....
【实战】|记一次不存在的加解密实战渗透


8.这么多我要断点哪一个,很明显sm2secrity.js是个加密的调用文件,函数触发点肯定不在这儿,至于miniui.js全是大写的,更不像,那么只剩前几个了,简单调试一下。

【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


9.很明显encryptAjaxParams就是我们frameBodySecretParam的核心加密函数了,那么入手工作就已完成。

0x02 代码分析一

1.重新回到断点,在停到断点时,选择步进函数,进入到加密函数本体,代码被混淆了。

【实战】|记一次不存在的加解密实战渗透


2.逐步步过,和寻找encrypt加密点一样,紧紧跟住参数值,找到真正加密点,走了三步左右,数据便被加密。

【实战】|记一次不存在的加解密实战渗透


3.核心分析点为

return window['x75x73x65x53x6dx32x45x6ex63x72x79x70x74'] ? _0x3a232b = _0xbfd749(0x1f7) + Util[_0xbfd749(0x223)](mini[_0xbfd749(0x210)](_0x4b8958)) : _0x3a232b = Util[_0xbfd749(0x1ee)](mini[_0xbfd749(0x210)](_0x4b8958)),

4.这是javascript的三目运算,百度即可。类似if else。
5.具体混淆代码代表是什么东西,通过查看数据的值来进行判断。

x75x73x65x53x6dx32x45x6ex63x72x79x70x74

6.问号前是条件语句,而windows是全局浏览器对象,那么对象里的这个是什么呢?我们用python print一下就知道了。答案是useSm2Encrypt。

【实战】|记一次不存在的加解密实战渗透


7.那么我们现在断在断点前面,使用console进行打印。
8.这里就是空,也是false,代表使用冒号后面的条件进行加密。

【实战】|记一次不存在的加解密实战渗透


9.简单阅读一下功能,_0x4b8958是我们的原参数,mini_0xbfd749(0x210),熟悉js应该知道,这里其实就是json序列化类似于JSON.stringify(),当然也可以自行百度。

【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


10.整理代码如下。

_0x3a232b = Util[_0xbfd749(0x1ee)](mini[_0xbfd749(0x210)](_0x4b8958))

11大概翻译过来也就是这样。

加密值 = Util.encrypt(json.stringify(原参数值))

12.我找到加密函数,进入了加密函数,在加密函数里找到了加密函数,那么我要做什么呢?进入加密函数,继续分析,找到加密点,跟到了这儿。

【实战】|记一次不存在的加解密实战渗透


12.跟到这儿以后,简单阅读一下功能。

var _0x747baa = _0x20b204[_0x32df64(0x206)](_0x20b204[_0x32df64(0x1e5)](_0x20b204[_0x32df64(0x206)](_0x4510fe)));

_0x20b204是window,里面对象的值大概就是

var 加密值 = window["encodeURIComponent"](window["bota"](window["encodeURIComponent"](值)))

12.关于window["encodeURIComponent"]与window["bota"]是什么直接百度。就是简单的url编码+base64编码+url编码。
13.在burp上进行测试,如右边编码。

【实战】|记一次不存在的加解密实战渗透


14.至此加密分析一结束。

0x03 代码分析二

1.也就是同上步骤,当window.useSm2Encrypt为true的时候又发生了什么呢,这里我们需要找到一个功能点是true的时候。
2.断点断上,在consloe输出一下window.useSm2Encrypt为ture的时候。

【实战】|记一次不存在的加解密实战渗透


3.开始分析,冒号之前的代码。

【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透
_0x3a232b = _0xbfd749(0x1f7) + Util[_0xbfd749(0x223)](mini[_0xbfd749(0x210)](_0x4b8958))


加密值 =  "encbody_" + Util[_0xbfd749(0x223)](json.stringify(原数据))

4.跟进 Util[_0xbfd749(0x223)]。
5.走到了这儿。

【实战】|记一次不存在的加解密实战渗透


6.跟进sm2Encrypt,这就是一个普通的sm2加密了。

【实战】|记一次不存在的加解密实战渗透

0x04 明文传输

1.如何采取明文进行传输呢?
2.首先我们要了解前后端交互的知识。那么在核心加密点处,我们不经过这个函数不就完了么?

【实战】|记一次不存在的加解密实战渗透


3.那么这里要提及burp的功能之一,Match and replace。

【实战】|记一次不存在的加解密实战渗透


4.这个功能可以匹配到相应的参数,进而进行替换。这里直接写个案列。

【实战】|记一次不存在的加解密实战渗透


【实战】|记一次不存在的加解密实战渗透


5.替换后,进入burp查看,数据已经明文。

【实战】|记一次不存在的加解密实战渗透

0x05 mitmproxy联动

1.如何使用中间代理进行自动的加密呢?
2.首先我们要了解mitmproxy是什么,相当于将burp的请求转到mitmproxy中进行自行加密。
3.使用burp的proxy功能将请求发送到mitmproxy。

【实战】|记一次不存在的加解密实战渗透


4.仅抛转引玉,加密由后文单独阐述。

from mitmproxy import proxy, options
from mitmproxy.tools.dump import DumpMaster
import json, time

class DLNSProxy:
    @staticmethod
    def request(flow):
        if flow.request.method == 'POST':
            datas = flow.request.get_content()
            print('########################requests path##################################')
            print(flow.request.path)
            datas = json.loads(datas.decode())
            req_datas = xxx加密算法()
            flow.request.raw_content = req_datas

    #由于本文响应为明文故不需要处理响应
    @staticmethod
    def response(flow):
        if flow.request.method == 'POST':
            datas = flow.response.get_content()
            try:
                datas = json.loads(datas.decode())
            except:
                pass
            body = datas["body"].replace(" ", "").split("u001d")[0]
            print("------------")
            de = aes_decrypt(body)
            datas["text"] = de
            # if body != {}:
            #     de = aes_decrypt(body)
            #     datas["text"] = de
            rsp_data = json.dumps(datas, ensure_ascii=False, separators=(",", ":")).encode()
            Content_Length = bytes(str(len(rsp_data)), 'utf-8')
            headers = flow.response.headers
            headers['Content-Length'] = Content_Length
            flow.response.raw_content = rsp_data


def start():
    bp = DLNSProxy()
    opts = options.Options(listen_host='127.0.0.1', listen_port=8888)
    pconf = proxy.config.ProxyConfig(opts)
    m = DumpMaster(opts)
    m.server = proxy.server.ProxyServer(pconf)
    m.addons.add(bp)
    try:
        m.run()
    except KeyboardInterrupt:
        m.shutdown()

if __name__ == '__main__':
    start()

0x06 总结

  1. 问题一,关于部分数据不明文,代表还有别的数据输入来源,应该如何去寻找?
    2.问题二,由于加密存在两种,关于判断问题如何解决?
    3.问题三,签名问题如何解决?

https://xz.aliyun.com/t/12720author:那是坦ke吗

技术交流

知识星球

致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。

涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 300+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。(点我了解详情)

【实战】|记一次不存在的加解密实战渗透

【实战】|记一次不存在的加解密实战渗透

学习圈子

一个引导大家一起成长,系统化学习的圈子。如果看到这里的师傅是基础不够扎实/技术不够全面/入行安全不久/有充足时间的初学者...其中之一,那么欢迎加入我们的圈子。在圈子内会每周规划学习任务,提供资料、技术文档,供大家一起学习、交流,由浅入深、层层递进。(点我了解详情

【实战】|记一次不存在的加解密实战渗透

交流群

关注公众号回复“加群”,添加Z2OBot好友,自动拉你加入Z2O安全攻防交流群(微信群)分享更多好东西。(QQ群可直接扫码添加)

【实战】|记一次不存在的加解密实战渗透

【实战】|记一次不存在的加解密实战渗透

关注我们

关注福利:

回复“app" 获取  app渗透和app抓包教程

回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。

回复“书籍" 获取 网络安全相关经典书籍电子版pdf

回复“资料" 获取 网络安全、渗透测试相关资料文档


点个【 在看 】,你最好看



原文始发于微信公众号(Z2O安全攻防):【实战】|记一次不存在的加解密实战渗透

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月5日16:13:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【实战】|记一次不存在的加解密实战渗透https://cn-sec.com/archives/2004092.html

发表评论

匿名网友 填写信息