用WebGoat学习网络安全基础知识

131 阅读6分钟

在过去的几年里,作为一名网络开发人员,以及教授网络技术,我发现网络安全是一个让很多人纠结的话题。

我遇到的大多数开发人员相信他们需要保护他们的应用程序。有些人甚至知道一些需要注意的威胁,以及如何抵御他们的应用程序所面临的一些更常见的风险。但是,我所接触到的大多数网络开发者,在谈到网络安全的细枝末节时,都很纠结。

通常的问题包括。

  • 哪些是最大的威胁?
  • 我怎样才能学会保护我的应用程序免受攻击?
  • 我甚至应该自己来做,还是雇佣一个安全专家?
  • 怎样的安全才算足够安全?

然而,不幸的是,网络安全并不是一门精确的科学,所以有些答案会因你所问的人而大不相同。我认为问题3和4在很大程度上取决于应用程序的环境、开发团队和许多其他变量,因此我将在这篇文章中专注于前两个问题,并介绍我发现的资源和工具,这些资源和工具对我自己寻求保护我编写的软件以及更好地理解软件开发领域固有的影响和权衡非常有帮助。

哪些是最大的威胁?

开放网络应用安全项目,简称OWASP,在我看来,即使不是网络安全权威,也是经常发布OWASP Top 10--一个代表最关键的网络应用安全风险的意识文件。

OWASP的前十名是基于世界各地的公司提供的大量统计数据。在写这篇文章时,目前的版本是在2013年发布的,新的版本很可能在2017年到来。

有趣的是(或可悲的是),在任何与软件有关的领域,3-4年似乎是一个永恒的过程,但如果你查看2013年的版本和之前2010年发布的版本,名单上的大部分内容几乎没有变化。

注入攻击,尽管基本上所有现存的主要网络框架都默认防止,但至今仍是网络上的首要安全风险。然而,OWASP前十名不仅是相关安全风险的排名,也是了解和预防这些风险的一个非常有用的资源。

在我看来,OWASP前十名以及与之相关的大量免费文档,是入门网络安全的唯一最大的知识来源。

我怎样才能学会保护我的应用程序免受攻击?

很好,现在我们知道了最大的风险是什么,也知道了一个可以学习和了解这些风险的地方,以及一些关于如何防御风险的最佳实践。然而,对于许多高度复杂的领域来说,这一点是真实的,从长远来看,了解基础知识和一些最佳实践是不够的。特别是在网络安全领域,由于攻击者和防御者之间的平衡,攻击者往往只需在栅栏上找到一个洞,一切就会以泪水收场。

因此,为了有机会长期保护我们的应用程序,我们真的想了解发生了什么。这时,转换角色并成为攻击者往往是有用的。这样一来,我们就有了一个完全不同的视角,并能够看到我们以前视而不见的可能的攻击载体和弱点。这种方法的一个问题,特别是在网络安全方面,就是在公开场合学习黑客可能是破坏性的,甚至在某些情况下是非法的,这不是很实际。

这就是**WebGoat**出现的地方。

WebGoat

WebGoat,正如其维基上所描述的那样,是一个故意不安全的网络应用程序,其目的是帮助开发者通过黑掉WebGoat来亲身了解安全漏洞。

它包括大量的练习,主题从注入漏洞跨站脚本(XSS)拒绝服务和许多其他。练习的难度各不相同,但每个练习都提供了访问整个源代码以及可选的提示和解决方案,如果你遇到了障碍。

有兴趣吗?让我们开始吧!

下载并启动WebGoat

第一步是下载WebGoat 7.1,这是目前最新的稳定版本。你可以随时在发布页上获得最新的版本。

然后,在你喜欢的命令行中,导航到webgoat-container-7.1-exec.jar 的位置并启动它。

java -jar webgoat-container-7.1-exec.jar

这将启动一个端口为8080 的Webserver。你可以通过http://localhost:8080/WebGoat/访问它。

WebGoat 8.0目前正在开发中,它将会有Docker和Vagrant的构建,以及许多其他不错的改进。

好了,让我们开始黑客行动吧!

登录

首先,我们使用访客账户登录。 image.png

熟悉一下用户界面

然后,我们可以看一下教程,里面有很多关于如何开始使用WebGoat的有用提示。

image.png

你的第一个挑战

好了,现在是我们第一个挑战的时候了!我们将导航到注射缺陷。我们将导航到 "注入缺陷",并从滑出菜单中选择第二个条目 "数字SQL注入"。

这是一个很好的练习,可以开始了。我们的目标是向服务器发送一个恶意查询,让它返回所有的结果而不是只有一个。

image.png

解决方案

一个可能的解决方法是打开你的浏览器dev-tools,将select 字段中第一个option 的值改为101 OR 1=1

image.png

这将把查询SELECT * FROM weather_data WHERE station = 101 OR 1=1 发送给服务器,它总是真实的,因此返回所有的站点。成功了!

image.png

总结

对于专业的网络开发人员来说,学习必要的基本技术以确保网络应用的安全是绝对必要的。OWASP项目,特别是WebGoat,正是做这个的好资源。特别是在网络安全领域,学习如何破解对任何有志于提高网络安全技能的人来说都是大有裨益的。

但你不必相信我的话,Twitter的首席信息安全官Michael Coates在他于InfoQ举办的 "通过攻击者的视角看应用"的精彩演讲中提到,WebGoat和OWASP的安全牧羊人是在安全环境下学习黑客的最佳途径。

所以,如果你对提高你的网络安全技能感兴趣,我鼓励你从黑掉WebGoat开始!~:)

资源