XSS-labs通关

XSS攻防实战:从Level1到Level20的服务器源码解析

Level1

在这里插入图片描述
分析服务器源码
在这里插入图片描述
看到上图的两处还比较有用,意思是只要弹出弹框就会自动到下一关,同时记录payload的长度,因此是无过滤我们直接构造payload
Payload:name=<script>alert(/xss/)</script>
在这里插入图片描述
直接进入第二关

Level2

在这里插入图片描述
简单尝试
在这里插入图片描述
发现没有起作用反而完整的显示在页面中,因此推断输入的语句被实体化了,我们分析服务器源码看看
在这里插入图片描述
可以看到htmlspecialchars()
htmlspecialchars()作用:把预定义的字符转换为HTML实体
预定义的字符有:

& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >

再看看网页源码
在这里插入图片描述
可以看到<和>被编码成html字符实体,接着往下看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回,但是问题是这里的js代码在标签属性值中,浏览器是无法执行的,那么我们只需要将属性的引号和标签先闭合,因此我们将<input>先闭合,然后构造payload即可弹窗
Payload:"><script>alert(/xss/)</script>
在这里插入图片描述

Level3

在这里插入图片描述
发现和第二关有点类似,这里仍然是将全部的输入打印到了页面上
查看服务器源码
在这里插入图片描述
可以看到仍然使用了htmlspecialchars(),但不同的是第二个箭头处也使用了
那么我们继续看网页源码
在这里插入图片描述
也是多在标签处使用了html实体,也就是两处编码成html实体
因此<script>不能使用了,因为<和>都会被转义,我们需要通过<input>标签的一些特殊事件来执行js代码
因此我们只需要先闭合value的’,然后在构造我们的特殊事件即可
Payload:'onfocus=javascript:alert('xss') >
在这里插入图片描述
这里仍没有弹框,这是因为这个onfocus事件的特殊性造成的
onfocus事件在对象获得焦点时才发生,且通常用于<input><select><a>
因此我们点下空白输入框即可发生弹框
在这里插入图片描述

Level4

在这里插入图片描述
尝试<script>alert('xss')</script>
在这里插入图片描述
可以看到输入框内的<和>不在了
查看网页源码
在这里插入图片描述
发现第一个箭头处<和>进行了编码html实体
第二个箭头处将<和>进行了删除
我们再看一下服务器源码
在这里插入图片描述
可以看到利用str_replace()将<和>替换为空,同时进行html实体
因此我们可以利用level3中的语句进行拼接,因为其没有使用<和>
Payload:" onfocus = javascript:alert('xss') >
在这里插入图片描述
可以看到成功了。
注意:输完payload后,鼠标再次点击空白输入框才能生效。

Level5

在这里插入图片描述
输入如上命令,发现输入框变成了<scr_ipt>alert('xss')</script>,那么推断是将script换成了scr_ipt
分析网页源码
在这里插入图片描述
第一处被html实体编码了<和>,第二处将<script换成了<scr_ipt
再分析服务器源码
在这里插入图片描述
可以看到将传入的值全变成小写,将<script替换为<scr_ipt,将on替换为o_n,因此script和onfocus等都不能用了
因此我们使用其他标签,构造payload即可
Payload:"><a href=javascript:alert('xss')>xss</a>
在这里插入图片描述
然后点击超链接即可
在这里插入图片描述

Level6

在这里插入图片描述
尝试我们的语句
在这里插入图片描述
发现和level5的情况相似
查看网页源码:
在这里插入图片描述
查看服务器源码:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值