WebGoat通关攻略

article/2025/11/5 5:11:00

目录

  • 前言
  • 一、环境配置
    • 1.Docker配置
    • 2.WebGoat获取
    • 3.WebGoat连接
  • 二、通关攻略(建设中)
    • 1.Introduction
      • 1)WebGoat
      • 2)WebWolf
    • 2.General
      • 1)HTTP Basics
      • 2)HTTP Proxies
      • 3)Developer Tools
      • 4)CIA Triad
      • 5)Crypto Basics
    • 3.Injection
      • 1)SQL Injection(intro)
      • 2)SQL Injection(advanced)
      • 3)SQL Injection(mitigation)
      • 4)Path traversal
    • 4.Broken Authentication
    • 5.Sensitive Data Exposure
    • 6.XML External Entities(XXE)
    • 7.Broken Access Control
    • 8.Cross-Site Scripting(XSS)
    • 9.Insecure Deserialization
    • 10.Vulnerable Components
    • 11.Request Forgeries


前言

WebGoat是一款很好的学习网络安全知识和技巧的入门应用,写这篇博文一方面是为了记录自己的学习过程,另一方面供大家参考互相学习。


一、环境配置

实验环境选择的是Kali-5.7.0-amd64,使用Docker进行下载、管理和连接WebGoat应用。(如果使用jar包连入有些关卡无法进行)

1.Docker配置

可以直接通过国内源下载,速度比较快:

curl -fsSL http://mirrors.zju.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key addecho 'deb http://mirrors.zju.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce

2.WebGoat获取

sudo docker pull webgoat/webgoat-8.0
sudo docker pull webgoat/webwolf
sudo docker pull webgoat/goatandwolf

3.WebGoat连接

sudo docker run -d -p 8888:8888 -p 8080:8080 -p 9090:9090 webgoat/goatandwolf
#这里-d选项是后台运行,可以去掉

之后在浏览器中进入网址:

http://127.0.0.1:8080/WebGoat

显示登录界面即配置成功了!

WebGoat登录窗口

二、通关攻略(建设中)

1.Introduction

1)WebGoat

这一部分就是简单介绍了一下WebGoat,没啥好说的。

2)WebWolf

WebWolf是WebGoat的配套应用,帮助完成webGoat某些关卡的学习,具体介绍可以自己阅读应用中的内容,可以通过点击其提供的连接进入,也可以自行输入以下网址:

http://127.0.0.1:9090/WebWolf

之后是试用WebWolf的功能:

所有从WebGoat上发送给自己的邮件均会在WebWolf中收到,这里我们输入自己的账号信息,形式为{账户名}@XXX。
发送后在WebWolf中可以收到邮件,查看其中的Unique码并填入则可通过此关。
邮件

成功

接下来是另一个使用的例子:

点击蓝色超链接后,在以下输入框中输入你的密码并保存:
重置密码

在跳转页面的网址中可以发现Unique码:
答案

成功

2.General

这一部分讲了一些http中最基本的知识和技术。通关需要的技巧为使用工具抓取http包,这里使用的工具为ZAP,Kali中自带该软件:

打开后在菜单栏中可以找到启动浏览器按钮:
在这里插入图片描述

通过这里打开浏览器可以自动为浏览器设置代理,省去了自己配置的步骤,十分方便。
下面拦截http包的操作都是在此基础上进行的!!!

1)HTTP Basics

这一部分介绍了http的GET方法和POST方法的区别,简单区分就是GET方法的参数直接通过url传递,POST的参数则通过包来传递。
按要求输入:

显然,这是通过POST方法传递请求的。

下面就开始进行http包拦截了:
拦截

这里第一问我们已经知道为POST方法进行请求,故填入POST,第二问的magic number我们不知道,所以我们先随便填入一个数,按Go!按钮后利用ZAP拦截该请求包查看有没有线索。
为了方便快速定位该请求包,可以在ZAP中定义一个拦截规则,只拦截POST方法的请求包,拦截新建按钮为菜单栏中的:
在这里插入图片描述

配置信息为:
在这里插入图片描述

点击Go!按钮后,ZAP拦截到一个包:
在这里插入图片描述

我们看到数据栏中有magic_num=26。

2)HTTP Proxies

这一部分介绍了ZAP的一些基本用法,跟着上面的讲解配置即可。
接着的问题为修改http包,在其中添加、修改信息,设置的拦截信息和上面相同即可。
原始的http包为:
在这里插入图片描述
按要求我们需要改成以下(直接在数据上操作即可):
在这里插入图片描述
最后按ZAP菜单栏中的继续按钮即可。

