在这种情况下是否有可能绕过 Chrome xss 审核员?

信息安全 xss 铬合金
2021-08-20 00:22:13

我刚刚在我自己的服务器中使用 xss 过期。我写了这样的代码:

<?php
    if (isset($_POST['data'])) { 
        echo "<a href='".htmlentities($_POST['data'])."'>Click Here</a><br/>";
    }
?>

这是一个小漏洞:作为发布数据,我们可以发送类似

   test' onerror=alert(1)

发送后,我们得到这样的行:

在此处输入图像描述

问题是:在这种情况下,有什么方法可以绕过 Chrome xss 过滤器吗?

1个回答

在这里,您可以简单地使用 payload javascript:alert(1),因为审核员不会将 href 属性中的 javascript URL 识别为 XSS。单击链接将执行代码。

但是,通过以您尝试的方式注入额外的事件处理程序属性来执行 JS 会困难得多,因为您的代码示例直接反映输入而无需额外处理。这正是 XSS 审计员所针对的攻击场景之一。它试图识别反射部分以防止它们执行。正如@NickMckenna 所说,在这种情况下没有一般的方法可以绕过审计员。

可以做的是注入其他具有副作用的属性。例如,您仍然可以使用该style属性并应用任意 CSS(例如' style='background:red;)。结合 AngularJS 等其他技术,注入不同的属性仍然会导致 XSS。


请注意,XSS 审计员是脆弱的。由于它不了解代码在服务器端的处理方式,因此在更复杂的程序中进行简单的替换就足以混淆它,例如:

<?php
    if (isset($_POST['data'])) { 
        // Filter bad words
        $data = str_replace('BADWORD', '', $_POST['data']);
        echo "<a href='".htmlentities($data)."'>Click Here</a><br/>";
    }
?>

在这种情况下,类似的序列' onBADWORDmouseover='alert(1)会绕过审计员。

(另请注意,您尝试注入的属性对标签onerror无效。)<a>