网络攻击介绍——Cyber Space Kittens

在完成侦察和发现之后,你回顾所有你发现的不同站点。浏览结果时,你没有发现常见的可进行漏洞利用的服务器或配置错误的应用程序。没有任何 Apache Tomcat 服务器或 Heartbleed/ShellShock,看起来他们修补了所有 Apache Strut 问题和 CMS 应用程序漏洞。

你的第六感直觉开始发挥作用,你开始研究他们的客户支持系统。感觉有些地方就是不对劲,但是在哪里呢?

对于本章中的所有攻击,都可以使用一个本书定制的 VMWare 虚拟机来复现这些实验。这个虚拟机可以在以下网站免费下载:

为搭建演示 Web 实验环境(客户支持系统):

  • 从以下位置下载本书的 VMWare 虚拟机:

  • 下载在实验环境里要用到的完整命令列表:

  • 启动并登录 VM(虚拟机)

  • 当 VM 完全启动时,它应该显示应用程序的当前 IP 地址。你无需登录进 VM,所以登录密码也不需要。你可以自行入侵这个程序。

  • 由于这是一个托管在你自己系统上的 Web 应用程序,因此我们在攻击端 Kali 系统上创建一个主机名记录:

    • 在我们的攻击端 Kali 虚拟机上,让我们编辑 host 文件以指向我们的存在漏洞的应用程序(客户支持系统),以便可以通过 hostname 和 IP 来引用应用程序:
      • gedit /etc/hosts
    • 添加客户支持系统虚拟机的 IP
      • [客户支持系统的 IP]chat
    • 现在,打开 Kali 的浏览器并访问 http://chat:3000/ 。如果一切正常,你应该能够看到 NodeJS 自定义的客户支持系统程序。

Web 部分的命令和攻击可能非常冗长和复杂。为了方便起见,我在这里列出了每个实验需要的所有命令:https://github.com/cheetz/THP-ChatSupportSystem/blob/master/lab.txt

译者注:
译者在尝试复现此实验时,发现没有获取到 ipv4 地址,后来切换了一下网卡设置,把“桥接模式”改成 NAT 就解决了。如果有读者遇到一样的问题可以参考此做法。
参考资料:https://github.com/cheetz/THP-ChatSupportSystem/issues/1

红队的 Web 应用程序攻击

前两本书着重于如何有效地测试 Web 应用程序 - 这一次会有所不同。我们将跳过许多基本攻击,并接触现实世界中使用的攻击手法。

由于这是一本实用性较强的书,所以我们不会详细讨论 Web 应用程序测试的所有技术细节。然而,这并不意味着这些细节应该被忽略。Web 应用程序测试的一个很好的资源是 Open Web Application Security Project,简称 OWASP。OWASP 侧重于应用程序的安全开发和用户教育。每隔几年,OWASP 都会编制并发布一个最常见漏洞的清单—— http://bit.ly/2HAhoGR 。一个更深层次的测试指南位于这里:http://bit.ly/2GZbVZd 。OWASP 的文档将带你了解要查找的漏洞类型、风险以及如何利用它们。这里有一个很好的清单文档:http://bit.ly/2qyA9m1

由于我的许多读者都试图进入安全领域,所以我想快速的提一件事:如果你想进行渗透测试工作,你至少要理解 OWASP Top 10 的方方面面,这是至关重要的。你不仅应该知道它们是什么,而且还应该根据风险类型以及如何检测它们了解一些好的示例。现在,让我们回到如何入侵 CSK 上来 。

聊天支持系统实验

将被攻击的聊天支持系统是交互式的,它突出了新的和旧的漏洞。正如你将看到的,对于以下许多实验,我们会提供不同版本的带有聊天支持系统的自定义虚拟机。

应用程序本身是用 Node.js 编写的。为什么选择 Node?作为渗透测试人员,我们要注意的是,它是使用率增长最快的应用程序之一。由于许多开发人员似乎都非常喜欢 Node,所以我觉得理解将 JavaScript 作为后端代码运行的安全含义是很重要的。

什么是 Node?

“Node.js® 是一个基于 Chrome V8引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。”Node.js 的包生态系统,即 NPM,是世界上最大的开源库生态系统。

在最基本的层面上,Node.js 允许你在浏览器之外运行 JavaScript。由于 Node.js 具有精简,快速和跨平台的特性,所以它可以通过统一堆栈来大大简化项目。虽然 Node.js 不是 Web 服务器,但它允许服务器(可以用 JavaScript 编程的东西)存在于实际 Web 客户端之外的环境中。

优点:

  • 非常快
  • 单线程 JavaScript 环境,可以充当独立的 Web 应用程序服务器
  • Node.js 不是协议;它是一个用 JavaScript 编写的 Web 服务器
  • NPM 代码仓库拥有近50万个免费、可重用的 Node.js 代码包,这使它成为世界上最大的包管理器

随着 Node.js 在过去几年变得如此流行,对于渗透测试人员/红队成员来说,理解应该寻找什么突破口以及如何攻击这些应用程序是非常重要的。例如,一位研究人员发现,弱 NPM 凭证使他能够获取 13% 的 NPM 包的编辑和发布权限。通过依赖链,预计有52% 的 NPM 包是易受攻击的。
[https://www.bleepingcomputer.com/news/security/52-percent-of-all-javascript-npm-packages-could-have-been-hacked-via-weak-credentials/]

在下面的示例中,我们的实验室将使用 Node.js 作为应用程序的基础,它将使用 Express 框架作为我们的 Web 服务器。然后,我们将把 Pug 模板引擎添加到我们的 Express 框架中。这类似于我们现在在新开发的应用程序中经常见到的东西。

网络攻击介绍——Cyber Space Kittens - 图1

Express 是一个用于 Node.js 的极简 Web 框架。Express 为 Web 和移动应用程序提供了一组强大的功能,因此你无需进行大量工作。使用名为 Middlewares 的模块,你可以添加第三方认证或服务,如 Facebook 身份验证或 Stripe 支付服务。

Pug,正式名称为 Jade,是一个服务器端模板引擎,你可以(但不是必须)与 Express 一起使用它。Jade 用于在服务器上以编程方式生成 HTML 页面并将其发送给客户机。

让我们开始攻击 CSK 并启动聊天支持系统虚拟机。