3)Developer Tools

这一部分介绍了浏览器上的开发者工具。
按要求在控制台输入响应函数,得到一个随机数:
在这里插入图片描述

将随机数复制到输入框中即可。

下一题可以使用ZAP来完成,只需要将拦截规则改为:
在这里插入图片描述

按Go!按钮后拦截到包为:
在这里插入图片描述
将networkNum的值复制到输入框即可。

4)CIA Triad

讲解了信息安全三要素,仔细理解三要素的定义题目就能做出来了,不难。

5)Crypto Basics

这一部分主要讲解了一些基本的编码、加密、签名等知识。
第一题是解码一段Base64字符串,判断为Base64编码的简单方法就是看其结尾有没有等号(等号最多两个),以及字符是否都在Base64的字符集里。
Linux系统自带Base64工具,直接打开一个终端进行解码即可:
base64

第二题需要解码一段由异或编码处理过的信息,而且是用IBM的WebSphere工具中的编码规则处理的!!!所以我们从网上找到专门解码WebSphere规则的应用进行解码:
在这里插入图片描述
上述使用的工具网站为:http://www.sysman.nl/wasdecoder/

第三题为解密两段hash串,网站推荐使用cmd5。当然也可以使用Kali的自带工具来解决,先用hash-identifier判断hash加密算法:
在这里插入图片描述

再用hashcat破解:
在这里插入图片描述
稍等一会就可以得到结果:
在这里插入图片描述

注:还是用网上的工具快。。

第四题为破解RSA密码,在知道私钥的情况下破解其模,以及用该私钥签名后的模,我们使用Kali自带的openssl工具会方便一些:

openssl rsa -in ./privatekey -modulus
#privatekey为题目提供的私钥所在的文件

再对模进行签名:

echo -n "9C2484492F65191FC6BF085D50B452EFB3F5EE299D426C44949A2DCBD19110A3E8849006B3E565E0DA79B17607F1EB9E08C3102FCAFC421F40F04EC7A83D62D7C575B8BF3EA19DC63E86E9C7ACAFA7CC83E330E7B60C55DF3B6CDA5251421A32B6A56DFF7DC3E90EB2EDAAC2581628123042B6FC3C189FCEA062BDF4570CADFB5163D379FF691376AE7AC47458B78952051BBEF1C64ED3768F6493E7F64899EFA6359D0B0FC8DB192BFC44565C5BD1E2BE29F60BB6864185C9C70255CE7F4BCB776A910640C85067ACA24E86B92229BF0B1BD28050E987A82E4C16D67B9F063E110B89D424F3AFA84A2460870F892570401B316244147952CB350D8779A077A1" | openssl dgst -sign ./privatekey -sha256 -out ./dgst.txt
base64 ./dgst.txt > result

在生成的result文件里即为签名。

注:上述签名过程来自本页学习知识点中的RAW signatures,使用其他签名方法或者直接用网上的签名工具八成会出错。。

第五题需要docker来配合完成,首先进入相应的container:

sudo docker run -d webgoat/assignments:findthesecret
#可能之前下载时没下载该container,会自动下载后运行

查看刚运行的container的ID并进入:

sudo docker ps
sudo docker exec -ti acade6f8f42c /bin/bash
#-ti后面的参数即为container ID,需要替换成自己的

然后运行WebGoat所给的命令:

3.Injection

这一节主要介绍了SQL注入的相关知识。

1)SQL Injection(intro)

这一部分主要介绍了一些SQL的语法。
第一题很简单,就是写一句SQL获取叫Bob Franco所在的department:
SQL

第二题将Tobi Barnett的department改为‘Sales:
在这里插入图片描述

第三题在表中添加一列
在这里插入图片描述

第四题给指定用户授权:
在这里插入图片描述

第五题是尝试最简单的SQL注入,在最后给出了一些例子,可以都试一下:
在这里插入图片描述

第六题尝试通过SQL注入来获取表中所有的用户信息:
在这里插入图片描述

第七题是另一种类型的SQL注入,叫做numberic SQL injection:
在这里插入图片描述

第八题也是和之前相似的string SQL injection:
在这里插入图片描述

第九题要开始修改数据库的信息了:
首先查看数据库的内容(方法与上题一样,知道我们要把自己的薪水改成90000).然后可以在TAN的输入框中使用以下语句来更改:

3SL99A' OR 1=1;UPDATE employees SET SALARY = 90000 WHERE LAST_NAME = 'Smith';--

