【投稿】探索挖掘xss中括号被转义的绕过措施

【投稿】探索挖掘xss中括号被转义的绕过措施

0x00 前言

好久不见各位!这两天忙着开学,今天才安顿好,终于可以闲下来给大家更新啦。其实这篇文章本来是想着开学前发的,可惜时间实在是不充裕就只能等着开学后发了。

注:本文给出的绕过措施是一个替代方案。

0x01 正文

首先我想问读者朋友们一个问题:在挖掘xss时是否遇到过转义括号的问题?我相信不少朋友遇到过,例如我这里拿不久前保安姐发的那篇文章的案例给大家看一下:

d2b5ca33bd20250304005820

这个问题还是比较棘手的,一般我们用到括号都是想执行一些函数,但是现在括号被转义了我们就得另寻他路。

不过我想知道有没有读者朋友看过我在轩白公众号(隼目安全)发的一篇文章:

d2b5ca33bd20250304005830

这篇文章是我写的,我在这篇文章中分析了一个恶意链接,攻击者主要是利用了网站js造成了一个页面替换效果,不过这都不是重点,重点是攻击者是通过两个反引号调用的函数:

d2b5ca33bd20250304005847

这是我去年写的文章,我当时在分析这个链接时看到这个操作后令我无比震撼,整个利用链都很巧妙,各位如有兴趣可以去看一下那篇文章。

接下来我在本篇文章中给大家演示一下通过两个反引号调用函数的实际操作:

console.log`1`;

d2b5ca33bd20250304005902

alert`xss`;

d2b5ca33bd20250304005908

我觉得还是很有参考价值的,至于到底怎么实现的,我们就得从es6当中找答案了(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals):

d2b5ca33bd20250304005915

d2b5ca33bd20250304005923

通过描述我们可以知道,在js中两个反引号引起来的内容叫做模板字面量,也叫做模板字符串,一般会被用作字符串插值,也就是像如下这种效果:

let expression = 'test';
`string text ${expression} string text`

d2b5ca33bd20250304005931

我们可以通过改变expression变量的值创建不同的字符串,这就是模板字符串的功能之一,另一个功能就是它可以与自定义标签函数一起使用,来对模板字面量的不同部分执行任何操作。具体调用方法:

d2b5ca33bd20250304005939

也就是说上文中我演示的通过两个反引号调用的那两个函数就叫做标签函数。MDN演示:

d2b5ca33bd20250304005945

最重要的是反引号并不会被转义,例如我就拿php中的经典函数htmlspecialchars进行测试:

d2b5ca33bd20250304005953

效果显而易见,所以我认为反引号是我们在调用函数时一个比较不错的替代方案,当然仅限于挖掘xss当中。

© 版权声明
THE END
喜欢就支持一下吧
点赞54赞赏 分享
评论 共2条

请登录后发表评论

    请登录后查看评论内容