目录

  • 前言
  • 一、环境配置
    • 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 add –
echo '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

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

二、通关攻略(建设中)

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工具,直接打开一个终端进行解码即可:

第二题需要解码一段由异或编码处理过的信息,而且是用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:

第二题将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

WebGoat通关攻略相关推荐

  1. WebGoat通关攻略与详细解析——SQL Injection(intro)篇

    写在前面: 目前WebGoat通关攻略与详细解析处于持续更新中,若大家在阅读的过程中发现什么问题或者有什么建议,都可以在发布在评论区或私信我,我们一起共同探讨! 由于所有通关攻略写在一起导致篇幅太长, ...

  2. “掘金”金融AI落地,英特尔趟出一套通关攻略

    有人说,金融业是最大的AI应用场景,但不管怎样,不可否认的事实是金融业已经从数字化走向AI化. 某种程度上,AI与金融业有着天然的契合性:其一,金融业本身就是以数据为基本元素的行业,它为AI的模型训练 ...

  3. CVPR一区审稿人分享:图像分割论文通关攻略

    攻略分两部分: 1.入门   2.创新点及实验优化 配套工具以及学习资源 文末扫码即可免费领取 上个月,一个读者发私信问我,他目前研究方向是图像分割,想弃坑了. 因为实验室就只有他一个人做这个方向,导 ...

  4. 计算机游戏第72关,史上最难的游戏第72关 第72关通关攻略

    史上最难的游戏第72关 第72关通关攻略 2014-04-03 来源: 996手游网 编辑: 帽纸 () 史上最难的游戏是以暴走漫画为游戏剧情及背景,让无数小伙伴们抓狂的游戏.全新的关卡又更新了,为了 ...

  5. 秋招注意事项和面试通关攻略

    首先给大家说声抱歉,最近由于个人工作(突然996)和精力上的原因,导致公众号断更了一段时间,后面会逐渐恢复公众号的更新,在此感谢大家的理解和支持. 国内主流的互联网公司在 8 月份都开放了秋招申请,那 ...

  6. imToken 测评通关攻略

    imToken 测评通关攻略 2017-10-19 imToken 在 1.3.3 版本新增了用户风险测评系统, 目的是为了让更多的用户了解钱包安全知识以及区块链的基本概念, 从某种程度上提升了整个区 ...

  7. 无悔入华夏怎么一直显示服务器,无悔入华夏快速通关攻略

    无悔入华夏怎么通关快呢?下面小编为大家带来无悔入华夏快速通关攻略,一起看看吧. 名臣带的:墨子(墨守加防御),李牧(神,前期点出据守加防御,中期点出另一个加兵,相当于子弟兵),商鞅(拿来治国的),孟子 ...

  8. 首届广西网络安全技术大赛初赛通关攻略

    首届广西网络安全技术大赛初赛通关攻略 前言 第一次参加安全类比赛(好吧,其实我这种宅男参加的比赛都很少,很多种比赛都是第一次 - -),同组的组员建议我在比赛完写个通关攻略出来.听起来不错,写个通关攻 ...

  9. 手机寂静岭 java 攻略_寂静岭PT最终房间进入及通关攻略

    寂静岭PT玩到最后一个房间时,很容易出现不知道怎么进入房间的问题,不少玩家都在论坛.贴吧等地方询问是不是bug导致的.其实这并不是bug,而是大家前期没有触发相关机关.下面小编就给大家介绍一下最终房间 ...

最新文章

  1. 应用程序启动器 标记为信任_为什么您今天不能信任应用程序-以及如何解决它...
  2. MATLAB中处理边界的函数
  3. 【STM32】处理字符串时 \r\n、\r、\n 的区别
  4. C语言中类型使用的问题
  5. II play with GG
  6. LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
  7. java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印
  8. 小甲鱼 OllyDbg 教程系列 (三) :PJ 软件功能限制
  9. python游戏入门书籍推荐
  10. 2018/12/26
  11. 开源实时视频码流分析软件:VideoEye
  12. 电气技术与计算机技术结合,探析计算机与电气自动化技术有机结合.doc
  13. Excel将两个图片合并为一张
  14. Matlab之双坐标轴绘制plotyy
  15. WixSharp打包软件安装包入门教程
  16. KISSY基础篇乄KISSY之优化实例
  17. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25
  18. 3人3天喝3桶水,9人9天喝了多少桶水?
  19. 2020牛客暑期多校训练营(第六场)E——Easy Construction
  20. Linux应用开发【第四章】Linux进程间通信应用开发

热门文章

  1. hutool 自定义excel_HuTool工具类使用之Excel文档的导入导出
  2. 23.国外14亿泄露数据下载及还原
  3. css calc 计算属性值
  4. 百度地图api驾车出行方案_摄影操作教程:驾车出行的75个步骤
  5. 思科华为设备MSTP配置命令对比
  6. 让 Homekit 不再鸡肋,树莓派、 Homebridge 、AC86U 的 Mixture!
  7. Live Speech Portraits: Real-Time Photorealistic Talking-Head Animation (译文)
  8. pyqt5界面打开flash(.swf)文件
  9. 机你太美 | 华为vs三星折叠屏大战,结果王自如赢了?!
  10. Alexa排名猛升18,539位(www.mobi123.cn,手机网址之家)