康创护网研习社广州康创信息科技有限公司旗下的社群,专注于护网行动的安全服务公司,不定期发布人员需求,与主流网络安全厂商建立了合作关系。旨在为每年的大型网络安全保护行动(护网、重保等业务)提供高质量可靠的安全人员。为社群优秀的小伙伴提供学习实践机会丰厚报酬以及大厂实践经历。


HTTP Proxies / Lesson 1

什么是HTTP代理

代理是HTTP客户端和服务器之间的转发程序。HTTP客户端可以是浏览器,或像curl、SOAP UI、Postman等应用程序。通常情况下,当客户端没有直接连接到互联网时,这些代理被用于路由使你可以访问互联网。因此,当你测试你的应用程序时,你可以随时使用代理的日志记录来查看从客户端到服务器实际发送的内容。因此,你可以检查请求和响应头以及XML、JSON或其他Playload。

HTTP代理接收来自客户端的请求并转发它们。它们通常还记录这些请求。他们充当中间人的角色。只要你的客户或浏览器信任HTTP代理的证书,无论有没有HTTPS,它甚至都能正常工作。

ZAP代理的功能

通过ZAP,你可以记录流量,检查流量,修改来自你的浏览器请求和响应,并获得关于一系列已知漏洞问题,这些漏洞是ZAP通过检查流量发现的。这里我们将交互式地使用ZAP,主要是查看和修改请求,以便发现漏洞和解决任务。ZAP有一个图形用户界面,但现在也有一个HUD Heads-On-Display,它在浏览器和ZAP代理之间使用一个websocket连接。

HTTP Proxies / Lesson 2

HTTP代理设置

由于这是一个OWASP项目,我们将使用OWASP ZAP。如果你可以使用另一个代理(例如Burp Suite),你可以跳过这个。否则,这将告诉你如何设置ZAP作为你本地主机的代理。

设置ZAP 2.8.0

  • 首先为你的操作系统下载并安装ZAP 2.8.0
  • 启动ZAP
  • 配置代理使用一个自由端口,例如8090
  • 直接从ZAP启动浏览器

HTTP Proxies / Lesson 3

设置ZAP 2.8.0

  1. 首先为你的操作系统下载并安装ZAP 2.8.0
  2. 启动ZAP
  3. 配置代理使用一个自由端口,例如8090

启动 ZAP

配置代理端口

  • Select Tools > Options from the menu
  • Select Local Proxy on the left
  • Choose an available port … Since WebGoat is (or will be) using port 8080, use something different like 8090
  • Click OK

在选项菜单中,你也可以改变语言。默认情况下,它是以你的操作系统的语言设置来设定的。例子中显示的是 English。

HTTP Proxies / Lesson 4

设置浏览器

如果你使用最新的ZAP版本(>=2.8.0),你只需要启动ZAP并点击浏览器按钮就可以进行代理,见下图:

在浏览器中输入:http://localhost:8080/WebGoat,你应该看到WebGoat和OWASP ZAP头像显示(如果你使用OWASP ZAP作为代理):

你可能注意到这是荷兰语的登录界面。这是由你的浏览器的语言设置决定的。对于一些页面,会有一些当地的翻译。你可以为WebGoat做出贡献,为你喜欢的语言添加更多的翻译。你可以通过点击突出显示的按钮来禁用人头显示。你可以在他们的网站上了解OWASP ZAP HUD的情况。目前,建议禁用它,因为它有点阻挡菜单项。

你应该在OWASP ZAP的历史面板上看到以下内容:

在下一节,我们将展示如何过滤这些请求,只看到相关的请求,以及如何配置拦截器。

HTTP Proxies / Lesson 5

在历史面板中过滤请求

在ZAP主窗口点击 "Filter",见下图

然后在 URL Inc Regex 框中输入:

.*WebGoat.*

并在 URL Exc Regex 框中输入:

.*lesson.*.mvc

点击 "Apply" 关闭窗口,ZAP现在将不再显示内部WebGoat请求。

HTTP Proxies / Lesson 6

配置一个断点过滤器

在我们开始使用ZAP拦截请求之前,我们需要排除WebGoat框架的内部请求,否则ZAP也会停止所有的请求,这些请求只是WebGoat内部工作所必需的。基本上配置了一个断点,当请求头包含一个POST时,它将拦截请求。这些都是最有趣的。你可以添加其他规则,只要轮询的.mvc信息被排除在外。因为这将是很烦人的。

设置断点的方法如下:

你可以在这里看到你的活动断点。如果你点击复选框,你也可以暂时停用它们,当你正要拦截请求时再启用它们。请不要再使用绿色/红色按钮

一旦你拦截了请求,并且发出了一个请求,它应该看起来像这样:

拦截和修改一个请求

如上所述设置拦截,然后通过点击提交按钮提交下面的 form/request 。当你的请求被拦截时(击中断点),按以下方法修改它。

  • 将方法改为GET
  • 添加一个头'x-request-intercepted:true'。
  • 删除请求正文,将'changeMe'作为查询字符串参数发送,并将其值设置为'Requests are tampered easily'(不含单引号)。

然后让请求继续通过(通过点击运行按钮)。

通关思路

根据上方的修改要求,我们使用Burp Suite拦截请求并修改然后提交。

  1. 打开Burp Suite的Proxy功能来拦截请求
  2. 点击“Submit”按钮提交请求,然后去Burp Suite查看如下图所示

  1. 然后根据要求修改请求,改动如下图所示

  1. 修改完成后点击“Forward”提交修改后的请求即可通关

HTTP Proxies / Lesson 7

使用ZAP中的 "Edit and resend"功能

