<small id='Ji6xD'></small> <noframes id='oWfOyw3v'>

  • <tfoot id='JDtoZ0b'></tfoot>

      <legend id='6BxIfY'><style id='OUzxgf5E'><dir id='BLml1qi'><q id='q8cGsJR'></q></dir></style></legend>
      <i id='cEOY'><tr id='PzX2'><dt id='lPseVp'><q id='8DdcnLP'><span id='xunv9'><b id='afnbB9KlN'><form id='80Lh7'><ins id='YJnV'></ins><ul id='cdvDVokL0'></ul><sub id='6Dm0TRkcj'></sub></form><legend id='aHuNSwv'></legend><bdo id='cT1ViQqg6'><pre id='lCHELpJY7u'><center id='Dhk7sc6z'></center></pre></bdo></b><th id='9xsWGTR5'></th></span></q></dt></tr></i><div id='vwaBxf5R8'><tfoot id='Y4UHZISwP'></tfoot><dl id='LySwYKUc'><fieldset id='b3hvjPDW'></fieldset></dl></div>

          <bdo id='6YtU'></bdo><ul id='LGuNM0e2f'></ul>

          1. <li id='MioGVAu'></li>
            登陆

            前端加密之运用Firefox来解密

            admin 2019-08-06 294人围观 ,发现0个评论

            跟着等保2.0的施行,传输过程中加密变的必要了,许多APP或许手机浏览器端逐渐加密了一些加密的办法来处理这个问题,比方以下这样的数据包。

            一串乱码,什么是什么都看不懂甭说修正数据了。。那咋办呢? 咱们能够运用firefox,chrome之类的,我个人比较喜爱firefox,以下的都是依据firefox来解说。

            一、触发button

            翻开调试器ctrl+F12然后进入 调试器,改写页面后会加载悉数的js,依据习气,一般login.js就看起来像是首要登录模块触发的函数的页面。

            前端加密之运用Firefox来解密

            咱们回到页面来触发这个button。前端很都操作都是依据事情绑定的。js便是事情驱动的言语,会有许多的闭包,一旦写欠好就浏览器内存++,当然这个是题外话。既然是事情驱动就会有许多function.on(‘click’,callback{})之类的操作来界说一些检测的逻辑。

            咱们先对需求动身的那个button,比方“登录”,“发送”之类的button,点击他的右键,然后挑选“检查元素”。 Firefox会快速定位到这个元素邻近的HTML结构,当然也会由于CSS层叠的问题导致定位禁绝,不过这个不重要,多用几回就知道怎么快速定位到要害元素,咱们现在仍是在解说HTML,还没开端解说JS部分。

            然后点击event,咱们快速定位到这个button点击后的事情逻辑块代码,比方以下的图。

            能够看到这个button绑定了2个click事情,下面那个事情为冒泡事情,即在上面的那个click的一起,下面那个click也会被触发。这个大约的触发代码应该是$(‘#buttion_id’).click(function{…}) ,其间,赤色部分内容应该便是咱们翻开的这个click事情框框中的代码,我把代码悉数贴出来。

            以下代码是依据jquery的,要看懂的话需求一些根底,我讲的尽可能简略,让咱们都能够快速了解。

            1function{ 2if(!$( this).prop('disabled' )) { 3varmobilenum = /^(13[0-9]|15[0-9]|16[0-9]|17[013678]|18[0-9]|19[0-9]|14[57])[0-9]{8}$/ ; 4varmob = $('.row input').eq(3).val.replace(/\s/g, '' ) 5if(! mobilenum.test(mob)) { 6$('#modal-error').modal('show').children('.error-content').children('.modal-body').html('请输入有用的手机号' ); 7return; 8} 9if(needImg) { 10$('#modal-input').modal('show' ); 11$('#modal-input .msg-code-img').eq(0 ).click; 12var$_input = $('#modal-input input')[0 ]; 13setTimeout( function{ 14$_input.focus; 15}, 500 ); 16} else{ 17varparams = { 18'MOBILE': $('.row input').eq(3).val.replace(/\s/g, '' ) 19}; 20getPhoneCode(params); 21} 22} 23}

            最首要咱们看17-20行的代码,结构了一个目标传入到getPhoneCode函数中,params的参数便是手机的参数 并且处理必定逻辑。

            二、调试JS,下断点

            接来下咱们去查找getPhoneCode(params)函数。

            咱们经过大局查找快速定位到这个函数的方位。

            1functiongetPhoneCode(params) { 2if(!$('#msg-btn').prop("disabled" )) { 3$('#msg-btn').prop("disabled", true); 4params['ajaxUr前端加密之运用Firefox来解密l'] = "/user2/sendSmsCode" ; 5params['ajaxCallBack'] = function(data) { 6if(data.MSG_CODE == 0 ) { 7if(data.MESSAGE_CODE) { 8$('.msg-code-input' ).val(data.MESSAGE_CODE); 9checkNull; 10} 11/*if (show_input) { 12$('.tel-code-row').show; 13}*/14$(".msg-code-img:not('#modal-input 四君子汤.msg-code-img'):last" ).click; 15time($('#msg-btn' )); 16return; 17} elseif(data.MSG_CODE == '102' ) { 18if($('.tel-code-row').css('display') == 'none' ) { 19alerterror('您的失利次数过多

            请输入图片验证码' ); 20$('.tel-code-row' ).show; 21} else{ 22alerterror('图片验证码输入过错' ); 23} 24if( typeofshow_input != 'undefined' && ! show_input) { 25show_input = true; 26} 27} else{ 28alertfail; 29} 30$('#msg-bt前端加密之运用Firefox来解密n').prop("disabled", false); 31} 32submitAjax(params); 33} 34}

            32行之前都是一些逻辑和判别的代码 和咱们想要调试的不要紧,4-5行是把一些信息包装进了params参数中,终究经过32行的submitAjax函数来履行,咱们持续盯梢这个函数 ,办法和上面相同,大局查找这个办法。

            submitAjax函数的界说如下:

            1//提交数据2varsubmitAjax = function(dataObject) { 3varajaxUrl = UC_URL + dataObject.ajaxUrl 4deletedataObject.ajaxUrl 5varajaxCallBack = dataObject.ajaxCallBack; 6deletedataObject.ajaxCallBack; 7dataObject.CHNLID = dataStore.getItem("CHNLID" ); 8da前端加密之运用Firefox来解密taObject.BACKURL = unescape(Base64.decode(dataStore.getItem("backUrl" ))); 9dataObject.VERSION = "1.32" ; 10if( null!= dataObject.BACKURL) { 11dataObject.BACKURL = getDomain(dataObject.BACKURL); 12} 13if( null== dataObject.CHNLID && null== dataObject.BACKURL) { 14dataObject.CHNLID = 'SF' ; 15dataObject.BACKURL = location.host; 16} 17varJsonParams = JSON.stringify(dataObject); 18varrsaCommit = function(JsonParams) { 19varRSAParams = RSAUtils.encryptedString(rsaKey, JsonParams); 20$.ajax({ 21type: "POST" , 22cache: false, 23dataType: "json" , 24url: ajaxUrl, 25contentType: 'text/plain' , 26data: RSAParams, 27...82}

            去掉了一些不重要的代码,咱们首要来看dataObject参数。咱们先对这个当地下个断点。

            然后咱们回到页面,填写好手机号,点击“获取验证码”,让代码跑起来。

            咱们能够看到dataObject参数就2个特点,然后持续往下跟,在Json.stringfy之前下断点,由于最终加密的函数是第19行,RSAUtils.encryptedString(rsaKey, JsonParams);其实有经历的同学能够直接在这儿下断点检查,这儿的rasKey是没有界说的,只要这个JsonParams,而 JsonParams便是方才的dataObject目标的json序列化。

            咱们能够看到,在变成json格局之前,程序加入了一些其他的参数,这个不重要。接下来咱们下断点到 RSAUtils.encryptedString函数。然后来看rsaKey参数是什么,鼠标移上去显现是undefined..

            由于代码只var rsaKey,并没赋值任何。。。不知道程序员在想什么,这个类的加密string办法显然是需求一个加密的key的,也便是私钥,其实这个程序有一个密钥,不过不是这个函数里的。

            所以其实前端加密来阻挠参数修正没含义的。。

            三、结构参数

            最终咱们需求了解上面的流程和逻辑

            获取需求的参数比方mobile,版别等信息

            json序列化

            加密

            发送至服务端

            获取需求的参数比方mobile,版别等信息

            json序列化

            加密

            发送至服务端

            最终的代码是:

            1varmy = {MOBILE:"15*******",CHNLID:"SF",BACKURL:"*****.com.cn",VERSION:"1.32" }; 2vardata = JSON.stringify(my); 3varrsaKey; 4RSAUtils.encryptedString(rsaKey, data);

            最终得出的值是:

            咱们再和直接用burpsuite抓到的值对比下:

            其他的一些考虑

            基本上就完毕了,接来下咱们能够结构任何咱们想要的值来替换掉传输,由于至此咱们能够结构任何想要的参数来篡改。

            其实换个思路,咱们能够编写一些插件(其实已经有相似的插件) ,例如早上的Tamper Data 插件之类的,或许自己写脚本引进,在一些要害代码之前反射出目标的悉数特点.

            从程序员视点来看,咱们能够看到他有好几个加密办法,有的传了密钥,有的没有。并且代码都是部分混杂,部分没有,其实进步一下门槛的话,应该把login.js之类的 也混杂了。尽管这种混杂对我这样的安全工程师没什么用,可是waf不也是这样的思路吗?

            把悉数的js混杂了不只能够紧缩代码的字符数,削减服务器压力和带宽,还能够进步安全的门槛,添加破解难度,在交互中屡次传输一些长度很高的token,利诱安全人员,再运用一些js和浏览器的hack技能,使得门槛能够十分高。 比方这些js的古怪特性。

            *本文作者:NotFound,本文属 FreeBuf 原创奖赏方案,未经许可制止转载。

            前端加密之运用Firefox来解密
            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP