前端|web靶场 ----- xss-labs

level1 前端|web靶场 ----- xss-labs
文章图片

可以得到传入的name值,会显示出来,并显示name值的长度。
查看源码
前端|web靶场 ----- xss-labs
文章图片
name值插到了 之间。
主要考察反射型xss
没有对特殊字符进行过滤。
构造
前端|web靶场 ----- xss-labs
文章图片
用于js弹窗的代码顺利执行了
服务器是将我们的恶意代码原封不动的返回了,浏览器才能成功弹窗
查看一下level1.php代码
前端|web靶场 ----- xss-labs
文章图片

通过GET传参,参数的值存储在变量$str,并放在之间。
level2 前端|web靶场 ----- xss-labs
文章图片
发现并没有成功。
查看源码
前端|web靶场 ----- xss-labs
文章图片

发现<>被编码成了html字符实体,<变成了为了<>变成了>
猜测在服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。

可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回
但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。
要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。
keyword的参数值重新赋值">//
前端|web靶场 ----- xss-labs
文章图片

htmlspecialchars函数— 将特殊字符转换为 HTML 实体。&替换为&
"替换为" '替换为' <替换为< >替换为>
level3 前端|web靶场 ----- xss-labs
文章图片
试了试,发现报错了。
查看源码
前端|web靶场 ----- xss-labs
文章图片
猜测这次是两处都使用了htmlspecialchars()函数进行过滤
一下子懵掉了,查看level3.php代码
前端|web靶场 ----- xss-labs
文章图片
果然是这样,这里可以通过标签的一些特殊事件来执行js代码
'onfocus=javascript:alert('xss')> //
发现没有直接弹窗,这是因为onfocus事件的特殊性造成的
onfocus 事件在对象获得焦点时发生。
onfocus 通常用于 , , 和.
点击当前页面的输入框就可以完成弹框了
前端|web靶场 ----- xss-labs
文章图片

level4 前端|web靶场 ----- xss-labs
文章图片
仍然是GET传参。
keyword=
报错了,查看源码
前端|web靶场 ----- xss-labs
文章图片
和level3一样,对<>进行了过滤。有标签,是双引号包裹
"onfocus=javascript:alert('xss')> //
查看一下源码
前端|web靶场 ----- xss-labs
文章图片

使用str_replace — 子字符串替换
第一个参数是要替换的字符串
第二个参数是替换后,要成为的字符串
第三个参数是字符串对象
level5 前端|web靶场 ----- xss-labs
文章图片
同样,也是GET传参,还是反射型XSS
keyword=
报错了,查看源码
前端|web靶场 ----- xss-labs
文章图片
htmlspecialchars函数— 将特殊字符转换为 HTML 实体。
,发生报错
查看源码
前端|web靶场 ----- xss-labs
文章图片
,试一试,报错了,查看源码
前端|web靶场 ----- xss-labs
文章图片
<>被编码处理了。script都被过滤掉了。
使用超链接 keyword=">xss//,报错了,查源码
前端|web靶场 ----- xss-labs
文章图片
也把script过滤掉了,还把href过滤了
试一试,onfocus事件,keyword=" onfocus=javascript:alert('xss') //
仍然报错,查看源码
前端|web靶场 ----- xss-labs
文章图片
不但script别过滤掉了,就连onfocus也被过滤掉了
使用大小写混用,还是不行。
使用双写关键字试一试,keyword=" oonnfocus=javascrscriptipt:alert('xss') //
前端|web靶场 ----- xss-labs
文章图片
看一下level7.php的1代码吧
前端|web靶场 ----- xss-labs
文章图片

箭头1,是将字符串全部小写化
箭头2,3,4,5,6 都是过滤一些关键词
使用双写,重叠写进行绕过
level8 前端|web靶场 ----- xss-labs
文章图片

同样还是GET传参,反射型XSS
使用keyword=试一试,报错了,看源码
前端|web靶场 ----- xss-labs
文章图片
箭头1,<>被编码了
箭头2,发现,传入的参数值是超链接的地址,script被替换为scr_ipt
使用 事件触发测试:`keyword=" οnfοcus=javascript:alert(‘xss’)> // 报错了
javascript:alert('xss')进行Unicode编码
前端|web靶场 ----- xss-labs
文章图片
成功,查看一下,level8.php的代码
前端|web靶场 ----- xss-labs
文章图片
箭头1,将字符串进行全部小写
箭头2,将一些特殊的字符过滤掉,或者替换
箭头3,将过滤后的字符串作为超链接的地址
level9 前端|web靶场 ----- xss-labs
文章图片

同样是GET传参,属于反射型XSS
使用keyword=试一试,报错了,查看源码
前端|web靶场 ----- xss-labs
文章图片
提示,链接不合法!,那我们换一个合法的链接,就百度链接吧,http://www.baidu.com
前端|web靶场 ----- xss-labs
文章图片
发现正常,没有报错,试试将javascript:alert('xss')拼接进去,keyword=javascript:alert('xss') http://www.baidu.com
前端|web靶场 ----- xss-labs
文章图片
耶,没有提示不合法。可是仔细看,javascriptjavascr_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的代码
前端|web靶场 ----- xss-labs
文章图片
箭头1,将一些特殊的字符进行过滤
箭头2,使用了strpos函,判断传入的参数是否含有http://
level10 前端|web靶场 ----- xss-labs
文章图片
同样还是GET传参,属于反射型XSS
使用keyword=,发生报错,查看源码
前端|web靶场 ----- xss-labs
文章图片

发现三个标签,也就是三个参数。
【前端|web靶场 ----- xss-labs】看看哪一个标签能够被突破
使用keyword=&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"
只有t_sort这个标签有反应。
前端|web靶场 ----- xss-labs
文章图片

使用keyword=&t_sort=">//
前端|web靶场 ----- xss-labs
文章图片
发现<>被省略了,只能使用事件来触发
构造keyword=&t_sort=" type="text" onclick="alert('xss')
前端|web靶场 ----- xss-labs
文章图片
查看一下level10.php的代码
前端|web靶场 ----- xss-labs
文章图片
得知,起真实作用的参数是t_sort,并对其进行了特殊字符的过滤。
level11 前端|web靶场 ----- xss-labs
文章图片

同样是GET传参,属于反射型XSS
使用keyword=,发生报错
前端|web靶场 ----- xss-labs
文章图片
将URL的值作为参数传入t_ref,有三个参数,t_linkt_historyt_sort试一试看哪个起作用
keyword=alert('xss')&t_link="type="text"&t_history="type="text"&t_sort="type="text"
没有反应,查看源码
前端|web靶场 ----- xss-labs
文章图片

t_sort有反应,但是将"双引号进行了编码,
进行构造keyword=&t_sort=" type="text" onclick="alert('xss')

    推荐阅读