目录
环境搭建
此博客为个人学习笔记,仅做参考使用
xss-labs下载地址GitHub - do0dl3/xss-labs: xss 跨站漏洞平台
快速下载:点击此处
如果不想自己搭建可以使用博主的网页(尽量自己搭!)
博主自己搭建的xss-labs网页靶场:快速使用
基础触发标签学习可以参考:XSS常见的触发标签
搭建完毕后打开靶场,点击图片正式开始xss之旅吧!
第一关
可以注意到,通过给name变量赋值,网页内容也会发生相应的改变。
然后去查看网页源码可以观察到get传参name的值hello插入了html里面,还回显了payload的长度
url?name=<script>alert()</script>
将name赋值为<script>alert()</script>即可通关本题
第二关
来到第二关
第二关提供了一个输入框,我们先试试输入一下数据
网页源码:
发现和第一关差不多,那么我们就试一试第一关的方法,输入
<script>alert()</script>
发现并没有通关,而且还原样输出了代码
然后我们再去看一下源码
发现我们输入之后输出的代码中的"<"和">"分别被"<"和">"实体化注释掉了,并且发现我们输入的内容是一个文本框的value值,这样浏览器是不会执行我们的注入语句的,所以我们要构造标签闭合。
尝试一下用 ><script>alert()</script>< 把input闭合掉,发现还是没有通关,然后检查一下。
发现参数是被双引号闭合着带入到input标签中,所以在开头构造一个 "> 把标签input标签闭合掉,再在之后拼接一个语句,这样我们构造的标签就能顺利被编译,而不是简单字符串了,另外还需要在结尾构造一个 <" 把input剩下的尖括号闭合掉。
"><script>alert()</script><"
恭喜第二关通过。
第三关
第三关也是和第二关一样有个输入框,我们先输入一些值看看
和第二关出奇的相似,那么我们可以去看下网页源码
发现value是用单引号包着数据的,那么我们根据第二关的经验,可以构造单引号回路闭合。输入
'><script>alert()</script><'
发现没有通关,然后我们再去检查一下网页源码
第三关博主自己的网站出问题了,我先改改,过几天继续写吧...
暂时先用自己的靶场弄吧(2024.7.18)
终于改好,继续继续~(2024.7.20)
接着看网页源码,我们发现输入的"<"和">"分别被"<"和">"实体化了,这就影响了代码的运行。
但是我们还可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过。
onfocus 事件在对象获得焦点时发生。
Onfocus 通常用于 <input>, <select>, 和<a>.
提示: onfocus 事件的相反事件为 onblur 事件。
onblur 事件会在对象失去焦点时发生。
Onblur 经常用于Javascript验证代码,一般用于表单输入框。
参考网页:onfocus 事件 | 菜鸟教程 (runoob.com)
所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload
方法1:
利用onfoucus事件,我们得到payloa为:
'onfocus="alert()"
或者
'onfocus=javascript:alert()'
输入之后再次点击输入框就可以完成本关了
方法2:
利用onblur 事件,我们得到payloa为(和方法1差不多,只是触发方式不同):
'onblur="alert()"
以上2种方法皆可通关。
第四关
老样子,直接看网页源码吧~可以观察到这个题还是input输入,然后又是双引号闭合方式(有没有种熟悉的感觉),这题和第二关竟然如此相似。那么我们直接用第二题的payload试试
"><script>alert()</script><"
但是并没有通关
继续看网页源码吧
这一关居然直接把我们的<>号给去掉了!但是想一下第三关的方法,我们并没有用到<>号。
然后我们试一下第三关的payload,并使用双引号进行闭合
" onfocus="alert()" "
或者
"onfocus=javascript:alert()"
输入之后搜索,然后再次点击输入框框就通关了,和第三关通关方式相似。
第五关
话不多说,直接看网页源码了~
发现这个地方居然又和第四关出奇的相似!!!(我觉得肯定不会这么简单)
先试试第四关的payload
"onfocus=javascript:alert()"
未完待续...