龙空技术网

XSS 绕过WAF和字符限制

因特耐特杂货铺 405

前言:

目前我们对“ajax调用ashx”大致比较关心,各位老铁们都需要分析一些“ajax调用ashx”的相关内容。那么小编同时在网上汇集了一些对于“ajax调用ashx””的相关文章,希望咱们能喜欢,我们快快来了解一下吧!

  翻译文章,原文: 

几个月前,我在我的Twitter中分享了一个然后XSS WAF和字符限制的方法,这是一个私人的赏金项目。今天我将要分享更多的关于如何绕过的技术细节。希望对大家有所帮助。

回到2019年,我那时候正测试一个Web应用程序,这个应用程序允许用户创建相册,并可以上传图片,类似下图:

当我单击“编辑”时,可以重命名图片,通常研究者通过改变图片的名称来测试是否存在XSS,我也是这么做的,用了如下的payload:

xsstest'">{{7*7}}

然而我注意到以下几个问题

•输入有15个字符限制,所以我的输入变成xsstest'">{{7*7

•所有特殊字符均已正确转义

•最后,在我尝试重新加载这个相册的时候,WAF把页面重定向到了 /error.aspx?code=500,我只能重新把相册命名为xsstest来重新加载相册。

看起来此输入已经受到XSS攻击方面很好的保护了。然后,我开始使用其他可用选项并在浏览器中连接Burp Suit工具,并保持打开状态以捕获HTTP历史记录中的所有后台请求。然后,当我浏览“ HTTP历史记录”选项卡时,一个后台请求端点引起了我的注意,就像{albums:[{"id":"“,” value“:” on“}]}。该请求是针对相册“幻灯片放映”选项的,并且该页面的来源为:

<a href="; title="xsstest" rel="lightbox[gallery]">84**00000</a>

所以在这个新的generateImageList.ashx端点中

•用户输入未正确转义

•没有WAF检测

但是我们仍然有15个字符的限制,这使该xss毫无用处。在这种情况下,我们可以想到的最小的xss有效负载是"oncut="alert(),当我们在Windows上按CTRL + X并在键盘上的OS X上按COMMAND + X时,这将导致空白弹出窗口:(注:oncut事件是当input内容被剪切的时候触发)

<a href="; title=""oncut="alert()" rel="lightbox[gallery]">84**00000</a>

我尝试了所有可能的方法来绕过此字符限制,但无法做到。我在此处停止测试,并在“待办事项”列表注释中保存了有关此端点的信息,以便在再次测试此资产时在此处查看。大约七个月后,我再次开始测试该网站,并再次检测在此端点。现在注意到,我可以上传相册中的多张照片,并通过选择相册中的所有照片,“幻灯片放映”选项请求端点更改为{albums:[{"id":"","value":"on"}]},该页面来源为:

<a href="; title="xsstest'">" rel="lightbox[gallery]">84**00000</a><a href="; title="xsstest'">" rel="lightbox[gallery]">84**00001</a>

因此,现在我们在这里进行多次注入点,那么,为什么不上传5张图片并使用Twitter提到的payload呢?

Payload:

•1st Injection: */</script><!--

•2nd Injection: */.domain)/*xxx

•3rd Injection: */(document/*xx

•4th Injection: */prompt/*xxxxx

•5th Injection: "><script>/*xss

最终注入后的页面为:

<a href="; title="">  <script>/*xss" rel="lightbox[gallery]">84**00000</a><a href="; title="*/prompt/*xxxxx" rel="lightbox[gallery]">84**00001</a><a href="; title="*/(document/*xx" rel="lightbox[gallery]">84**00002</a><a href="; title="*/.domain)/*xxx" rel="lightbox[gallery]">84**00003</a><a href="; title="*/</script><!--" rel="lightbox[gallery]">84**00004</a>

现在访问:{albums:[{"id":"","value":"on"}]}就可以执行这个payload:

Boom

现在您可能会问为什么我在第二到第五有效载荷中多次使用了x字符?答案是相册图像是根据名称长度+上传时间排序的。因此,我多次使用x字符使所有图像名称的长度相同,因此,当我上载图像时,它会根据图像上载时间进行排序。

References

Twitter:

标签: #ajax调用ashx