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

article/2025/11/5 5:27:45

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

  • (A1) Injection
    • SQL 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 injection
      • 10. Try It! Numeric SQL injection
      • 11. It is your turn!
      • 12. It is your turn!
      • 13. It is your turn!
    • SQL Injection (advanced)
      • 3. Try It! Pulling data from other tables
      • 5.
    • SQL Injection (mitigation)
      • 5. Try it! Writing safe code
      • 6. Try it! Writing safe code
      • 9. Input validation alone is not enough!!
      • 10. Input validation alone is not enough!!
      • 12.
    • Path traversal
      • 2. Path traversal while uploading files
      • 3. Path traversal while uploading files
      • 4. Path traversal while uploading files
      • 5. Retrieving other files with a path traversal

(A1) Injection

SQL Injection (intro)

2. It is your turn!

在这里插入图片描述

根据页面所给的数据表,以及题目中的要求,可以写出下列语句

SELECT department FROM employees WHERE first_name='Bob' AND last_name='Franco';

在这里插入图片描述

3. It is your turn!

在这里插入图片描述

根据题目要求,写出下列语句

UPDATE employees SET department='Sales' WHERE first_name='Tobi' AND last_name='Barnett';

在这里插入图片描述

4. Data Definition Language (DDL)

在这里插入图片描述

根据题目要求,写出下列语句

ALTER TABLE employees ADD phone varchar(20)

在这里插入图片描述

5. Data Control Language (DCL)

在这里插入图片描述

根据题目要求,写出下列语句

GRANT ALTER TABLE TO UnauthorizedUser

在这里插入图片描述

9. Try It! String SQL injection

在这里插入图片描述

根据上文讲解,选择第一项为Smith',第二项为or,第三项为'1' = '1,即可完成注入

在这里插入图片描述

10. Try It! Numeric SQL injection

在这里插入图片描述

本题需要注意一点,关于 NOT, OR 和 AND 的优先级关系,如下

NOT> AND> OR

因此,若 SQL 语句构造如下

SELECT * From user_data WHERE Login_Count = 1 OR 1 = 1 AND userid= 1

则优先运算1 = 1 AND userid= 1得到 FALSE,计算Login_Count = 1得到 FALSE,后计算FALSE OR FALSE得到 FALSE,因此注入失败

能够成功注入的正确的 SQL 语句如下

SELECT * From user_data WHERE Login_Count = 1 AND userid= 1 OR 1 = 1

优先运算Login_Count = 1 AND userid= 1得到 FALSE,计算1 = 1得到 TRUE,后计算FALSE OR TRUE得到 TRUE,因此注入成功

在这里插入图片描述

11. It is your turn!

在这里插入图片描述

如图在第一空填入任意值,第二空填入 任意值 + ' OR '1' = '1即可成功注入

在这里插入图片描述

12. It is your turn!

在这里插入图片描述

根据题目要求中所描述的,我们需要将 John 的工资调整为员工中最高的,通过查看之前的表格,可以看到,将 工资Salary 设置为 90000 就可以使 John 的工资位列所有雇员之首,因此我们在第一空填写任意内容,第二空填写'; UPDATE employees SET SALARY=90000 WHERE first_name='John即可完成注入

在这里插入图片描述

13. It is your turn!

在这里插入图片描述

首先,猜测本题中所给输入框跟前面几道题一样,会被填写回 SQL 语句中 SELECT 的 WHERE 部分,选择不同的输入内容进行尝试,观察其返回内容,可以印证猜测

因此,我们用'把前面的单引号闭合,用--把后面的单引号注释掉,然后中间写题中要求的语句即可完成

'; DROP TABLE access_log; --

在这里插入图片描述

SQL Injection (advanced)

3. Try It! Pulling data from other tables

获取表 user_system_data 有两种方法

第一种使用 UNION,在输入框中填入如下语句

' UNION SELECT userid, user_name, password, cookie, 'test1', '2', 3 FROM user_system_data;--

