xss-lab通关记录

举报
Vista_AX 发表于 2023/06/27 21:46:23 2023/06/27
【摘要】 xss-lab通关记录

点赞后看,养成习惯
喜欢的话 可以点个关注哟
你们的点赞支持对博主们来说很重要哦 !!!

Level 1

关卡描述:

采用get方式传参,name的参数值test直接显示在页面中间

image.png

查看网页源码,发现我们输入的test出现在<h2></h2>标签之中

image.png

解题思路:

试试输入<>()’”/这类特殊字符,看看服务端有没有做什么处理。发现特殊字符全部直接显示在页面源码中。

image.png


那还等什么,构造payload:\<script>alert(‘xss’)\</script>,发现页面源码中成功出现payload。
![image.png](https://bbs-img.huaweicloud.com/blogs/img/20230627/1687873250169531078.png)

页面成功弹窗~
image.png

源码审计:

image.png

发现一点过滤都没有,服务端直接将用户可控的name参数值进行输出,导致了弹窗。


Level 2

关卡描述:

采用get方式传参,keyword的参数值test直接显示在页面中间image.png

查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里

image.png


解题思路:


试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中这类特殊字符都被保留了下来。
image.png

<h>标签之间触发XSS,需要<>的帮助,这里是没戏了。

那么<input>标签之中呢触发XSS,我们有两个思路,一个是闭合标签搞事情,一个是利用事件搞事情。

尝试构造payload:”><script>alert(‘xss’)</script>,”>与前面的value”形成<input name=keyword value=””>闭合

image.png

image.png

尝试构造payload:”onfocus=javascript:alert(‘xss’)>//,”>与前面的value”形成value=””,//将后续代码注释掉。
image.png
image.png


源码审计:

image.png

发现<h2>标签部分对$str进行了实体化处理.htmlspecialchars(),而<input>标签部分对keyword参数值直接输出处理。


Level 3

关卡描述:

采用get方式传参,keyword的参数值test直接显示在页面中间
image.png


查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里
image.png


解题思路:
试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中<>被过滤,()’/被保留了下来。
![image.png](https://bbs-img.huaweicloud.com/blogs/img/20230627/1687873381243180534.png)

<h>标签走不通,<input>标签中<>被过滤,无法尝试闭合标签新建标签的方法了。所以只能尝试一下事件触发,构造payload:’onclick=’alert(1)

image.png

image.png

源码审计:

image.png

可以看到服务器端在页面显示的位置对参数值都用htmlspecialchars()函数进行处理了,如<、>这样的敏感字符编码成了html字符实体,那这里我们可以通过利用<input>标签的一些特殊事件来执行js代码。



Level 4

关卡描述:

采用get方式传参,keyword的参数值test直接显示在页面中间
image.png

查看网页源码,发现我们输入的test分别出现在<h>标签中、<input>标签中的value值里
image.png


解题思路:

试试输入<>”’(){}/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,(){}是幸存者,而<input>标签中<>被过滤了,”’(){}/都被保留了下来。
image.png


那么对于<h>标签之中,如果存在xss漏洞的话,是需要新建一个标签用来触发XSS的,但是<>被转义了,大概率是搞不定的。这边还是尝试试一试,果然没成功
!![image.png](https://bbs-img.huaweicloud.com/blogs/img/20230627/1687873453984486157.png)

那么对于<input>标签,我们通常有两种思路,一是闭合标签再搞事情,二是利用事件搞事情。因为之前提到<>是被过滤的,所以闭合标签我们就先不考虑了,我们尝试事件触发看看。

image.png


果然输入payload:"onfocus=javascript:alert(‘xss’) ",触发弹窗成功。
image.png


源码审计:

image.png

在服务器端先是将传递过来的keyword参数的值赋给str变量,然后经过箭头1和箭头2处的处理将变量值中包含的<、>符号删除。最后在箭头3处对变量值进行编码处理之后显示在页面之上,在箭头4处将去除特殊符号后的变量值插入到<input>标签的value属性值中。



Level 5

关卡描述:

采用get方式传参,keyword的参数值test直接显示在页面中间
image.png


查看网页源码,发现我们输入的test分别出现在<h2></h2>标签之间、<input>标签中的value值里
image.png

解题思路:

试试输入()<>’”/这类特殊字符,看看服务端有没有做什么处理。发现<h>标签之中,()’是幸存者,而<input>标签中所有特殊字符都被保留了下来。

image.png

<h>标签走不通,我们继续死磕<input>标签,构造事件触发payload:”onclick=alert(1),发现onclick被破坏变成o_nclick。
image.png


构造闭合标签payload:”><script>alert(1)</script>,发现script被破坏变成s_cript。
image.png


构造闭合标签payload:”><img src=1 onerror=alert(1)>,发现onerror被破坏变成o_nerror。

image.png


尝试再换一个标签来执行js代码,构造闭合标签payload:"> <a href=javascript:alert(‘xss’) >,发现成功触发弹窗

image.png

image.png


源码审计:

image.png

服务器端先是将传递过来的参数值转换为全小写之后赋值给变量str,接着就是通过str_replace()函数来破坏变量值中的敏感字符的语义。最后在箭头4处通过htmlspecialchars()函数处理之后显示到网页上,在箭头5处直接将进行敏感字符处理之后的变量值插入到<input>标签的value属性值中。





最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。