我有一个关于元素的问题。我知道这个元素已经被废弃很久了,但是在渗透测试中,我们将以下攻击向量插入到textarea中:
<plaintext onmouseover="(function(){ console.log(document.domain); })();">XSS的其他攻击向量也会被阻塞,甚至使用事件的HTML元素也会被阻塞。
前端使用的框架是JSF。
我知道明文命令浏览器将以下内容视为简单的文本而不进行任何格式化,但是<plaintext>允许XSS是否正常呢?
有没有人听说过这件事,或有任何关于这种行为的背景资料?
发布于 2021-10-21 13:58:24
这看起来不像是一次成功的XSS攻击。
首先,<plaintext>元素在这个上下文中并不特殊。浏览器仍然支持它,但是HTML5非常灵活,允许您编写任何标记。您可能还可以添加一个具有等效效果的<foo>标记或<custom-element>。
其次,也是更重要的是,<textarea>和<title>元素有一个特殊的内容模型(可逃避的原始文本元素):它们只允许文本内容,并以下一个</序列结尾,尽管符号转义仍然有效。还可以考虑在超文本标记语言解析算法中搜索textarea元素的特殊处理。
因此,您可能已经插入了普通文本内容,而不是一个参与DOM的HTML元素。
符合标准的浏览器将解析HTML片段
<textarea>surrounding <foo onmousehover="..."> content</textarea>作为DOM
HTMLElement "textarea"
children:
- #text "surrounding <foo onmousehover="..."> content"而不是像DOM那样
HTMLElement "textarea"
children:
- #text "surrounding "
- HTMLElement "plaintext"
onmousehover: "..."
- #text " content"但是,textarea元素的这种行为有时会导致混乱,从而允许XSS。上面链接的HTML解析算法中的一个例子提到了textarea元素中的注释问题。如果应用程序构造DOM并将DOM序列化为HTML文档,则解析该文档可能会产生不同的DOM。例如:
https://security.stackexchange.com/questions/256324
复制相似问题