结果如图:

在这里插入图片描述

需要注意两点:

  1. UNION 连接前后两个查询结果,表头数目须保持一致,且数据类型也需要一一对应相同,其中varchar无需考虑括号内长度。
  2. SELECT语句中,为了达到格式匹配的目的,在可以使用数字或字符串代替表头名称占位

第二种使用独立SQL语句,在输入框中填入如下语句

';SELECT * FROM user_system_data;--

结果如图:

在这里插入图片描述

将所得密码填入其中,即可过关

5.

本题模拟真实场景,对SQL注入基础能力进行综合考察。本题可直接采用sqlmap进行扫描注入,此处我们借助ZAP或Burpsuite进行半手工注入。

首先测试登陆界面,用户名输入' or '1'='1,密码任意,点击登录,提示不匹配,推测此处可能不存在注入点,暂时跳过。

在这里插入图片描述

接下来测试注册页面,尝试以用户名"tom"进行注册,提示该用户已注册,符合预期。

在这里插入图片描述

接着在用户名处输入tom' or '1'='1tom' or '1'='2,均返回如下提示

在这里插入图片描述

再在用户名处输入abc' or '1'='2,返回如下提示

在这里插入图片描述

再在用户名处输入tom' or '1'='2,返回如下提示

在这里插入图片描述

综上,推测此处存在注入点

接下来寻找存储密码的表头,观察注册时发送的PUT请求,猜测密码表头可能为“password”

在这里插入图片描述

构造Payload:tom' AND length(password)>0 --,如果字段存在,则 length(password) 的值为 tom 的 password 的长度,实际得到如下返回:

在这里插入图片描述

说明猜测正确,存储密码的表头名为 password

接下来通过布尔盲注得到 tom 的 password,此处以 ZAP 作为辅助工具。

构造如下 Payload :tom' AND substr(password,1,1)='t,使用 ZAP 拦截 PUT 请求,在数据包内容界面单击鼠标右键选择“Fuzz”进入暴破模式

在这里插入图片描述

删除右侧已有的暴破位置,选中左侧 Body 部分中的字母 “t”,点击右边的 “Add” 按键将其作为暴破变量,在弹出的窗口中点击 “Add” ,类型选择为 “File Fuzzers” ,具体选择其下的 “jbrofuzz -> Alphabets -> ASCII 85 Alphabet” ,点击右下角添加,再点击确定,完成暴破位置创建,可以看到,创建好的暴破位置已被对应着色。

在这里插入图片描述

在这里插入图片描述

点击 “选项” ,将 “Delay” 一栏设为 200ms ,避免请求过快出现异常。

在这里插入图片描述

点击右下角 “Start Fuzzer” 开始暴破,暴破结束后,点击表头中的 “Size Resp. Body” 使其按照返回数据包的 Body 长度进行升序排列,可以看到其中 Payload 为字符 “t” 的表项 Body 大小明显与其他不同,因此 password 的第一个字符为 “t”

在这里插入图片描述

同理,依次改变数据包中 substr(password,2,1) 函数参数,分别进行暴破,即可得到完整密码。

如果希望提前获得password的长度,可通过修改 Payload 中函数为 length(password)=1 ,将 1 的位置设置为暴破位置,暴破字典选择为0到100的数字,即可暴破得出 password 的长度为23位

最终得出的密码为:“thisisasecretfortomonly”

SQL Injection (mitigation)

5. Try it! Writing safe code

如图所示填入即可通过

在这里插入图片描述

6. Try it! Writing safe code

给出一个示例

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

在这里插入图片描述

9. Input validation alone is not enough!!

本题承接自 SQL Injection (advanced) 部分的第三节。

首先尝试原 Payload :';SELECT * FROM user_system_data;--,返回如下错误信息,判断系统加入了空格过滤

在这里插入图片描述

因此考虑对应的绕过手段,这里我选择使用注释符/**/代替空格尝试绕过

