• xss.haozi.me靶机 通关


    0x00

    没有任何过滤可以直接注入

    0x01

    使用了testarea标签将我们的输入内容以普通的字符串进行展示
    但是我们可以将标签进行闭合

    0x02

    我们依然可以先闭合之后添加属性a" οnclick="alert(1)

    当我们点击输入框后可以实现弹窗

    0x03

    我们可以看到它通过热品replace()函数将()替换成了空格
    但是在html中我们可以使用``来代替()

    0x04

    我们可以看到它将我们的()和``都替换成了空
    但是我们可以提前编码

    为什么可以这样写呢?因为解码是有顺序的url>html>js

    0x05

    可以看到它将我们的的输入进行了注释
    但是在html中注释有两种写法
    所以我们的payload可以这样写:--!>

    0x06

    我们可以看到它将auto和on开头的事件都进行了过滤并忽略了大小写
    但是html是支持换行的所以我们可以写成
    type=image src=x onerror
    =alert(1)
    那么不是说将on事件进行了过滤吗?为什么我们依然能使用
    你需要看清楚它写的正则是以on或auto开头但是它必须以=号结尾
    所以我们就可以利用换行进行绕过

    0x07

    我们可以看到它的正则写的是以<开始,匹配一个<后面可能跟着一个/或者没有跟/
    匹配一个或多个非>字符的字符,匹配>字符
    也就是说这个正则可以过滤html中的任意标签
    我们可以利用html中的一个特性就是标签不必必须写全我们的html可以自动补齐标签

    0x08

    它将我们的输入放在了style标签中并且将style的闭合做了过滤
    但是我们依然可以利用html的特性进行绕过
    我们可以使用上面使用过的方法就是换行
    也可以使用在结束标签中加一个空格html依然可以执行

    0x09

    这串代码的意思是必须要有https?://www.segmentfault.com/ 
    所以我们可以将payload写在后面
    https://www.segmentfault.com/sss" οnerrοr="alert(1) 

    0x0A

    我们可以看到他将一些符号进行了过滤所以导致我们没办法使用属性
    但是我们可以自己制作一个js文件去让js解析
    网站也给我们准备了一个可以访问的文件
    https://www.segmentfault.com.haozi.me/j.js

    所以我们可以写成这样
    https://www.segmentfault.com.haozi.me/j.js

    0x0B

    它使用了toUpperCase()将所有内容都转成了大写
    在HTML中标签是不区分大小写的但是path会区分大小写
    所以我们需要将path部分进行编码

    0x0C

    这里只是对将script替换成了空字符,我们依然可以使用第十二关的方法来注入
    如果一定要使用script标签的话可以使用双写进项绕过

    0x0D

    它这里将< / " ' 都进行了过滤
    显然我们需要逃逸出被注释掉的alert()
    这里我们可以使用换行逃逸出alert()然后使用-->注释掉后面的‘)
            xxx
            alert(1)
            -->

    0x0E

    它在所有以<的开头都用了替换使我们的标签失效
    这里我们需要使用到一个技巧html中s还有一种特殊的写法 ſ
    "ſ" 是拉丁字母 "s" 的一种历史形式,称为长 s(long s)
    <ſvg/οnlοad=alert(1)>

    0x0F

    我们发现它将我们的特殊字符替换成了html实体编码放入到了onerrror中
    但是我们的onerror事件中html实体编码是可以正常转换调用的
    我们可以先将前边的闭合,然后使用换行或者 ; 
     aaaa');alert(1)//

    0x10

    我们可以看到它将我们的输入直接放在了window.data
    这相当于window直接调用函数所以我们直接输入
    alert(1)

    0x11

    我们可以看到它将我们特殊符号和换行符等都进行了过滤
    但是我们依然可以尝试先闭合")虽然它将换行符过滤了但是我们依然可以使用 ; 
    最后使用//注释符将后面的"注释
    ");alert(1)//

    0x12

    可以看到它使用将"替换成了\\" 当我们输入后它会将我们的"进行转义防止我们闭合
    但是我们只需要在将转义符转义一次它的转义符就会失效当我们输入\"这样的内容后
    实际就会变成 \\" 这样它的转义符就会失效我们就可以完成闭合
    \");alert(1)//

  • 相关阅读:
    计算机毕业设计之java+ssm的图书销售管理信息系统
    【MyBatisⅡ】动态 SQL
    穿越风波,“长红”的直播电商依然扎根产业和消费者
    springcloudalibaba架构(5):Sentinel熔断规则
    自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -@Autowried
    leetcode 93: 复原IP地址 (面试常考)
    喜报!震坤行荣登“2023上海百强企业”两项百强榜单!
    Cholesterol-PEG-Acid CLS-PEG-COOH 胆固醇-聚乙二醇-羧基修饰肽类化合物
    在MyBatis中,可以使用动态SQL语句来实现对数据的上移、下移和置顶操作
    (附源码)springboot电影院售票与管理系统 011449
  • 原文地址:https://blog.csdn.net/CvtNhso/article/details/136513717