PortSwigger靶场之Reflected XSS into attribute with angle brackets HTML-encoded通关秘籍

这是一个关于解决跨站脚本攻击 (XSS) 漏洞的靶场。我们的目标是在一个对尖括号进行HTML编码的搜索功能中,通过注入一个HTML属性来触发XSS攻击并调用 alert() 函数。

一、理解漏洞

<form action="/" method="GET">意味着表单提交方式是 GET,请求会拼接参数在 URL 上,如:/?search=1

<input ... name="search" value="1">意味着这是一个搜索框,名为 search,其值是用户输入的内容。

浏览器将 search 参数的值原样放入 HTML 代码中作为 value="..." 属性的内容

接下来,让我们来分析一下这个漏洞。题目说到"角括号被HTML编码"时,这意味着像 <> 这样的字符会被转换成 &lt;&gt;。这通常是一种防御措施,用于防止注入新的HTML标签。例如,如果你尝试输入 <script>alert(1)</script>,服务器会把它变成 &lt;script&gt;alert(1)&lt;/script&gt;,浏览器会把它当作普通文本显示,而不是执行其中的JavaScript代码。

然而,如果应用程序只是对尖括号进行编码,而没有对其他HTML字符(如引号 "',或空格)进行处理,那么它可能仍然存在漏洞。

二、攻击思路

在这种情况下,由于不能注入新的HTML标签,我们需要寻找一种方法来"劫持"一个现有的HTML标签。这通常是通过注入一个新的属性来实现的。

假设搜索框的输入被放在一个 <img> 标签的 src 属性中,例如

html 复制代码
<img src="https://example.com/search_results?q=你的输入">

或者,输入被放在一个 <a> 标签的 href 属性中,例如:

html 复制代码
<a href="https://example.com/search_results?q=你的输入">...</a>

但是本靶场中,我们的输入被直接放入一个HTML标签的属性值中,并且没有对引号进行转义,你就可以通过闭合现有的属性值,然后注入一个新的属性。

例如,如果页面上有这样一个标签:

html 复制代码
<input type="text" value="这里是你的输入">

你的输入 payload为q=" onmouseover="alert(1) 将会被渲染成:

html 复制代码
<input type="text" value="q=" onmouseover="alert(1)">

在这个例子中,value 属性被你输入的 " 闭合了,然后你注入了一个新的属性 onmouseover。当用户将鼠标悬停在这个 input 元素上时,alert(1) 就会被触发。

三、防御措施

这个实验室练习的目的是帮助你理解XSS漏洞的运作方式,以便更好地防御它们。防御此类漏洞的关键是:

  • 对所有用户输入进行正确的HTML编码: 不仅仅是尖括号,还包括引号 (", ') 和其他特殊字符。

  • 使用白名单验证: 如果可能,只允许已知的安全字符和输入。

  • 内容安全策略 (Content Security Policy, CSP): 实施一个严格的CSP,可以阻止来自不信任源的脚本执行。

相关推荐
薛定e的猫咪9 分钟前
2026 年 4 月实测:OpenAI Codex 保姆级教程,从安装到 MCP、Skills 与多智能体协作
前端·数据库·人工智能
I love studying!!!13 分钟前
Web应用程序:用户账户
前端·数据库·sqlite
whuhewei13 分钟前
React性能优化
前端·react.js·性能优化
m0_7381207214 分钟前
渗透知识ctfshow——Web应用安全与防护(三)
android·前端·安全
下北沢美食家24 分钟前
React面试题2
前端·react.js·前端框架
摇滚侠30 分钟前
HTML CSS 演示小米 logo 的变化 border-radius 属性设置圆角
前端·css·html
❆VE❆31 分钟前
虚拟列表原理与实战运用场景详解
前端·javascript·css·vue.js·html·虚拟列表
weixin_4080996733 分钟前
【实战教程】EasyClick 调用 OCR 文字识别 API(自动识别屏幕文字 + 完整示例代码)
前端·人工智能·后端·ocr·api·安卓·easyclick
Bigger36 分钟前
第四章:我是如何扒开 Claude Code 记忆与上下文压缩机制的
前端·claude·源码阅读
还在忙碌的吴小二40 分钟前
在 Mac 上安装并通过端口调用 Chrome DevTools MCP Server(谷歌官方 MCP 服务器)
服务器·前端·chrome·macos·chrome devtools