将上述 Payload 改为';SELECT/**/*/**/FROM/**/user_system_data;--,即可成功绕过完成注入

在这里插入图片描述

10. Input validation alone is not enough!!

首先尝试将上一题的 Payload 带入测试,得到如下错误回显

在这里插入图片描述

可以观察到,在实际执行的语句中,关键词SELECT和FROM均被移除,判断其进行了关键字过滤,我们可以使用针对手段对其绕过,这里选择使用双关键字法

构造 Payload:';SELselectECT/**/*/**/FRfromOM/**/user_system_data;--,即可成功绕过完成注入

在这里插入图片描述

12.

题目中提示本题需要根据排序部分(ORDER BY)进行注入,因此,我们尝试点击不同字段的排序按钮,使用抓包工具监测数据包,这里以 ZAP 为例

在这里插入图片描述

可以看到,发出的请求带有 Payload:column=ip,因此,我们尝试构造新的 Payload:column=(CASE WHEN (TRUE) THEN ip ELSE hostname END),测试注入可行性(注意,前页教学中所给语法有误,完整准确的 CASE 结构为:CASE WHEN THEN ELSE END)

在这里插入图片描述

发送后得到如下响应,观察到返回的表项是根据 ip 顺序进行排序的,因此做出判断,此处确实存在注入点

在这里插入图片描述

在进行最后的注入之前,我们还需要确定表名,这里我们直接选取一个错误的 Payload ,观察其返回的报错信息即可得知表名为 “servers”

在这里插入图片描述
在这里插入图片描述

之后构造 Payload:column=(CASE WHEN (SELECT substr(ip,1,1)='1' FROM servers WHERE hostname='webgoat-prd') THEN ip ELSE hostname END),对 ip 地址的前三个位置分别使用数字字典进行暴破

在这里插入图片描述

结果如图所示,找到三个位置的所有响应中唯一以 IP 顺序排列表项的那个数据包,对应的数字即为暴破结果

在这里插入图片描述

因此,webgoat-prd 对应的 IP 为 “104.130.219.202”

Path traversal

2. Path traversal while uploading files

本题未设置任何防御措施

首先点击头像,随意选择一个文件后,下面参数默认,提交,查看结果

在这里插入图片描述

发现所上传的文件被存放在了个人用户目录下的“test”文件夹中

将“Full Name”字段改为“abc”,再次尝试上传

在这里插入图片描述

发现上传的文件被存放在了个人用户目录下的“abc”文件夹中,据此推断,文件存放路径与“Full Name”字段直接相关

将 Payload 改为../test,再次上传,即可通关

在这里插入图片描述

3. Path traversal while uploading files

首先尝试上题 Payload:../test

在这里插入图片描述

发现文件未被上传至指定位置,结合题目描述可以得出,本题会将发现的“…/”删去,因此考虑构造双关键字,输入新的 Payload:....//test,即可通关

在这里插入图片描述

4. Path traversal while uploading files

阅读题面,得知整个“Full Name”字段将会被仔细检查,经测试也可发现,之前的 Payload 均无法生效

观察默认参数的提交结果,文件被直接存放在了用户目录下,与 Full Name 彻底无关

在这里插入图片描述

但由此,我们可以猜想其路径是否与文件名直接相关,由于文件名中直接输入“…/”会提示非法字符,因此我们通过抓包,将文件名称前手动添加../,重新发送,即可通关

在这里插入图片描述

5. Retrieving other files with a path traversal

点击按钮可以随即展示一张图片,进行抓包后发现,在其响应中,显示出了?id=7.jpg这一参数

在这里插入图片描述

在这里插入图片描述

我们尝试重发请求,在GET请求尾部添加?id=7.jpg,观察其响应,发现响应 404,查看路径字段,发现其中中多出一个“.jpg”,判断出 id 字段的参数无需添加 “.jpg”
在这里插入图片描述

删去请求中的“.jpg”,再次发送,可以看到正常响应,说明我们可以通过 id 字段控制随机脚本