修改成功:
在这里插入图片描述

第十题将给如何删库跑路,当然这里只是删除一个表而已:
我们可以先SELECT一下查看表中都有什么:
在这里插入图片描述

我们在这里进行注入发现怎么做也做不到,这说明注入点并不在这里,所以我们继续使用上一题的注入点,在那里在TAN的输入框填入:

3SL99A' OR 1=1;DROP TABLE access_log;--

再次在第十题的查询框查询发现已经删表成功:
在这里插入图片描述

2)SQL Injection(advanced)

这一部分讲了一些SQL注入的进阶技巧。
第一题让你得到表中的所有数据以及Dave的密码,这里我们可以先任意输一些内容在查询框中,便可以知道查询语句的结构:
在这里插入图片描述

于是我们可以构造如下查询语句:

Dave' OR 1=1;SELECT * FROM user_system_data;--

这里我们是用增加一条查询语句来完成的,如果使用UNION,可以这样:

Dave' OR 1=1 UNION SELECT userid,user_name,user_name,cookie,password,user_name,userid FROM user_system_data;--

将查询到的Dave的密码填入就可以了。

第二题就是实战环节,让我们以Tom的身份登入。此题困难的地方在于找SQL注入点。
首先我们在注册页面多次尝试,可以发现不能注册用户名相同的账号,但可以注册名为"Tom"的账户,说明Tom的账户名不是"Tom",多试几次可以知道Tom的用户名为"tom",这是数据库里已经有的账户。
第二步便是寻找SQL注入点。首先肯定是在登录或者注册这几个输入框中。由于一个一个尝试比较繁琐,我们使用sqlmap帮助我们检测和获取数据库数据。sqlmap可以直接通过pip下载:

pip install sqlmap

我们先测试登录页面中的输入框。先使用ZAP截取登录请求发送的http包,如何截取在上面有提到过:
在这里插入图片描述

点右键另存为RAW后,重命名为txt文件。输入命令:

sqlmap -r 文件路径

发现结果说没有发现注入点:
在这里插入图片描述

我们用相同的步骤对注册页面进行尝试,结果说明注册页面的username输入框存在SQL注入漏洞:
在这里插入图片描述

之后我们可以用sqlmap的一些功能进行探测:

sqlmap --no-cast -r 文件路径 --dbs#查看数据库

在这里插入图片描述

sqlmap --no-cast -r 文件路径 -D PUBLIC --tables#查看数据库PUBLIC中的表

在这里插入图片描述

sqlmap --no-cast -r 文件路径 -D PUBLIC -T JWT_KEYS --columns#查看表JWT_KEYS的列名

在这里插入图片描述

sqlmap --no-cast -r 文件路径 -D PUBLIC -T JWT_KEYS -C "userid,password" --dump#查看表JWT_KEYS的userid和password两列

这里需要注意的是,我们进行注入的时候使用了账户名为Bob的信息,所以查到的信息都是与Bob有关的。要想查到与tom有关的,需要在另存为的http包中,把username_reg参数的值改为"tom",再将sqlmap的session缓存清空:

sqlmap --flush-session -r 文件路径

再重复上面的步骤即可,得到的结果为:
在这里插入图片描述

这就是tom的密码了。
另外,为什么是PUBLIC中的JWT_KEYS,就是一个一个试出来的。。。

最后一题是一些选择题,只要熟悉概念就很容易做出来。

3)SQL Injection(mitigation)

这一部分介绍了如何防御SQL注入攻击。
第一题主要是需要了解这些类中函数的用法,代码如下:

Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPW);
PreparedStatement stmt = conn.prepareStatement("SELECT status FROM users WHERE name=? AND mail=?");
stmt.setString(1, "asif001");//这里的第二个参数随便填
stmt.setString(2,"asif001@qq.com");//这里的第二个参数随便填

第二题简单编写一段代码就好了:

try {Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPW);System.out.println(conn); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE name=?");stmt.setString(1, "asif001");ResultSet results = stmt.executeQuery();
} catch (Exception e) {System.out.println("Oops. Something went wrong!");
}

第三题在之前一题的基础上加了过滤,限制输入中不能出现空格,我们可以通过加注释的方法来达到空格的目的:

Dave'/**/OR/**/'1'='1

这样可以看到全部用户信息,但不是正确答案?还没搞清楚是为什么。

第四题和第三题答案一样。。但还是显示不正确。。

