<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 如何在metasploit對JavaScript進行混淆 隱藏是在開發過程中考慮的一個重要特點.如果你的exploit永遠被抓住.那么這和你的exploit多棒或者多么有技術挑戰是不重要的.在真正的滲透測試中,它很可能不是很有用。 特別是瀏覽器漏洞,主要依靠JavaScript來觸發漏洞,因此許多基于防病毒或基于特征的入侵檢測/防御系統將掃描JavaScript并將特定行標記為惡意代碼.以下代碼曾被多個防病毒軟件供應商視為MS12-063,即使這些代碼不一定有害或惡意,我們將在整個wiki上使用它作為示例: ~~~ var arrr = new Array(); arrr[0] = windows.document.createElement("img"); arrr[0]["src"] = "a"; ~~~ 為了避免被標記,我們可以嘗試一些常見的躲避技巧.例如,您可以手動修改代碼,使其不能被任何簽名識別.或者,如果防病毒軟件依靠緩存的網頁來掃描漏洞,則可能導致瀏覽器不緩存你的漏洞網頁,以避免漏洞檢查。或者在這種情況下,你可以混淆你的代碼,這是這篇文章的重點。 在Metasploit中,有三種常見的方法來混淆你的JavaScript。第一個是簡單地使用rand_text_alpha方法(在Rex)隨機化你的變量。第二個是使用ObfuscateJS類。第三個選項是JSObfu類。 ### rand_text_alpha 技巧 使用rand_text_alpha 是最基本的逃避技巧.但也是最沒有效的。如果這是你的選擇,你應該隨機化任何可以隨機化,而不會破壞代碼。 通過使用上面的MS12-063,你將學會如何使用rand_text_alpha ~~~ # Randomizes the array variable # Max size = 6, Min = 3 var_array = rand_text_alpha(rand(6) + 3) # Randomizes the src value val_src = rand_text_alpha(1) js = %Q| var #{var_array} = new Array(); #{var_array}[0] = windows.document.createElement("img"); #{var_array}[0]["src"] = "#{val_src}"; | ~~~ ### ObfuscateJS 類 ObfuscateJS類就像rand_text_alpha,但更好。它允許您替換符號名稱,如變量,方法,類和名稱空間。它也可以通過隨機使用fromCharCode或unescape來混淆字符串.最后,它可以去掉JavaScript注釋,這是非常方便的,因為漏洞經常難以理解和閱讀,所以您需要注釋來記住為什么要以特定的方式編寫某些內容,但是您不想在滲透中顯示或泄露這些注釋 為了使用ObfuscateJS,我們再次使用MS12-063的例子來演示。如果你覺得自己不用編寫模塊就可以自己完成這個步驟,你可以做的就是繼續運行msfconsole,然后切換到irb,如下所示: ~~~ $ ./msfconsole -q msf > irb [*] Starting IRB shell... >> ~~~ 你準備好后.你使用ObfuscateJS做的第一件事是你需要用你想混淆的JavaScript來初始化它,所以在這種情況下,就像下面這樣開始: ~~~ js = %Q| var arrr = new Array(); arrr[0] = windows.document.createElement("img"); arrr[0]["src"] = "a"; | obfu = ::Rex::Exploitation::ObfuscateJS.new(js) ~~~ obfu應該是一個返回的Rex::Exploitation::ObfuscateJS對象.它允許你做很多事情,你可以真正的調用方法,或者查看源代碼,看看有什么方法可用(附加的API文檔)。但是為了演示目的,我們將展示最常用的一個:obfuscate方法。 要實際混淆,您需要調用該obfuscate方法.這個方法接受一個符號參數,它允許你手動指定要混淆的符號名(變量,方法,類等等),它應該像下面這樣 ~~~ { 'Variables' => [ 'var1', ... ], 'Methods' => [ 'method1', ... ], 'Namespaces' => [ 'n', ... ], 'Classes' => [ { 'Namespace' => 'n', 'Class' => 'y'}, ... ] } ~~~ 所以,如果我想混淆變量arrr,我想混淆src字符串,這是怎么做 ~~~ >> obfu.obfuscate('Symbols' => {'Variables'=>['arrr']}, 'Strings' => true) => "\nvar QqLFS = new Array();\nQqLFS[0] = windows.document.createElement(unescape(String.fromCharCode( 37, 54, 071, 045, 0x36, 0144, 37, 066, 067 )));\nQqLFS[0][String.fromCharCode( 115, 0x72, 0143 )] = unescape(String.fromCharCode( 045, 0x36, 0x31 ));\n" ~~~ 在某些情況下,您實際上可能想知道符號名稱的混淆版本。一種情況是從元素的事件處理程序調用JavaScript函數,例如 ~~~ <html> <head> <script> function test() { alert("hello, world!"); } </script> </head> <body onload="test();"> </body> </html> ~~~ 混淆的版本如下所示 ~~~ js = %Q| function test() { alert("hello, world!"); } | obfu = ::Rex::Exploitation::ObfuscateJS.new(js) obfu.obfuscate('Symbols' => {'Methods'=>['test']}, 'Strings' => true) html = %Q| <html> <head> <script> #{js} </script> </head> <body onload="#{obfu.sym('test')}();"> </body> </html> | puts html ~~~ ### JSObfu類 JSObfu類曾經是ObfuscateJS的堂兄弟,但自2014年9月以來已經完全重寫,并被封裝成一個gem。混淆更為復雜,您實際上可以用它混淆多次。您也不再需要手動指定要更改的符號名稱,它是知道的。 #### 嘗試jsobfu 讓我們再回到irb來展示使用JSObfu是多么容易 ~~~ $ ./msfconsole -q msf > irb [*] Starting IRB shell... >> ~~~ 這個時候我們嘗試`hello world`的例子 ~~~ >> js = ::Rex::Exploitation::JSObfu.new %Q|alert('hello, world!');| => alert('hello, world!'); >> js.obfuscate => nil ~~~ 它的輸出是這樣的 ~~~ window[(function () { var _d="t",y="ler",N="a"; return N+y+_d })()]((function () { var f='d!',B='orl',Q2='h',m='ello, w'; return Q2+m+B+f })()); ~~~ 像ObfuscateJS一樣,如果你需要得到一個符號名稱的隨機版本,你仍然可以這樣做。我們將用下面的例子來演示 ~~~ >> js = ::Rex::Exploitation::JSObfu.new %Q|function test() { alert("hello"); }| => function test() { alert("hello"); } >> js.obfuscate ~~~ 如果我們想知道方法名test的隨機版本 ~~~ >> puts js.sym("test") ~~~ 很好,快速確認一下 ~~~ >> puts js function _(){window[(function () { var N="t",r="r",i="ale"; return i+r+N })()](String.fromCharCode(0150,0x65,0154,0x6c,0x6f));} ~~~ 我看起來很好,最后,讓我們嘗試混淆幾次,看看結果如何: ~~~ >> js = ::Rex::Exploitation::JSObfu.new %Q|alert('hello, world!');| => alert('hello, world!'); >> js.obfuscate(:iterations=>3) => window[String[((function(){var s=(function () { var r="e"; return r })(),Q=(function () { var I="d",dG="o"; return dG+I })(),c=String.fromCharCode(0x66,114),w=(function () { var i="C",v="r",f="omCh",j="a"; return f+j+v+i })();return c+w+Q+s;})())](('Urx'.length*((0x1*(01*(1*020+5)+1)+3)*'u'.length+('SGgdrAJ'.length-7))+(('Iac'.length*'XLR'.length+2)*'qm'.length+0)),(('l'.length*((function () { var vZ='k'; return vZ })()[((function () { var E="h",t="t",O="leng"; return O+t+E })())]*(0x12*1+0)+'xE'.length)+'h'.length)*(function () { var Z='uA',J='tR',D='x'; return D+J+Z })()[((function () { var m="th",o="g",U="l",Y="en"; return U+Y+o+m })())]+'lLc'.length),('mQ'.length*(02*023+2)+('Tt'.length*'OEzGiMVf'.length+5)),(String.fromCharCode(0x48,0131)[((function () { var i="gth",r="len"; return r+i })())]*('E'.length*0x21+19)+(0x1*'XlhgGJ'.length+4)),(String.fromCharCode(0x69)[((function () { var L="th",Q="n",$="l",I="g",x="e"; return $+x+Q+I+L })())]*('QC'.length*0x2b+3)+(01*26+1)))]((function(){var C=String[((function () { var w="rCode",j="mCha",A="fr",B="o"; return A+B+j+w })())]((6*0x10+15),('riHey'.length*('NHnex'.length*0x4+2)+4),(01*95+13),(1*('Z'.length*(0x1*(01*(0x3*6+5)+1)+18)+12)+46),(0x1*(01*013+6)+16)),JQ=String[((function () { var NO="ode",T="rC",HT="fromCha"; return HT+T+NO })())](('J'.length*0x54+17),(0x2*051+26),('TFJAGR'.length*('ymYaSJtR'.length*'gv'.length+0)+12),(01*0155+2),(0xe*'FBc'.length+2),(0x1*22+10),(3*(01*043+1)+11)),g=(function(){var N=(function () { var s='h'; return s })();return N;})();return g+JQ+C;})()); ~~~ ### 使用jsbofu進行模塊開發 當你正在編寫一個模塊時,你不應該像上面的例子那樣直接調用Rex。相反,你應該使用JSObfu mixin中的#js_obfuscate方法。當你在你的模塊中使用JavaScript時,一定要這樣寫: ~~~ # This returns a Rex::Exploitation::JSObfu object js = js_obfuscate(your_code) ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看