XSS攻击(2), XSS分类, 测试方法, 防御方法, 绕过方法

XSS攻击, XSS分类, 测试方法, 防御方法

对于所有类型的XSS渗透测试,确保您有适当的权限进行测试,以避免非法或不受欢迎的行为。
此外,渗透测试工具和框架,如Burp SuiteOWASP ZAP,可以帮助自动化一些测试任务并识别潜在的漏洞点。

一, XSS分类

1. 反射型XSS:

恶意脚本不会被存储在目标网站上,而是通过URL或其他方式传递。
受害者通常会点击一个恶意链接,该链接会引导他们到目标网站,并在URL中传递恶意脚本。
由于目标网站不正确地处理输入,恶意脚本会被执行。

2. 存储型XSS:

恶意脚本被存储在目标服务器上(例如,数据库中),当其他用户访问某些页面时,脚本会被加载并执行。
例如,如果一个论坛的帖子内容没有经过适当的过滤和转义,攻击者可以发布一个带有恶意脚本的帖子,当其他用户查看该帖子时,恶意脚本会在他们的浏览器中执行。

3. DOM型XSS:

这是一种更加高级的XSS攻击,涉及到网页的DOM操作。
攻击者利用网页脚本未正确处理用户输入的事实,通过DOM操作来注入并执行脚本。

二, 测试方法

对于XSS的不同类型,使用的渗透测试方法可能会有所不同。以下是针对反射型、存储型和DOM型XSS的基本渗透测试方法:

  1. 反射型XSS

    • 找寻目标:首先,您需要找到应用程序中所有接受用户输入并在响应中反映这些输入的地方。这通常包括URL参数、POST数据和其他输入向量。

    • 测试注入:尝试插入各种恶意脚本载荷,看看它们是否在响应中原样反映出来。例如,尝试插入或简单的HTML标签,如test来查看它们是否有效。

    • 绕过过滤器:如果应用程序具有某种输入过滤或转义机制,尝试使用不同的编码、大小写或其他技巧来绕过它们。

  2. 存储型XSS

    • 找寻目标:查找应用程序中的所有地方,可以提交数据并在其他地方再次显示这些数据,例如评论、论坛帖子、用户资料等。

    • 测试注入:与反射型XSS相似,尝试插入恶意载荷,但在这里,您希望这些载荷能够被存储并在后续的请求中再次呈现给用户。

    • 检查后端:存储型XSS通常涉及到后端数据库或其他存储机制。了解后端如何处理和存储数据可以帮助您更好地定制攻击。

  3. DOM型XSS

    • 分析JavaScript:此类型的XSS与前端JavaScript代码直接相关。检查代码中如何处理用户输入和如何将数据动态地插入到DOM中。

    • 测试注入:找到应用程序接受但不发送到服务器的输入向量,例如URL的hash部分、localStorage或其他客户端存储。尝试修改这些值并观察应用程序如何响应。

    假设一个网页有以下JavaScript:

    var input = document.getElementById('userInput').value;
    document.getElementById('outputDiv').innerHTML = input;
    

    上面的代码简单地获取一个输入框的值,并将其作为HTML插入到一个div中。这就创建了一个DOM型XSS的机会。
    如果攻击者可以诱使用户在输入框中输入恶意内容,例如:

    <img src=x onerror=alert('XSS')>
    

    当该输入被赋值给outputDivinnerHTML属性时,会触发onerror事件,执行alert(‘XSS’)。

    • 使用开发者工具:浏览器的开发者工具,特别是JavaScript控制台,对于测试和识别DOM型XSS非常有用。

三, 防御方法

1. 适当地转义输出:

当将数据插入HTML、JavaScript、CSS或其他Web上下文时,确保数据被适当地转义。
对于HTML内容,使用HTML实体转义特殊字符,如 < > & "等.

当你从用户那里接收到输入,并且打算在HTML中显示该输入时,使用 htmlspecialchars() 可以帮助确保内容安全地显示,而不会触发XSS攻击。

对于JavaScript内容,确保所有动态数据在插入脚本之前都被适当地转义或编码。
使用开发框架或库提供的安全方法来插入动态内容。

以下是htmlspecialchars()如何转换一些特殊字符的示例:

< 转换为 <
> 转换为 >
" 转换为 "
& 转换为 &
$user_input = $_GET['input'];
safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
echo "
" . $safe_output . "
"
;
2. 验证和过滤输入:

所有从用户、第三方API或其他不受信任的来源接收的数据都应该进行严格的验证。
使用白名单方法验证输入,而不是黑名单方法。这意味着只允许预期的输入,而拒绝所有其他输入。

3. 采用开发框架和库的安全功能:

许多现代的Web开发框架和库,如React Vue.js Angular,都提供了内置的XSS防护机制。
确保您了解并正确使用这些功能,同时保持框架和库的版本是最新的。

4. 使用内容安全策略(CSP):

CSP是一种浏览器特性,允许服务器指定哪些内容可以执行和加载。
通过限制只允许从受信任的来源加载脚本,可以有效地减少XSS的风险。
使用非常严格的CSP策略,例如禁止内联脚本,并仅从可信的源加载外部脚本。

四, 绕过方法

1. 大小写绕过

某些过滤器可能只检查小写版本的危险字符串,如

你可能感兴趣的:(渗透测试,xss,前端)