web渗透测试(7):跨站点脚本(XSS)

发布时间 2023-07-31 16:15:48作者: 珊瑚贝博客

跨站点脚本源于信息发送给应用程序用户时缺乏编码。这可以用来注入任意的HTML和JavaScript; 结果是该有效载荷在合法用户的网络浏览器中运行。与其他攻击相反,XSS漏洞针对应用程序的用户,而不是直接针对服务器。

 

一些漏洞利用的例子包括:

  • 注入假登录表单;
  • 检索合法用户的Cookie;
  • 注入浏览器的漏洞;
  • 让用户在Web应用程序中执行任意操作;
  • ...

 

在本节中,我们将只关注跨站脚本的检测。您将不得不等待关于此主题的全面练习,以获取有关如何利用这些漏洞的更多详细信息。

 

XSS漏洞最简单也是最常见的证据就是弹出一个警告框。这个有效载荷有很多优点:

  • 它表明可以触发JavaScript;
  • 这很简单;
  • 它是无害的。

 

要触发弹出窗口,您只需使用以下有效负载:alert(‘hello’)。

 

如果你在注入HTML代码,你需要告诉浏览器这是JavaScript代码。你可以使用<script>标签来做到这一点:

<script>alert('hello');</script>

 

在测试XSS时,需要记住两件重要的事情:

  1. 您从服务器获得的响应可能不是唯一的信息将被回显的地方。如果您注入了有效负载内容并且您在页面A中正确编码了它,这并不意味着此信息将在页面B中正确编码。
  2. 如果您发现编码存在问题,但无法运行您的XSS有效负载,则其他人可能能够运行。报告编码问题总是很重要的,即使某些保护措施阻止了您执行您的有效负载。安全是一个不断发展的领域,每周都会发布新的技巧。即使您现在不能利用XSS漏洞,您或其他人也许可以在稍后获得另一个有效负载。

 

XSS有三种类型:

  1. 反映:有效载荷直接回应。
  2. 存储:有效负载可以直接在响应中回显,但更重要的是,当您返回此页面或其他页面时,会在响应中回显。有效载荷存储在应用程序的后端。
  3. 基于DOM的:有效载荷不在页面中回显。它在浏览器呈现页面时动态执行。

 

在测试XSS时,您需要阅读发回的HTML页面的来源,您不能只是等待弹出警报框。检查哪些字符被编码,哪些字符不被编码。从这个角度来看,你可能会发现一个有效载荷。

 

一些浏览器提供了针对XSS的内置保护。这种保护可以由服务器启用或禁用(它在ISO中已被禁用)。如果您发现您的有效载荷直接在页面中回显,但没有警报框弹出,可能是因为这种保护。您也可以通过告诉浏览器将其禁用来禁用此保护。例如,在Chrome中,可以通过使用该选项运行Chrome来完成此操作--disable-xss-auditor。

 

Example 1

第一个易受攻击的例子就是让你开始了解当你找到XSS时发生的事情。使用基本的有效载荷,你应该能够得到一个警告框。

 文件代码:

<?php require_once '../header.php'; ?>
<html>
Hello 
<?php 
    echo $_GET["name"];
?>

<?php require_once '../footer.php'; ?>

 

一旦你发送你的有效载荷,你应该得到像这样的东西:

 

 

确保您检查HTML页面的源代码,以确定您作为请求的一部分发送的信息在没有任何HTML编码的情况下回显。

 

Example 2

<?php require_once '../header.php'; ?>
<html>
Hello 
<?php 
    echo $_GET["name"];
?>

<?php require_once '../footer.php'; ?>

 

在第二个例子中,涉及一些过滤。Web开发人员添加了一些正则表达式,以防止简单的XSS有效负载工作。

 

如果你玩,你可以看到<script>和</script>被过滤。绕过这些类型的过滤器的最基本的方法之一是大  胆测试:如果你尝试<sCript>,</sCRIpt,例如,你应该能够得到警报框。

 

Example 3

您向开发人员通知了您的绕开方法。他添加了更多过滤功能,现在似乎可以防止您之前的有效负载。然而,他在他的代码中犯了一个可怕的错误(前面的代码也出现了这个错误)......

 

如果你继续玩耍,你会意识到如果你使用Pentest<script>erLab有效载荷,则显示为:PentesterLab。