对Akamai的XSS绕过

admin 2024年1月15日11:19:21评论24 views字数 1538阅读5分7秒阅读模式

在本文中,我们将开始探索绕过WAF的复杂艺术。Akamai 阿卡迈是一家全球领先的云计算、安全和内容交付服务提供商。

在某个接口发现参数 “returnUrl”,他的存在就像夜晚的灯塔一样闪闪发光。

作为测试人员,每当我们遇到这种情况时,应该都会测试下:

javascript:alert(1)

但是被拦截了。

对Akamai的XSS绕过

现在进入分析阶段,我删除了 javascript: 后面的所有内容,以检查是否可以使用JavaScript协议,幸运的是,返回200,证明是可以的:

对Akamai的XSS绕过

由于发现 javascript: 之后的 “alert” 被拦截,我继续评估其他常见JavaScript函数。包括:

javascript:prompt()javascript:console.log()javascript:eval()

所有尝试都以失败告终。很明显,Web应用程序的安全措施是不错的。

我没有放弃,决定探索更高级的JavaScript函数,以确定是否有任何函数可以绕过安全防御。包括:

javascript:atob()  // base-64编码String.fromCharCode()

但这些还是失败了。

经过详尽的测试,我发现 decodeURI() 未被阻止,这为利用该漏洞提供了一条潜在的途径。

对Akamai的XSS绕过

decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。

javascript:decodeURI("<h1>vita</h1>")

 点击后我们可以看到解码的URI的结果,它将显示如下所示:

对Akamai的XSS绕过现在是时候深入挖掘了,在 decodeURI 函数中插入一个payload:

javascript:decodeURI("<img src=x onerror=alert(1)>")

又被拦截了。即使没有 onerror=alert(1) ,仍然被拦截,这表明WAF有效地过滤了恶意标签。

我检查了所有的标签,除了一个标签 <button> 是允许的,其他的标签都被拦截了!所以我尝试测试:

<button autofocus onfocus=alert()>

结果又被拦截了。

说明WAF继续检查了标签的事件,我没有浪费任何时间。迅速对所有事件进行了一次遍历,以确定哪一个触发了响应:

对Akamai的XSS绕过

发现只有“onbeforetoggle” 是允许的。

之后,我访问了PortSwigger并构造了一个包含 <button> 标签和'onbeforetoggle'事件的payload列表,发现这是仅有的两个可用选项:

对Akamai的XSS绕过

我尝试了这两种选择,但都没有成功,主要是因为WAF有效地阻止了 alert(1) 。

如何克服这个问题呢?由于在 'JavaScript:' 之后,你可以声明变量。因此,我运用了一点创造力,将 alert() 函数分为三个独立的变量,类似于:javascript: var a = 'ale'; var b = 'rt'; var c = '()' 。然后,我将这些变量连接到 decodeURI 函数中的字符串中,得到了最终的有效负载,看起来像这样:

javascript:var a="ale";var b="rt";var c="()";decodeURI("<button popovertarget=x>Click me</button><hvita onbeforetoggle="+a+b+c+" popover id=x>Hvita</hvita>")

按钮button被点击时,通过使用 popovertarget 事件,可以将 id=x 的弹出框元素(这里指hvita 标签)显示,而自定义标签hvita 中有一个 onbeforetoggle 事件,该事件用于标签在显示之前触发 alert()函数。

最终成功了!

对Akamai的XSS绕过

原文始发于微信公众号(薯条机器猫):对Akamai的XSS绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月15日11:19:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   对Akamai的XSS绕过https://cn-sec.com/archives/2394507.html

发表评论

匿名网友 填写信息