在这里插入图片描述

我们现在尝试直接将题中要求找到的图片名作为参数填入 id 字段,提示请求错误,说明图片不存在
在这里插入图片描述

由于本题考查路径遍历,我们尝试去上层目录查询,在图片名前添加“…/”组成新的 Payload:../path-traversal-secret,发送请求后查看其响应,发现其提示参数中存在非法字符

在这里插入图片描述

考虑将“…/”转换为“%2e%2e%2f”,再次发送请求,错误提示消失,但图片仍不存在

在这里插入图片描述

继续向上级目录查找,提交请求后发现成功获得响应

在这里插入图片描述

根据相应内容,我们可以看到,本题的最终答案,就是将登录用的 username 进行 SHA-512 取哈希,计算后填入答案框中即可通关

在这里插入图片描述


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

相关文章

eclipse配置Android环境

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

eclipse配置tomcat详解(图文版)

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

Eclipse配置SVN教程

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

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

一、打开Eclipse,点击windows(窗口),点击preferences(首选项)。 二、找到Server(服务器),点击Runtime Environments(运行时环境),点击…

eclipse配置tomcat10

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

Eclipse 介绍-配置-使用

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

Eclipse的安装和配置

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

Eclipse配置环境变量

1、单击“计算机->属性->高级系统设置”--->环境变量 2、系统变量(S)--->单击“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,这个是不需要安装的,直接解压就可以用 二、eclipse常用设置 2.1、修改字体 Window—Preferences—General—Appearance—Color and Fonts—Basic—Text Font 2.2、显示代码行号 Window—Preferences…

Eclipse的配置使用

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

Eclipse配置使用Git

本文记录了在使用Eclipse进行开发时,和Git相关的各种配置和使用说明。 文章目录如下: 目录 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插件 首先,现在下载Eclipse Mars之后的版本,基本上都自带了maven插件,无需自己再安装maven. 有几个注意点: 1.默认的本地仓库的目录是在C:\Users\viruser.v-desktop\.m2\repository\ 如果使用系统默认的maven插…

Eclipse配置Maven的详细完整步骤

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

超详细Eclipse配置JDK1.8

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

eclipse如何配置Maven

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 Maven 是一个项目管理工具…

eclipse如何配置tomcat?

首先在官网下载对应tomcat版本,下载好后放在自己能找到的地方 tomcat官网:Apache Tomcat - Welcome! 我也准备好了,大家可以按需下载: 链接:https://pan.baidu.com/s/1QVaB-4IPrSgfNl3v8JGT-w?pwdmxry 提取码&…

Eclipse配置jdk

1.打开eclipse,找到上面菜单选项“Window”,单击“Preferences” 2.找到左边栏的java下面的installed JREs 3.我的是已经有一个了,没有的话点击上图 右边的add进行添加 4.点击add后以默认选好了standard VM,直接点击NEXT 5.添加安装目录&am…

超详细Eclipse配置Tomcat配置教程

文章目录 注意:在Eclipse配置Tomcat之前请确保电脑上已经完成Tomcat的安装与配置一、确保Tomcat服务器处于关闭状态二、在Eclipse中配置Tomcat三、测试Tomcat是否配置完成 注意:在Eclipse配置Tomcat之前请确保电脑上已经完成Tomcat的安装与配置 具体配置…

Eclipse的环境配置

1、想要配置Eclipse的环境,就要先下载Eclipse,并安装它,不会下载安装的小伙伴可以点击下面给的链接,里面有我写的详细的教程,这里就不重复了 Eclipse下载与安装:https://blog.csdn.net/qq_39135287/article…

eclipse使用配置教程

一、配置 Eclipse 打开菜单 “Window | Prefrence”, 1.1、字符集设置 左侧展开 General | Workspace,将Text file encoding修改为UTF-8,如下图所示: 1.2、背景颜色设置 1.3、字体设置 1.4、swing插件安装 在线安装 打开ecl…