第五题的难点在于找到注入点以及如何去注入。其实注入点根据介绍肯定与排序操作有关,那么每列名称后面的排序按钮了。但显然这里没有供在网页端输入的注入点,所以需要抓包,观察本页面url,编写拦截条件:
在这里插入图片描述

这里还需要拦截服务端返回地响应包,再添加一个断点:
在这里插入图片描述

这样就可以查看解题所需要的一切信息了。
拦截到一个请求包:
在这里插入图片描述

把第一行column的值改为:

case when((select substring(ip,1,1) from servers where hostname='webgoat-prd')=1) then hostname else status end

这样就可以判断出’webgoat-prd’ip地址的第一位是不是为1,同理测出后面的数字,最后得到的结果是:

104.130.219.202

4)Path traversal

4.Broken Authentication

5.Sensitive Data Exposure

6.XML External Entities(XXE)

7.Broken Access Control

8.Cross-Site Scripting(XSS)

9.Insecure Deserialization

10.Vulnerable Components

11.Request Forgeries


http://chatgpt.dhexx.cn/article/vpCslCbd.shtml

相关文章

webgoat全关教程手册

Webgoat&Webwolf owaspbwa里面的两个服务 搭建 先要安装jdk、Webgoat和Webwolf Webgoat和Webwolf jdk1.8不支持了,需要安装jdk11 去git上下载Webgoat和Webwolf https://github.com/WebGoat/WebGoat/releases/tag/v8.0.0.M26 去oracle官网下载JDK https:/…

Webgoat学习笔记

0x00 安装 WebGoat的版本区别 WebGoat是一个渗透破解的习题教程,分为简单版和开发版,GitHub地址. 简单版安装 简单版是个JAVA的Jar包,只需要有Java环境,然后在命令行里执行 1 2 3 <code> #!bash java -jar webgoat-container-7.0.1-war- exec .jar < /code > 然…

6.4 Web安全漏洞学习平台:WebGoat的使用

目录 一、预备知识 1、WebGoat介绍 2、JDK 二、实验环境 三、实验步骤 1、JDK安装 2、JDK环境配置 3、WebGoat下载 6、以字符串型SQL注入实验为例进行简单的讲解 一、预备知识 1、WebGoat介绍 WebGoat是一个用来演示Web浏览器中典型安全漏洞的应用程序&#xff0c;其…

【详解】webgoat Web渗透测试平台Injection单元 攻略

目录 一、什么是webgoat&#xff1f; 二、Injection 2.1 SQL Injection (intro) 2.1.1 查询Bob的岗位 2.1.2 更改Tobi的部门 2.1.3 增加一个phone部门 2.1.4 授权 2.1.5 Try It! String SQL injection 2.1.6 查询所有员工的信息 2.1.7 修改员工的薪水 2.1.8 删库跑路 …

【2022】WebGoat的安装与测试

WebGoat的安装 Welcome Here&#xff01; 谈一谈有关WebGoat的搭建 1.WebGoat环境搭建 &#xff08;1&#xff09;下载安装webscarab 首先我们先查看自己是否有可以运行.jar文件的jdk(jdk1.8)&#xff0c;可在cmd.exe中输入java -version&#xff0c;接着去sourceforge下载…

WebGoat 8.1 靶场 刷题通关教程全攻略 - (A1) Injection

WebGoat 8.1 靶场 刷题通关教程全攻略 - A1 Injection (A1) InjectionSQL Injection (intro)2. It is your turn!3. It is your turn!4. Data Definition Language (DDL)5. Data Control Language (DCL)9. Try It! String SQL injection10. Try It! Numeric SQL injection11. I…

eclipse配置Android环境

eclipse 配置Android 环境 1. 配置jdk环境变量&#xff08;若已配置默认忽略&#xff09;2.下载安装Android SDK3.安装ADT插件4.配置AVD驱动5.下面创建一个新项目&#xff0c;测试一下是否安装成功6.导入一个已有的安卓项目7. 问题解决 1. 配置jdk环境变量&#xff08;若已配置…

eclipse配置tomcat详解(图文版)

eclipse配置tomcat详解&#xff08;图文版&#xff09; 目的&#xff1a;学会如何使用eclipse工具开发Servlet首先得配置tomcat。 eclipse不仅会自动编译Servlet&#xff0c;还会自动创建web.xml文件信息&#xff0c;完成Servlet虚拟路径的映射 文章目录 eclipse配置tomcat详解…

Eclipse配置SVN教程

