web靶场 ----- xss-labs

level1

web靶场 ----- xss-labs_第1张图片
可以得到传入的name值,会显示出来,并显示name值的长度。
查看源码
web靶场 ----- xss-labs_第2张图片name值插到了

之间。

主要考察反射型xss

没有对特殊字符进行过滤。

构造
web靶场 ----- xss-labs_第3张图片用于js弹窗的代码顺利执行了

服务器是将我们的恶意代码原封不动的返回了,浏览器才能成功弹窗

查看一下level1.php代码

web靶场 ----- xss-labs_第4张图片
通过GET传参,参数的值存储在变量$str,并放在

之间。

level2

web靶场 ----- xss-labs_第5张图片发现并没有成功。
查看源码
web靶场 ----- xss-labs_第6张图片

发现<>被编码成了html字符实体,<变成了为了<>变成了>

猜测在服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。

可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回

但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。

既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。

要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。

keyword的参数值重新赋值">//

web靶场 ----- xss-labs_第7张图片
htmlspecialchars函数— 将特殊字符转换为 HTML 实体。&替换为&
"替换为"'替换为'<替换为<>替换为>

level3

web靶场 ----- xss-labs_第8张图片试了试,发现报错了。
查看源码
web靶场 ----- xss-labs_第9张图片猜测这次是两处都使用了htmlspecialchars()函数进行过滤

一下子懵掉了,查看level3.php代码

web靶场 ----- xss-labs_第10张图片果然是这样,这里可以通过标签的一些特殊事件来执行js代码

'onfocus=javascript:alert('xss')> //

发现没有直接弹窗,这是因为onfocus事件的特殊性造成的

onfocus 事件在对象获得焦点时发生。

onfocus 通常用于 , 标签,是双引号包裹

"onfocus=javascript:alert('xss')> //

查看一下源码
web靶场 ----- xss-labs_第13张图片
使用str_replace — 子字符串替换

第一个参数是要替换的字符串
第二个参数是替换后,要成为的字符串
第三个参数是字符串对象

level5

web靶场 ----- xss-labs_第14张图片同样,也是GET传参,还是反射型XSS

keyword=

报错了,查看源码

web靶场 ----- xss-labs_第15张图片htmlspecialchars函数— 将特殊字符转换为 HTML 实体。

,发生报错

查看源码

web靶场 ----- xss-labs_第20张图片,试一试,报错了,查看源码

web靶场 ----- xss-labs_第26张图片<>被编码处理了。script都被过滤掉了。

使用超链接 keyword="> xss //,报错了,查源码

web靶场 ----- xss-labs_第27张图片也把script过滤掉了,还把href过滤了

试一试,onfocus事件,keyword=" onfocus=javascript:alert('xss') //

仍然报错,查看源码

web靶场 ----- xss-labs_第28张图片不但script别过滤掉了,就连onfocus也被过滤掉了

使用大小写混用,还是不行。

使用双写关键字试一试,keyword=" oonnfocus=javascrscriptipt:alert('xss') //

web靶场 ----- xss-labs_第29张图片看一下level7.php的1代码吧

web靶场 ----- xss-labs_第30张图片
箭头1,是将字符串全部小写化

箭头2,3,4,5,6 都是过滤一些关键词

使用双写,重叠写进行绕过

level8

web靶场 ----- xss-labs_第31张图片
同样还是GET传参,反射型XSS

使用keyword=试一试,报错了,看源码

web靶场 ----- xss-labs_第32张图片箭头1,<>被编码了

箭头2,发现,传入的参数值是超链接的地址,script被替换为scr_ipt

使用 事件触发测试:`keyword=" οnfοcus=javascript:alert(‘xss’)> // 报错了

javascript:alert('xss')进行Unicode编码

web靶场 ----- xss-labs_第33张图片成功,查看一下,level8.php的代码

web靶场 ----- xss-labs_第34张图片箭头1,将字符串进行全部小写
箭头2,将一些特殊的字符过滤掉,或者替换
箭头3,将过滤后的字符串作为超链接的地址

level9

web靶场 ----- xss-labs_第35张图片
同样是GET传参,属于反射型XSS

使用keyword=试一试,报错了,查看源码

web靶场 ----- xss-labs_第36张图片提示,链接不合法!,那我们换一个合法的链接,就百度链接吧,http://www.baidu.com

web靶场 ----- xss-labs_第37张图片发现正常,没有报错,试试将javascript:alert('xss')拼接进去,keyword=javascript:alert('xss') http://www.baidu.com

web靶场 ----- xss-labs_第38张图片耶,没有提示不合法。可是仔细看,javascriptjavascr_ipt给替换了

试了试大小写混用,失败了,将javascript:alert('xss')进行Unicode编码

keyword=javascript:alert(1)//http://www.baidu.com

javascript:alert('xss')http://www.baidu.com之间必须有//

查看level9.php的代码
web靶场 ----- xss-labs_第39张图片箭头1,将一些特殊的字符进行过滤

箭头2,使用了strpos函,判断传入的参数是否含有http://

level10

web靶场 ----- xss-labs_第40张图片同样还是GET传参,属于反射型XSS

使用keyword=,发生报错,查看源码

web靶场 ----- xss-labs_第41张图片
发现三个标签,也就是三个参数。

看看哪一个标签能够被突破

使用keyword=&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

只有t_sort这个标签有反应。

web靶场 ----- xss-labs_第42张图片

使用keyword=&t_sort=">//
web靶场 ----- xss-labs_第43张图片发现<>被省略了,只能使用事件来触发

构造keyword=&t_sort=" type="text" onclick="alert('xss')

web靶场 ----- xss-labs_第44张图片查看一下level10.php的代码

web靶场 ----- xss-labs_第45张图片得知,起真实作用的参数是t_sort,并对其进行了特殊字符的过滤。

level11

web靶场 ----- xss-labs_第46张图片
同样是GET传参,属于反射型XSS

使用keyword=,发生报错

web靶场 ----- xss-labs_第47张图片将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_第48张图片
t_sort有反应,但是将"双引号进行了编码,

进行构造keyword=&t_sort=" type="text" onclick="alert('xss')

你可能感兴趣的:(前端,xss,php)