Xss-labs靶场训练
第一关:
查看页面源代码回显playload长度:
插入一段js代码,get传参,一个简单的插入
顺利来到第二关,二话不说先直接尝试插入,并没有成功:
查看页面源代码:
特殊字符被实体转义了
我们需要闭合掉双引号即可,构造payload,这一关是闭合绕过
来到第三关,随便输入一个闭合弹窗试试,符号也被实体化了:
查看php源码
PHP htmlspecialchars() 函数
我们可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过
看一下w3cschoo的相关介绍
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面图片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload,直接在输入框处输入 ‘ οnfοcus=javascript:alert() ‘,回车后再次聚焦输入框就会出现弹窗了:
第四关:
查看源代码发现是双引号闭合事件
这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload
第五关:
看上去像双引号闭合,但应该不会三关都是onfocus事件,查看源码确实不是
查看php源码,将字母小写化、script和on都被替换掉了,还有htmlspecialchars() 函数把<>过滤了
尝试用超链接过滤试试,添加一个标签得闭合前面的标签,构建payload
"> <a href=javascript:alert()>xss</a> <"
点击xss就可以通关了
第6关:
还是使用上一关的playload查看页面的源码显示,同样是特殊字符被过滤掉和href被_替换。
查看php源码,果然很多字段被过滤了,看看大小写能不能绕过
“> <sCript>alert()</sCript> <”能绕过,alert中不能带参数(不知道为啥)
试了其他代码也是可以的
"> <a hRef=javascript:alert()>xss</a> <"
" oNfocus=javascript:alert() "
第7关:
查看源码,没有发现有什么问题
查看php源码,发现过滤了很多字段
我们可以利用双拼写来绕过,比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on,比如script,可以写成scscriptript,当script被删掉的时候,就变成了script
<a hhrefref=javasscriptcript:alert()>xss</a>
第八关:
点击查看友情链接
查看php源码过滤掉了src、data、onfocus、href、script、"(双引号)
网上查询了解到利用href的隐藏属性自动Unicode解码,插入一段js伪协议
javascript:alert()
说明不需要自己加href标签,直接插入javascript:alert()的Unicode解码在线Unicode编码解码
解码后:
javascript:alert()
在输入框输入解码后的Unicode点击友情链接
第九关,看样子应该和前一道题差不多,试试看
不成功,Unicode被
当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload
javascript:alert()/* http:// */(对于这个用法我也不是很清楚,后续自己再去关注一下,或者那个大佬可以指点迷津)
第十关
先测试一下关键字
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
被实体化了,看一下php源码
还有其他隐藏的传参方法,这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签,但是我们还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload
第11关
直接看源码
可以看到上一关的那个变量$t_sort
已经被函数htmlspecialchars()洗礼了,$t_ref
,它是接收了$_SERVER['HTTP_REFERER']
这个请求头
看网上抓包添加referer字段,但是我试了出不来
后面我尝试在拦截包的地方发送就不repeater了
第二种方法