level1
文章图片
可以得到传入的name
值,会显示出来,并显示name
值的长度。
查看源码
文章图片
将name
值插到了 之间。
主要考察反射型xss
没有对特殊字符进行过滤。
构造
文章图片
用于js弹窗的代码顺利执行了
服务器是将我们的恶意代码原封不动的返回了,浏览器才能成功弹窗
查看一下level1.php
代码
文章图片
通过GET传参
,参数的值存储在变量$str
,并放在之间。
level2
文章图片
发现并没有成功。
查看源码
文章图片
发现<>
被编码成了html字符实体,<
变成了为了<
,>
变成了>
。
猜测在服务器端用htmlspecialchars()
函数对keyword
参数的值进行了处理。
可以看到插入到value
参数值中的恶意代码并没有被编码而是直接原样返回
但是问题是这里的js代码
在标签属性值中,浏览器是无法执行的。
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。
要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。
将keyword
的参数值重新赋值">//
文章图片
htmlspecialchars
函数— 将特殊字符转换为 HTML 实体。&
替换为&
,
"
替换为"
,'
替换为'
,<
替换为<
,>
替换为>
level3
文章图片
试了试,发现报错了。
查看源码
文章图片
猜测这次是两处都使用了htmlspecialchars()
函数进行过滤
一下子懵掉了,查看level3.php代码
文章图片
果然是这样,这里可以通过标签的一些特殊事件来执行
js代码
'onfocus=javascript:alert('xss')> //
发现没有直接弹窗,这是因为onfocus事件的特殊性造成的
onfocus
事件在对象获得焦点时发生。
onfocus
通常用于 ,
, 和
.
点击当前页面的输入框就可以完成弹框了
文章图片
level4
文章图片
仍然是GET传参。
keyword=
报错了,查看源码
文章图片
和level3一样,对<>
进行了过滤。有标签,是双引号包裹
"onfocus=javascript:alert('xss')> //
查看一下源码
文章图片
使用str_replace
— 子字符串替换
第一个参数是要替换的字符串
第二个参数是替换后,要成为的字符串
第三个参数是字符串对象
level5
文章图片
同样,也是GET传参,还是反射型XSS
keyword=
报错了,查看源码
文章图片
htmlspecialchars
函数— 将特殊字符转换为 HTML 实体。
,发生报错
查看源码
文章图片
,试一试,报错了,查看源码
文章图片
<
和>
被编码处理了。script
都被过滤掉了。
使用超链接 keyword=">xss//
,报错了,查源码
文章图片
也把script
过滤掉了,还把href
过滤了
试一试,onfocus
事件,keyword=" onfocus=javascript:alert('xss') //
仍然报错,查看源码
文章图片
不但script
别过滤掉了,就连onfocus
也被过滤掉了
使用大小写混用,还是不行。
使用双写关键字试一试,keyword=" oonnfocus=javascrscriptipt:alert('xss') //
文章图片
看一下level7.php的1代码吧
文章图片
箭头1,是将字符串全部小写化
箭头2,3,4,5,6 都是过滤一些关键词
使用双写,重叠写进行绕过
level8
文章图片
同样还是GET传参,反射型XSS
使用keyword=
试一试,报错了,看源码
文章图片
箭头1,<
和>
被编码了
箭头2,发现,传入的参数值是超链接的地址,script
被替换为scr_ipt
使用 事件触发测试:`keyword=" οnfοcus=javascript:alert(‘xss’)> // 报错了
将javascript:alert('xss')
进行Unicode编码
文章图片
成功,查看一下,level8.php的代码
文章图片
箭头1,将字符串进行全部小写
箭头2,将一些特殊的字符过滤掉,或者替换
箭头3,将过滤后的字符串作为超链接的地址
level9
文章图片
同样是GET传参,属于反射型XSS
使用keyword=
试一试,报错了,查看源码
文章图片
提示,链接不合法!,那我们换一个合法的链接,就百度链接吧,http://www.baidu.com
文章图片
发现正常,没有报错,试试将javascript:alert('xss')
拼接进去,keyword=javascript:alert('xss') http://www.baidu.com
文章图片
耶,没有提示不合法。可是仔细看,javascript
被javascr_ipt
给替换了
试了试大小写混用,失败了,将javascript:alert('xss')
进行Unicode编码
keyword=j
a
v
a
s
c
r
i
p
t
:
a
l
e
r
t
(
1
)
//http://www.baidu.com
javascript:alert('xss')
和http://www.baidu.com
之间必须有//
查看level9.php的代码
文章图片
箭头1,将一些特殊的字符进行过滤
箭头2,使用了strpos
函,判断传入的参数是否含有http://
level10
文章图片
同样还是GET传参,属于反射型XSS
使用keyword=
,发生报错,查看源码
文章图片
发现三个标签,也就是三个参数。
【前端|web靶场 ----- xss-labs】看看哪一个标签能够被突破
使用keyword=&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"
只有t_sort
这个标签有反应。
文章图片
使用keyword=&t_sort=">//
文章图片
发现<
和>
被省略了,只能使用事件来触发
构造keyword=&t_sort=" type="text" onclick="alert('xss')
文章图片
查看一下level10.php的代码
文章图片
得知,起真实作用的参数是t_sort
,并对其进行了特殊字符的过滤。
level11
文章图片
同样是GET传参,属于反射型XSS
使用keyword=
,发生报错
文章图片
将URL的值作为参数传入t_ref
,有三个参数,t_link
,t_history
,t_sort
试一试看哪个起作用
keyword=
没有反应,查看源码
文章图片
t_sort
有反应,但是将"
双引号进行了编码,
进行构造keyword=&t_sort=" type="text" onclick="alert('xss')
推荐阅读
- javascript|canvas核心内容
- css|【玩转CSS】一文带你了解浮动
- html|学成在线官网首页完整版(含psd源文件)
- 前端|刷题,巩固基础的好方法
- 前端|web学习笔记之JavaScript(一)
- 前端笔记|TypeScript基础
- 前端|flex布局
- web前端学习|18.Vue组件化编程
- 前端|直接学 Vue 3 吧 —— 对话 Vue.js 作者尤雨溪