搭建
搭建过程与一般的网站搭建差不多 参考资料
当出现这个界面就是成功了
学习
学习资料
xss概念理解:XSS跨站脚本攻击
xss常见标签:XSS常见触发标签
level1-直接打
这里提示payload长度为4查看一下源码
发现get传参name的值test插入了html里头,还回显了payload的长度,那么就利用这个机制,get传参一个name,同时插入一段js代码
url?name=<script>alert()</script>
level2-双引号闭合
提示payload还是4,就试试上一关的方法传上去,发现不行
查看源代码,发现上传的内容和转义的内容不一样
根据搜索查询:第一个test进行了html实体转义,但是第二个没有,只需要闭合掉双引号即可
"> <script>alert()</script> <"
level3-单引号闭合-onfocus事件绕过
先传一个基础的上去 发现上下语句都用了html实体转义,输入一个123试试
感觉是单引号闭合绕过
'> <script>alert()</script> <'
但是还是失败了发现上下依然被实体化了
看一下php源码发现实体化函数,但是htmlspecialchars函数只针对<>大于小于号进行html实体化,根据搜索查询这里要利用onfocus事件绕过
onfocus事件在元素获得焦点时触发,最常与 < input > 、< select > 和 < a > 标签一起使用,以上面图片的html标签< input >为例,< input >标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
原文链接:https://blog.csdn.net/l2872253606/article/details/125638898
可以利用这个事件来绕过<>号的过滤以达到执行js的目的,构造payload
' onfocus=javascript:alert() '
先上传
再点击输入框来触发
level4-双引号闭合-onfocus事件绕过
输入测试语句123发现为双引号闭合,而且有input标签,可以用onfocus事件绕过
" onfocus=javascript:alert() "
一样的先上传后点击即可
level5-< a >href标签法
查看源码
看上去好像跟上面的题目一样,试试看
果然不行,发现input标签处有变化,看一下php源码
发现on被替换成了o_n,还有小写字母转化函数,根据查询,使用新方法a href标签法
href属性的意思是 当标签< a >被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码
添加一个标签得闭合前面的标签,构建payload
"> <a href=javascript:alert()>xss</a> <"
这样就生成了一个xss的js伪协议,点击即可触发
level6-大小写组合绕过
吸取教训,直接看php源码
发现替换很多,刚刚的herf不能用了,要重新找个办法,发现没有上一关的小写函数了,尝试大小写绕过
那么这样的话下面三种方法都可以了
"> <sCript>alert()</sCript> <"
" Onfocus=javascript:alert() "
"> <a hRef=javascript:alert()>x</a> <"
原理就是利用大小写组合来绕过黑名单
level7-双拼写绕过
看源码刚刚的大小写绕过不能用了,这关就可以用双拼写绕过来解决。
比如:
oonn——on
这里用herf的方式
"> <a hrehreff=javasscriptcript:alert()>x</a> <"
level8-Unicode编码绕过
这关界面发生变化了看看php
基本都过滤完了,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"
这里根据查询利用href的隐藏属性自动Unicode解码,可以插入一段js伪协议
javascript:alert()
Unicode编码后
javascript:alert()
之后点击友情链接触发
level 9-unicode编码绕过+注释绕过
看看php文件发现还是一堆黑名单,跟上一关一样,但是底下多了一个strpos函数
因为这关黑名单与上一关一样,要采取unicode编码绕过,编码后不存在http那一串,所以要利用注释的方法在里面赛一个http://
javascript:alert()/* http:// */
level10-隐藏的input标签可以插入type="text"显示
这一关的界面没有输入payload的地方了,传个参试试
参数不见了,查看php发现这里传其他的参数会被隐藏,但是需要传t_sort,而且根据黑名单,发现<>被过滤了,所以使用onfocus事件绕过,由于这里输入框被隐藏了,需要添加type=“text”,构造payload
?t_sort=" onfocus=javascript:alert() type="text
点一下输入框就可以了
level11-http头传值-referer
随便传参,发现又被隐藏了,看看php
发现新函数这题的关键应该就是利用这个函数了,发现后面跟着referer,根据查询,可能是http头传值。
由于<>被和谐了,就还是用onfocus事件,构造一个http头,而且因为被隐藏了,还要加上type="text
Referer: " onfocus=javascript:alert() type="text
level12-http头传值-UA头
用bp抓包改UA头即可
" onfocus=javascript:alert() type="text
level13-http头传值-cookie
随便传参,发现这个地方,cook长得像cookie,找找看
果然是把值改了就行
" onfocus=alert() type="text
点框框
level14-抽象
点进来一片空白,发现源代码里面有个链接进去发现是个挂掉的网站,还是看后端
看了大佬的博客,这里点击那个链接就完成了,但是由于网站挂了所以跳转不了
level 15-文件包含
发现有个没见过的js,点开来也是乱码,下面还有个ng-include:1.gif
g-include指令就是文件包含的意思,用来包含外部的html文件,如果包含的内容是地址,需要加引号
先试试看包涵第一关
?src='/level1.php'
可以随便包涵之前的一关并对其传参,以达到弹窗的效果,看看php
发现有个html实体化函数可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如< script >,但是可以包涵那些标签的东西比如< a >、< input >、< img>、< p >标签等等,这些标签是能需要我们手动点击弹窗的)这里包含个图片
?src='/level1.php?name=<img src=1 onmouseover=alert()>'
只要碰到图片就能触发
后面根据了解ng-include文件包含,可以无视html实体化
level16-用回车代替空格绕过
看后端先是将字母小写化了,再把script替换成空格,最后将空格给实体化。空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的< svg >标签
?keyword=<svg%0Aonload=alert(1)>
level17-flash
首先点进去是支持此插件,而且有个embed标签,后缀是swf的文件,这是flash插件的标志,但是现在的游览器基本都不兼容flash了
所以,这题的解法很简单,首先得用一个支持flash插件的浏览器打开本关,但是现在的游览器基本都不支持了
level18-html实体化函数-flash
这题与17题差不多,需要有个支持flash的游览器,可以用onfocus事件
level19-Flash里插入js代码
这题说实话有点没搞懂,因为我没有flash,就去看了大佬的博客level19-Flash,这题需要swf反编译查看源码,光看php没用
其实就是往Flash里面插入一段js代码,然后手动执行
?arg01=version&arg02=<a href="javascript:alert()">here</a>
level20-Flash
因为涉及swf反编译,flash代码审计,参考大佬博客
这里就直接catch payload了
?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123