首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >隐藏XSS有效载荷

隐藏XSS有效载荷
EN

Security用户
提问于 2013-08-01 02:02:37
回答 2查看 2K关注 0票数 1

场景:页面上有一个具有用户名信息的持久XSS。用户名在页面中显示了三次,只能显示一次,可见的则正确转义。

  1. 如何隐藏有效载荷,使其在显示用户名时不可见?
    • 我的第一个想法是更改显示在有效负载中的文本。
    • 第二个想法是使用隐形字符:

鲍勃“>& nbsp;& nbsp;...有效载荷

  1. 如果不能在特定页面上执行有效负载,如何隐藏有效负载?
  2. 如何防止负载执行不止一次?
    • 是否可以使用某种全局javascript变量作为标志?
EN

回答 2

Security用户

回答已采纳

发布于 2013-08-01 12:42:34

来回答你的三个问题:

修复正确的转义输出:

将XSS修补程序设置为DOM,以便从特定的标记中删除注入的JavaScript。例如,您可以在注入的XSS前面加上一个字符,例如管道(即|),以帮助区分实名:

代码语言:javascript
代码运行次数:0
运行
复制
var nameHtml = document.getElementById('username').innerHTML;
var parts = nameHtml.split("\">|", 2);
document.getElementById('username').innerHTML = parts[0];

所以,如果您的XSS看起来像这样:

代码语言:javascript
代码运行次数:0
运行
复制
">|<script>alert(1);</script>

上面的代码将删除">|之后的所有内容,并将其包括在内。

如果你不能在那个页面上执行代码,你还能做些什么吗?

如果您仍然可以将HTML注入页面,但由于内容安全策略或类似的原因无法获得XSS,则可以使用display: none !important;将用户名元素完全隐藏起来,从而覆盖所有内容。如果它是一个存储的XSS,并且您可以CSRF提交,那么这将节省您的麻烦也。

如何防止您的有效负载执行不止一次?

有许多方法可以做到这一点,包括:

  • 检查页面中是否存在一个ID已知的元素--如果找到了,不要运行,否则创建它。
  • 检查在目标页面中存在的元素上是否存在一个命名的属性--如果找到了,就不要运行,否则添加它。
  • 定义类或变量并检查其是否存在。
  • 如果您试图阻止它在刷新时再次运行,请设置一个cookie。
票数 3
EN

Security用户

发布于 2013-08-01 02:35:11

您可以使用XSS更改可见的用户名,使其看起来是良性的。例如,注入的脚本可以执行如下操作:

代码语言:javascript
代码运行次数:0
运行
复制
document.getElementById("displayedUsername").innerHTML = "john";

要回答问题的第二部分,可以使用全局变量确保代码只运行一次。代码应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var alreadyExecuted;
if (alreadyExecuted !== true) {
  alreadyExecuted = true;
  // your code here

}
票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/39889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档