另一种方法是再次发送请求,而不是在WebGoat中点击一个按钮并拦截请求,还有一个选项是在ZAP中再次发送同一请求。这可能会大大帮助你解决一个任务,因为你不必切换到ZAP,启用拦截按钮,然后回到WebGoat,从浏览器中再次执行请求。

让我们看一个例子,我们将使用WebWolf介绍课上的电子邮件例子。本课将产生一个 /WebGoat/WebWolf/mail 的请求,在"History"窗口中选择你想重新发送的URL,右击该URL并选择用 Open/Resend with Request Editor。你也可以在ZAP的左窗格中找到该请求,如下图中的红色箭头所示:

一个新的窗口将被打开,在这里你可以修改请求,例如把电子邮件地址改成别人的,然后再次发送。在响应标签中,你可以检查请求的响应。在一些作业中,响应会显示一个已解决的信息,但有时你会得到一个 code/flag,你需要在WebGoat中提交,以完成作业。要时刻注意响应的情况。如果你通过这种方式提出请求解决了作业,WebGoat会自动将该课程标记为已解决。

HTTP Proxies / Lesson 8

从 ZAP 到 https 的代理

OWASP ZAP代理也可以被配置为代理https请求。它将终止OWASP Zap中的https连接,然后使用自己的密钥库将其代理给目标。你甚至可以代理到有相互TLS的网站。在这种情况下,你要用钥匙库和钥匙来配置OWASP ZAP的连接。

如果你想代理到一个相互TLS https的网站,请到Tools/Options/Client Certificate 。如果你想设置超时,并想强制使用TLSv1.2,去Tools/Options/Connection设置。

导出证书

根据本地安装的工具,ZAP可以直接启动浏览器,有一些调整后的选项,如网络设置和证书调整。然而,如果你想独立于ZAP启动你的浏览器,应该完成这一步。为了能够使用浏览器,浏览器需要证书,可以在这里导出。

导入OWASP ZAP根证书

  1. 从菜单中进入你的Firefox首选项(Mac,Linux)或选项(Windows)。
  2. 搜索证书
  3. 点击查看证书
  4. 导入已保存的ZAP根证书(见一节)

HTTP Proxies / Lesson 9

手动设置代理

这一部分只有在你想使用Burp或者通过ZAP运行浏览器不工作的情况下才有必要,在这两种情况下我们需要做一些额外的配置。在最新版本的Chrome和Firefox中,默认情况下不再代理来自localhost的流量。

选项1:改变你的浏览器的设置

  • 要代理本地主机(和相关地址)与较新的Firefox版本(>=67)的首选项network.proxy.allow_hijacking_localhost(通过about:config页面访问)必须设置为true。
  • 要在较新的Chrome版本(>=72)上代理localhost(和相关地址),必须提供命令行参数--proxy-bypass-list=←loopback>。

选项2:使用www.webgoat.local

  • 使用你的机器的主机名而不是localhost,你可以在Linux和MacOSX上的/etc/hosts中找到或添加一个主机名,在Windows上的C:\Windows\System32\drivers\etc中找到或添加一个。

然后在你的浏览器中使用http://www.webgoat.local:8080/WebGoat 作为地址。

配置浏览器以使用代理

要在浏览器中手动配置代理,请按照以下配置之一进行。

Firefox 代理配置

  1. 从菜单中进入你的火狐偏好(Mac,Linux)或选项(Windows)。
  2. 在左边选择高级
  3. 在高级窗格中选择网络
  4. 点击设置
  5. 选择手动代理配置
    • 输入127.0.0.1作为代理(或www.webgoat.local,取决于你上面的选择)。
    • 输入8090作为端口,如果在本地运行WebGoat并且你将ZAP更新到8090(否则,使用8080)。
    • 勾选 "对所有协议使用此代理服务器 "复选框

Chrome浏览器的代理配置

  1. 从菜单上调出Chrome的设置
  2. 在搜索设置框中键入代理,然后点击回车。这应该会出现网络标题,其中有一个 "Change proxy settings"按钮。
  3. 点击 "Change proxy settings"按钮
  4. 选择 "proxies"选项卡
  5. 选择网络代理(HTTP)。
  6. 在网络代理服务器下的第一个方框中输入127.0.0.1(或www.webgoatl.local,取决于你的选择),在第二个方框中输入你的端口#(如果在本地运行WebGoat,则为8080)(在右边)。
  7. 你可能还想清除底部的" Bypass proxy settings for these Hosts & Domains"文本输入,但应该不需要。

(以上是Mac的配置图片)

(以上是Win的配置图片)

HTTP Proxies / Lesson 10

Burp Suite

另一个被经常使用的代理是Burp Suite。WebGoat中的一个练习只能用Burp Suite解决,还不能用OWAP ZAP。Burp Suite只能手动配置,请先按照这里的步骤进行配置。Burp Suite社区版可以作为一个普通的jar文件下载 Burp下载

java -jar burpsuite_community_v2.1.04.jar

忽略关于使用JDK11的警告。选择临时项目,然后选择使用burp的默认值。

进入代理选项,将其改为使用8090端口

在这一页,你也可以导出Burp Suite证书并将其导入你的浏览器。与前几页的说明类似。

进入代理拦截页面,点击切换键,使拦截功能被关闭。(默认情况下,在下图中它是打开的)。

启动连接到代理的浏览器并开始使用WebGoat。现在通过扩展不拦截内容的规则来调整拦截请求的设置。

使用例如: (^mvc$|^txt$|^woff$|^lesson$|^gif$|^jpg$|^png$|^css$|^js$|^ico$) 然后通过点击前面提到的勾选按钮来启用拦截。

截获的信息将看起来像:

最后,你可以在这个屏幕上查看历史,并为历史和重放请求添加过滤器:


加入社群

康创护网研习社