3^1/2+1-e>0怎么构造函数?

一、flag的提交格式

使用在线word转pdf工具,转成word文件,然后拖动就可以查看到flag

/ps/?hmsr=ps_menu(选择——色域,把色域调成1就能看的二维码了,然后就拼接)

图中的说法可以简单的概括为:使用html编码可以使被编码的字符表示一个文本字符,而不是作为html语法,被解析为DOM树中的一部分。

这个问题的重点其实是,你要了解所谓的『绕过』指的是绕过什么。

首先你要明白的是,XSS可能出现在各个地方,仅靠html编码是无法防御的。

这是一个常见的防御XSS的场景。攻击手段为向value值中注入html代码,使其出现一个我们可控的JS域,然后操控JS代码进行XSS攻击。而此处htmlspecialchars阻止了用户输入成为html语法,而是通过编码使其只能成为一个html中的纯文本。因此我们无法插入一个JS域。

和上面有所不同的是,我们已经有了可控的JS域onclick,只需要直接插入JS代码就可以了。但我们的输入被包裹在alert的单引号内,不论输入什么都会被当做JS纯文本。因此我们需要闭合单引号,使我们的输入成为JS语法的一部分。此时htmlspecialchars是无效的,防御这样的XSS必须对用户输入进行JS编码。这样用户输入的单引号就无法起到闭合的作用了。

单引号在html编码和JS编码中的不同:

回到题主的场景,所谓的『绕过』究竟指什么?

在场景2中,后端的防护逻辑是这样的:

检测用户输入中是否含有单引号 -> 将单引号编码为\x27防止闭合

而如果我们将单引号写为',后端防护逻辑就不会认为这是一个单引号,从而不进行JS编码。但在解析DOM树后,'却是一个html纯文本,代表单引号。要知道,on事件中的confirm都只是html的纯文本,那么'所代表的单引号自然也就能产生闭合的作用了。这就是所谓的『绕过』

在html看来,上下等价,onclick中的值都是纯文本:

更新一下,题主在评论中提到了一个新的问题:

这个标签中使用js编码了控制字符圆括号,为什么还是能弹框呢?之前看博文说js编码不能对控制字符进行编码,因为不会起作用,这里为什么起作用了?

我们来仔细分析这个payload,它的原理是,利用autofocus不断自动触发onfocus事件,从而执行后面的JS代码。那么JS代码是什么呢?

首先要明白的是,html可以接受标签中的属性值不被引号括起来,如:

虽然alert(/xss/)作为onfocus的属性值没有被引号括起来,但这样的html写法是没问题的。那么返回来看题主提到的,JS的部分其实应该是:

也就是跳转到javascript:alert\u29这个地址。在JS字符串中,JS编码等同于纯文本,即:

上下等价。而真正触发alert函数的,是页面跳转后的javascript:伪协议,它具有执行后面附带的JS代码的功能。整体执行顺序如下:

因为3和4都执行了js代码,虽然\u0028在3中是以JS纯文本的身份出现,但在4中成功被当做JS语法。由此,题主的疑问也就得到了解答。

那么我们可以发散一下思维:这样跳转到新页面的JS,是不是危害也不算大呢?毕竟跳转到了一个新的域,不在原来的页面上了,是否无法再获得目标页面的cookie?

答案是否定的。对于javascript伪协议,浏览器在进行跳转时,会先计算javascript伪协议后代码的值,若值不为undefined(若有多条语句就判断最后一条),就进行跳转。也就是说,虽然会跳转到新页面(不一定,可以强制使最后一条语句的值为undefined),但在跳转前,伪协议后的代码就已在当前页面被执行,我们还是可以顺利拿到本页面的cookie的。

我要回帖

更多关于 a=e+αβt 求A 的文章

 

随机推荐