在不使用实际字符的情况下关闭 HTML 标记

信息安全 xss html
2021-08-18 03:33:00

我目前正在学习如何在网站上执行 XSS,但有一个不断出现的问题,我确信它一定很容易绕过。很多时候,网站会过滤掉引号和/或“< >”。就实际脚本而言,这不是一个大问题,因为可以通过使用不同的方法或通过混淆脚本来绕过它,真正的问题是当我需要从 HTML 标记中转义时。例如:

<input class="user-control-search-textbox" type="text" name="tx_indexedsearch[sword]" value="onmouseover='javascript:alert(0)'" id="tx-indexedsearch-searchbox-sword" />

如您所见,javascript 不会执行,因为它位于 value 引号内,因此不被视为可执行代码,而是被视为实际搜索。问题是我无法让它摆脱它,因为当我把"> 它放进去时

value="&quot;&gt;onmouseover='javascript:alert(0)'" 

因此标签没有关闭,因为没有使用实际字符。

我想知道的是是否可以在不使用实际字符(在本例中为"and >)的情况下关闭标签因为它们已被过滤掉,或者我是否可以以某种方式混淆字符但仍将其读取为关闭标签。

如果有人可以帮助我,那么我非常感谢你,这可能是一个愚蠢的问题。

2个回答

不是一般的,没有。

UTF-7这样的编码级别的攻击通过指定 ASCII 字符来产生字节内容,通过欺骗浏览器的编码猜测启发式来产生非常不同的解释,但大多数现代浏览器都精通这种事情。

如果页面最终由有缺陷的移动网关、语言翻译服务或其他试图通过将非 ASCII 字符转换为 ASCII“等效字符”来提供帮助的系统处理,那么全角版本可能会转换为&gt;.

请参阅http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#attribute-value-(double-quoted)-state,它详细描述了 HTML 解析的工作原理.

它说除了"&可以将 html 解析器状态从属性值更改为其他状态之外,没有任何东西。