下载svn插件 链接&#xff1a;https://pan.baidu.com/s/1BeGikwxhv21abBA5Hhy8zA 提取码&#xff1a;6666 D盘创建SVN文件夹 打开svn插件 复制如图两个文件夹到svn目录下 创建svn.link并配置 位置在你安装Eclipse/eclipse/dropins 创建 svk.link 删除 org.eclipse.update文件…

Eclipse配置Tomcat图文教程(2023最新版)

一、打开Eclipse&#xff0c;点击windows&#xff08;窗口&#xff09;&#xff0c;点击preferences&#xff08;首选项&#xff09;。 二、找到Server&#xff08;服务器&#xff09;&#xff0c;点击Runtime Environments&#xff08;运行时环境&#xff09;&#xff0c;点击…

eclipse配置tomcat10

eclipse配置tomcat tomcat资源下载&#xff1a;https://editor.csdn.net/md/?articleId117913024 如果打开没有servers请查看这篇文章https://blog.csdn.net/Leesnwen/article/details/117913615 如果如上图一样没有apache tomcat&#xff0c;参考以下步骤。否则跳至restart…

Eclipse 介绍-配置-使用

目录 概述 安装 workspace&#xff08;工作空间&#xff09; 工具设置 编码方式 字体大小 文档注释 设置JDK 使用 创建工程 创建包 创建类 编写代码 运行 使用eclipse生成javadoc文档 概述 Eclipse是Java开发中非常流行的一款集成开发工具。以后在开发中&#…

Eclipse的安装和配置

Eclipse的安装和配置 一&#xff0e;Eclipse的安装 首先我们需要进行下载Eclipse软件 下载地址&#xff1a;https://www.eclipse.org/downloads/ 页面如下&#xff0c;这里需要注意&#xff0c;我们不要点击那个黄底白字的Download 64 bit&#xff0c;我们要点击它下面的Downl…

Eclipse配置环境变量

1、单击“计算机->属性->高级系统设置”--->环境变量 2、系统变量&#xff08;S&#xff09;--->单击“Path”--->编辑--->新建--->填上“D:\jdk\bin;D:\jdk\jre\bin” ps:“E:\azlj\eclipse\jdk\bin;E:\azlj\eclipse\jdk\jre\bin”分别为jdk的bin目录的路…

Eclipse安装与配置

一、官网下载eclipse-jee-mars-R-win32-x86_64.zip&#xff0c;这个是不需要安装的&#xff0c;直接解压就可以用 二、eclipse常用设置 2.1、修改字体 Window—Preferences—General—Appearance—Color and Fonts—Basic—Text Font 2.2、显示代码行号 Window—Preferences…

Eclipse的配置使用

IDE开发工具之一&#xff1a;eclipse的使用 文章目录 IDE开发工具之一&#xff1a;eclipse的使用教学目标1、概述2、工作空间workspace1、eclipse的管理层次2、指定工作空间3、如何切换工作空间4、设置工作空间字符编码等5、缩进4个空格 3、界面介绍基本界面介绍如何打开各种小…

Eclipse配置使用Git

本文记录了在使用Eclipse进行开发时&#xff0c;和Git相关的各种配置和使用说明。 文章目录如下&#xff1a; 目录 1 Git插件安装和配置 1.1 安装Git插件 1.2 Git配置 2 Eclipse使用Git 2.1 项目初始化到本地库 2.2 设置忽略提交到文件 2.3 设置本地库Git签名 2.4 Ec…

Eclipse配置Maven详细教程

一.使用eclipse自带的maven插件 首先&#xff0c;现在下载Eclipse Mars之后的版本&#xff0c;基本上都自带了maven插件&#xff0c;无需自己再安装maven. 有几个注意点: 1.默认的本地仓库的目录是在C:\Users\viruser.v-desktop\.m2\repository\ 如果使用系统默认的maven插…

Eclipse配置Maven的详细完整步骤

Eclipse配置Maven的详细步骤 目录&#xff1a; Eclipse配置Maven的详细步骤 一、下载Maven二、配置maven环境变量三、配置Eclipse中的maven 这样maven就配置好了。 一、下载Maven 1、首先第一步去官网下载一个Maven。下载网址&#xff1a;Maven官网 2、将下载的文件解压…

超详细Eclipse配置JDK1.8

附Eclipse安装教程 超详细Eclipse安装教程 附JDK1.8安装配置教程 超详细JDK1.8安装与配置 ①打开Eclipse–>点击Window–>点击Preferences ②找到Java–>找到Installed JREs–>点击Add… ③选中Standard VM–>之后点击Next ④点击Directory找到自己安装的…