范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

一次前端RSA加密之使用Mitmdump自动化加解密渗透测试

  写作背景
  在一次实战渗透测试中,使用burp抓包遇到了js加密,通过js逆向找到了加密算法,最终利用mitmdump联动burpsuite实现了自动化加解密 遇到的问题
  在得到授权的前提下,心情愉悦地打开burp抓包,进行日常地抓包改包测试,但是测试时发现请求体和响应体均被加密了,且密文都是d1,d2,d3格式,这就难受了≧ ﹏ ≦
  js逆向(大佬可直接越过此部分看Mitmdump)
  遇到上面地问题,首先当然是得定位加密函数了,F12打开浏览器控制台,直接搜索:"d1:"
  可以看到此处可以获得d1,d2,d3,其中d1是由a的值获取的,d2是由s的值获取的,d3是由u的值获取的,那么我们直接下断点在a的生成处,重新刷新网页,在a处断下,F9单步步入
  先是来到v["f"]的生成处,再单步两次回到之前的界面,再单步一次即可进入Object(v["f"])函数内
  可以看出来是使用了cbc模式,猜测使用了AES加密,此时我们在右侧作用域查看一下变量值:
  可以推测e为key值,i为iv值(e和i的值为前面n和o的值,后面会讲n和o怎么生成的),t为加密前的请求体值,但是此处有一个问题:iv值通常应该是16位才对啊,看来此处不能直接调用aes解密了(没学过密码学只能偷偷哭泣了/(ㄒoㄒ)/),看来只能硬抠代码了
  这里d1的值已经弄明白了,我们再去看看d2和d3的值是怎么生成的,此处还是刷新网页,重新断下:
  可以看到d2也就是s的值是由Object(v["c"])函数生成的,传入两个参数,生成d2时传入n和r,生成d3时传入o和r,而r的值在上面可以看出来是rsa值,此时看一下这个值是啥:
  已经明确了rsa的值,此处推测是服务端的公钥,那么再来看n和o的值,可以看出来是调用y(32)函数生成的,跟进查看:
  简简单单的根据"0123456789ABCDEFabcdef"生成的32位随机值,那么到这里,加密过程就已经弄清楚了:
  d1是由n和o作为key和iv值,对原始报文使用aes加密生成的,d2由服务端的公钥和随机值n生成的,d3由服务端的公钥和随机值o生成的
  那么我们前面说到了响应体也是有d1,d2,d3,那么再去看解密流程,同样的思路分析下来可以知道:
  响应体中的d2可以使用客户端私钥解密出n,d3可以使用客户端私钥解密出o,d1可以使用n和o解密出原始报文( 而私钥的获取方式同上公钥获取一样,下断点即可查看,解密函数就在加密函数下方 )
  咳咳,这个加解密,属实厉害,接下来就是抠js代码了 抠js代码
  这个过程属实痛苦,js挨个抠的话,还好,但是我们仔细观察一下这个网站,发现是webpack的,vue开发的网站,硬抠肯定得掉不少头发,此处讲一个快捷的webpack通用抠代码的方法:
  首先抠webpack入口,通常会在html主页面内嵌入,此处讲一个快速定位入口函数的方法,在索引页面内搜索call,挨个查看一下,会有如下类似代码:
  将函数抠下来,放在js文件里,定义成如下格式: var test_module; (function(e) { var u={}; function f(c) { if (u[c]) return u[c].exports; var n = u[c] = { i: c, l: !1, exports: {} }; // console.log(c) return e[c].call(n.exports, n, n.exports, f), n.l = !0, n.exports } test_module=f; })({ //此处留下贴之后抠的代码 })
  在开头写个test_module是为了后面好调用,接下来就是抠加密和解密函数,先抠aes的加密函数,往上找找到aes加密函数的最前面
  往上找到如图所示位置:
  往下找到如图所示位置
  "4b2a": function(t, e, i) {       "use strict";       i.d(e, "a", (function() {           return n       }       )),       i.d(e, "c", (function() {           return o       }       )),       i.d(e, "b", (function() {           return a       }       )),       i.d(e, "d", (function() {           return u       }       )),       i.d(e, "f", (function() {           return c       }       )),       i.d(e, "e", (function() {           return f       }       ));       i("d3b7");       var r = i("7c74").sm2;       function n() {           var t = r.generateKeyPairHex();           return new Promise((function(e) {               t && e(t)           }           ))       }       function o(t, e) {           var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1             , n = "04" + r.doEncrypt(t, e, i);           return n       }       function a(t, e) {           var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1             , n = r.doDecrypt(t.substring(2), e, i);           return n       }       var s = i("7c74").sm3;       function u(t) {           var e = s(t);           return e       }       var h = i("7c74").sm4;       function c(t, e, i) {           var r = h.encrypt(t, e, {               mode: "cbc",               iv: i           });           return r       }       function f(t, e, i) {           var r = h.decrypt(t, e, {               mode: "cbc",               iv: i           });           return r       }   },
  抠下来代码如上,放置在之前抠的入口函数下的后面的中括号里,接下来就是挨个抠,js逆向俗称:缺啥补啥。为了方便,查看缺啥补啥,我们在入口处修改如下图所示:
  这样做的好处是会提示我们缺啥函数,再去js文件里抠出来,抠的过程中会遇到:i("d3b7");如果是像上面这样调用函数且没有声明变量去获取返回值,可以把(i("d3b7"))注释掉,不然还得挨个抠下来,会很麻烦,而且也用不上,遇到后面这个情况得保留(例:h=i("d3b7")),接下来的过程便不多说了,漫长的抠代码过程
  这部分算是讲完了,那么最后贴一个调用方法(var test=test_module("7a74");然后就可以用test去调用其方法了): function test_enc(t, e, i) { var test=test_module("7a74"); var r = test.encrypt(t, e, { mode: "cbc", iv: i }); return r } mitmdump中间人代理
  抠完代码后,我们直接使用mitmdump对burp做上下游代理,这样我们可以在mitmdump代理层去修改数据包,然后在burp层看到的就是我们日常渗透未加密的数据,是真的很方便
  该方法适用于如下三个场景(其中app和小程序需能看到加解密或防篡改的源代码): web网页端做了防篡改以及加解密 app端做了防篡改以及加解密 小程序端做了防篡改以及加解密
  这里往下叙述共分为三个模块: 第一个模块为编写使用mitmdump的脚本
  第二个模块为响应体解密,此处使用二级代理即可(即burp上游代理)
  第三个模块为请求体以及响应体加解密,此处需使用三级代理(即burp上下游代理)  示例脚本
  编写好js的加解密脚本后,使用如下模板(修改加解密函数以及request和response函数为适应自己的加解密代码,并命名为test.py): import execjs from mitmproxy import flowfilter from mitmproxy.http import HTTPFlow  #解决js代码中中文编码错误 import subprocess import json from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")  with open("test.js","r",encoding="utf-8") as f:   js_code=f.read()   f.close() ctx=execjs.compile(js_code)  #请先修改公钥 publickey="" #请先修改私钥 privatekey="" def enc(data):   [d1,d2,d3]=ctx.call("req_enc",data,publickey)   return [d1,d2,d3] def dec(d1,d2,d3):   result=ctx.call("res_dec",d1,d2,d3,privatekey)   return result  class FilterFlow:    def request(self, flow):       if flow.request.url.startswith("https://x.x.x.x/"):           req=flow.request.get_text()           if ""d1":" in req:               return           print("加密数据前:".format(req))           data=enc(req)           d1=data[0]           d2=data[1]           d3=data[2]           json_data={"d1":d1,"d2":d2,"d3":d3}           result=json.dumps(json_data)           print("加密数据后:".format(result))           flow.request.set_text(result)    def response(self, flow:HTTPFlow):       # print(flow.response.get_text())       if flow.request.url.startswith("https://x.x.x.x/"):           resp=flow.response.get_text()           data=json.loads(resp)           d1=data["d1"]           d2=data["d2"]           d3=data["d3"]           result=dec(d1,d2,d3)           flow.response.set_text(result)   addons = [   FilterFlow(), ] 响应体解密
  此处仅需设置burp上游代理,方法如下: mitmdump -p 9090 -s .	est.py --ssl-insecure
  burp端设置:User Option => Upstream Proxy Servers => Add
  请求体响应体加解密
  此处需设置burp上下游代理,burp上游代理开启同上,此处只讲开启burp下游代理,即开启mitmdump的上游代理(需新开一个终端): mitmdump -p 7070 -s .	est.py  --mode upstream:https://127.0.0.1:8080 --ssl-insecure
  这样就算配置完成了,在burp中已经可以正常测试了,如果需要跑sqlmap等其它工具,请将流量代理至burp即可,如: python sqlmap.py -u "https://x.x.x.x/?id=1" --batch --proxy=http://127.0.0.1:8080
  最后贴图纪念一下成果,已经可以正常加解密进行渗透测试了:

今日春分,不管有钱没钱,别忘吃春分第一宝,应节气,正当吃头条创作挑战赛春分雨脚落声微,六暗斜风带客归,今天是24节气中的第4个节气春分,到了这个时节,随着气温的变化,咱们的饮食也要随之做出调整。如今天气虽暖却也干燥,过于燥热和过于寒凉之2022中华遗嘱库白皮书发布立遗嘱人平均年龄持续下降,选择三十而立的人占比增多3月21日,2022中华遗嘱库白皮书正式发布,对25万份遗嘱进行大数据分析,这也是中华遗嘱库连续第五年发布白皮书。现代快报记者了解到,近年来,遗嘱人平均年龄持续下降,三十而立的观念李清翰人文美学是乡村振兴与文旅民宿发展的制胜之道乡村建设和乡村振兴在顶层战略中的地位越来越重要,未来我们应该如何重新发掘乡村价值?如何用文化与美学带动乡村文旅发展从而更高质量地实现乡村振兴?在近日由文化和旅游部产业发展司指导,河某鱼APP再爆新料,颜色交易伪装进硬币收藏?令人大开眼界随着智能手机和网络的普及,各种APP也逐渐盛行于市场上,给人们带来了不错的便捷效果,但同时也带来了隐患。就拿颜色交易的事情来说,近两年某团某拉拉某转某鱼等多个平台就被爆出涉黄信息的循着花香,奔赴半亩花田的留白美学之约在这样的社会语境下,如何通过优质的内容打动人心,与女性构建深层对话激发共鸣?品牌又该如何从满满当当的她营销中脱颖而出,实现与女性用户的有效连接?在今年的三八国际妇女节上,自然主义护榆叶梅花开满枝头,鲜艳夺目3月19日,在郯城县马头镇高册社区一户农家院门口,榆叶梅开出了绚丽的花朵。榆叶梅又叫小桃红,因其叶片像榆叶,花朵酷似梅花而得名。榆叶梅的花语是春光明媚花团锦簇和欣欣向荣。高军摄榆叶主动权益基金超额收益趋低被动投资时代来了?吴琦制表图虫创意供图证券时报记者吴琦A股市场结构化极致行情愈演愈烈,主动权益基金扎堆的新能源半导体和消费等板块接连回调,主动权益基金配置比例较低的通信计算机和传媒板块行情却异常火爆中俄元首会晤结束后,普京送到门外目送离开,患难才知谁是真朋友当地时间3月20日下午,中俄元首非正式会晤在莫斯科克里姆林宫举行,会晤结束已是深夜,普京一个动作着实让人动容,亲自送出门外,面带笑容挥手告别,目送中方专车离开。患难见真情,风高浪急朋友圈持续扩大!中国广州国际投资年会走进德国法兰克福美国硅谷南方财经全媒体记者梁施婷,实习生杨阳广州报道日前,第九届中国广州国际投资年会境外分会场分别在德国法兰克福美国硅谷成功举办。一年一度的中国广州国际投资年会,是广州坚持扩大高水平对外开杭州姑娘傅园慧叶诗文双双复出!现在参赛的小朋友,都可以叫我阿姨了3月20日上午,全国春季游泳锦标赛结束女子50米仰泳预赛,杭州姑娘傅园慧时隔一年半后首次正赛亮相,28秒46排名第四晋级决赛。傅园慧表示,目前自己的竞技状态只恢复到了50,杭州亚运聊聊计算机中的寄存器头条创作挑战赛前言大家好,我是呼噜噜,现代CPU内部除了运算器和控制器,还有一个常见的组件寄存器,是CPU内部用来存放数据的一些小型的存储区域,用来暂时存放参与运算的数据以及运算结
大陆集团中国区总裁汤恩汽车供应链如何找到新的平衡点疫情和芯片短缺问题持续影响汽车行业。大陆集团中国区总裁兼首席执行官汤恩近日在接受第一财经记者采访时称,近两年,由于疫情和芯片供应问题,提升整个供应链的灵活度和柔韧性,成为一件相对有市值仅15亿,控股股东免费送7亿现金!上市公司再现花式保壳,交易所火速关注点蓝字关注,不迷路市值只有15亿元,新任控股股东称拟无偿赠与不少于7亿元现金,这操作有点令人惊讶。ST吉艾12月19日晚公告称,鉴于公司目前的经营状况,公司控股股东山高速香榆拟向公永州籍中国工程院院士柏连阳我和油茶的故事我的家乡祁阳市,那是一个有着漫山遍野油茶树的地方,是中国油茶之乡和全国油茶产业发展示范基地,有天然油库之美称,更是我梦想启航的地方。离开家乡几十年,却是充满了思念之情,不仅对父老乡中国长城郑海霞曾借姚明穿51码鞋,43岁嫁粉丝,现状如何?引言75年来,这是我最高兴的一天!2010年6月,一场婚礼上,一名老人如是说道。她是新郎徐庆华的母亲,而新娘,正是中国女篮第一人郑海霞。郑海霞时年43岁,她被称作第一人可并非空穴来八字不合遗憾分手,本泽马退出法国国家队回顾法国本届世界杯之旅,一如上届一般显示出冠军相,可惜最终距离卫冕还是棋差一招。毕竟,阿根廷夺冠梅西封王才是众望所归。众所周知,法国与比利时一样有内讧传统,去年欧洲杯的经历也为今年湖南路桥交通工程分公司开展廉政教育活动为深入学习贯彻党的二十大精神,深入推进全面从严治党,近日,湖南路桥交通工程分公司纪检委员以守底线强监督加强党风廉政建设为主题讲授廉政党课,公司本部全体党员干部参加学习,并集体观看警国家现在还能重新回到全封闭管理的模式上去吗?不粉饰太平。必须承认,现在社会面确实阳性越来越多,阳性面也越来越广。从城市到乡村,基本上都是这种状况。那现在,我们是否应该要求国家重新封闭起来管理呢?这样人这种情况确实还都是存在的中国家庭的养老账本个人养老时代来临,如何寻求政府和市场的最大公约数点蓝字关注,不迷路生命的末期,无论是人走了钱还在,还是人活着钱没了,都会造成遗憾,但却是常态。对个人而言,攒多少钱才够养老,养老压力如何分担,都需要提前算账规划。养老是家事,也是国中国高校影视学会广播专业委员会2022年会暨第七届中国广播创新发展高端论坛分论坛4成功举办12月17日下午,中国高校影视学会广播专业委员会2022年会暨第七届中国广播创新发展高端论坛分论坛4应急广播与基层融媒治理在线上举行。本次论坛由江苏广播电视总台交通广播部主任孙锴主部分编内!福州这些事业单位正在招聘来源台海网福州新一批事业单位招人啦!有适合你的岗位吗?一起来看招聘速览福建医科大学附属协和医院专项招聘紧缺急需人才5人福建医科大学附属第一医院招聘劳务派遣工作人员13人福建医科大学第四届最美家乡河湖主题征文摄影活动进入评选阶段视频加载中8月30日,记者从四川省河长制办公室获悉,第四届最美家乡河湖主题征文摄影活动进入评选阶段。据了解,寻找最美家乡河湖主题征文摄影活动是四川省河长制办公室于2018年启动的以