xss-lab通关记录
点赞后看,养成习惯
喜欢的话 可以点个关注哟
你们的点赞支持对博主们来说很重要哦 !!!
Level 1
关卡描述:
采用get方式传参,name的参数值test直接显示在页面中间
查看网页源码,发现我们输入的test出现在<h2></h2>标签之中
解题思路:
试试输入<>()’”/这类特殊字符,看看服务端有没有做什么处理。发现特殊字符全部直接显示在页面源码中。
那还等什么,构造payload:\<script>alert(‘xss’)\</script>,发现页面源码中成功出现payload。

页面成功弹窗~
源码审计:
发现一点过滤都没有,服务端直接将用户可控的name参数值进行输出,导致了弹窗。
Level 2
关卡描述:
采用get方式传参,keyword的参数值test直接显示在页面中间
查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里
解题思路:
试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中这类特殊字符都被保留了下来。
<h>标签之间触发XSS,需要<>的帮助,这里是没戏了。
那么<input>标签之中呢触发XSS,我们有两个思路,一个是闭合标签搞事情,一个是利用事件搞事情。
尝试构造payload:”><script>alert(‘xss’)</script>,”>与前面的value”形成<input name=keyword value=””>闭合
尝试构造payload:”onfocus=javascript:alert(‘xss’)>//,”>与前面的value”形成value=””,//将后续代码注释掉。
源码审计:
发现<h2>标签部分对$str进行了实体化处理.htmlspecialchars(),而<input>标签部分对keyword参数值直接输出处理。
Level 3
关卡描述:
采用get方式传参,keyword的参数值test直接显示在页面中间
查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里
解题思路:
试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中<>被过滤,()’/被保留了下来。

<h>标签走不通,<input>标签中<>被过滤,无法尝试闭合标签新建标签的方法了。所以只能尝试一下事件触发,构造payload:’onclick=’alert(1)
源码审计:
可以看到服务器端在页面显示的位置对参数值都用htmlspecialchars()函数进行处理了,如<、>这样的敏感字符编码成了html字符实体,那这里我们可以通过利用<input>标签的一些特殊事件来执行js代码。
Level 4
关卡描述:
采用get方式传参,keyword的参数值test直接显示在页面中间
查看网页源码,发现我们输入的test分别出现在<h>标签中、<input>标签中的value值里
解题思路:
试试输入<>”’(){}/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,(){}是幸存者,而<input>标签中<>被过滤了,”’(){}/都被保留了下来。
那么对于<h>标签之中,如果存在xss漏洞的话,是需要新建一个标签用来触发XSS的,但是<>被转义了,大概率是搞不定的。这边还是尝试试一试,果然没成功
!
那么对于<input>标签,我们通常有两种思路,一是闭合标签再搞事情,二是利用事件搞事情。因为之前提到<>是被过滤的,所以闭合标签我们就先不考虑了,我们尝试事件触发看看。
果然输入payload:"onfocus=javascript:alert(‘xss’) ",触发弹窗成功。
源码审计:
在服务器端先是将传递过来的keyword参数的值赋给str变量,然后经过箭头1和箭头2处的处理将变量值中包含的<、>符号删除。最后在箭头3处对变量值进行编码处理之后显示在页面之上,在箭头4处将去除特殊符号后的变量值插入到<input>标签的value属性值中。
Level 5
关卡描述:
采用get方式传参,keyword的参数值test直接显示在页面中间
查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里
解题思路:
试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中所有特殊字符都被保留了下来。
<h>标签走不通,我们继续死磕<input>标签,构造事件触发payload:”onclick=alert(1),发现onclick被破坏变成o_nclick。
构造闭合标签payload:”><script>alert(1)</script>,发现script被破坏变成s_cript。
构造闭合标签payload:”><img src=1 onerror=alert(1)>,发现onerror被破坏变成o_nerror。
尝试再换一个标签来执行js代码,构造闭合标签payload:"> <a href=javascript:alert(‘xss’) >,发现成功触发弹窗
源码审计:
服务器端先是将传递过来的参数值转换为全小写之后赋值给变量str,接着就是通过str_replace()函数来破坏变量值中的敏感字符的语义。最后在箭头4处通过htmlspecialchars()函数处理之后显示到网页上,在箭头5处直接将进行敏感字符处理之后的变量值插入到<input>标签的value属性值中。
最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。
- 点赞
- 收藏
- 关注作者
评论(0)