WebGoat攻略 for Mac(1)
- 一、环境配置
- 1.配置Docker
- 2.配置WebGoat
- 3.连接WebGoat
- 二、题目攻略
- Introduction(介绍)
- a.WebGoat
- b.WebWolf
- General(通用)
- a.HTTP Basics(HTTP基础)
- b.HTTP Proxies
- 配置OWASP ZAP
- c.Developer Tools(开发人员工具)
- d.CIA Triad
- e.Crypto Basics(加密基础)
- f.Writing new lesson(略)
最近网络对抗原理课程的实验刚好用到WebGoat来学习网络安全知识,顺便记录一下WebGoat的学习攻略,供大家参考。
一、环境配置
作者的电脑为17年的MacBook Pro,现版本为macOS Big Sur(11.2.3)。
但是我建议优先使用Fedora,其次是Linux,最后才是类Unix系统,由于作者较懒,所以直接使用类Unix系统进行实验了。(极其不推荐)
1.配置Docker
终端下载Docker:
brew install --cask --appdir=/Applications docker

2.配置WebGoat
- 终端输入:
sudo docker pull webgoat/webgoat-8.0

- 终端输入:
sudo docker pull webgoat/webwolf

- 终端输入:
sudo docker pull webgoat/goatandwolf

3.连接WebGoat
- 终端输入:
sudo docker run -p 8888:8888 -p 8080:8080 -p 9090:9090 webgoat/goatandwolf

- 打开浏览器,进入网址:
http://127.0.0.1:8080/WebGoat

到达这个界面之后就说明环境配置成功了,第一步目标完成!
While running this program your machine will be extremely vulnerable to attack. You should disconnect from the Internet while using this program. WebGoat’s default configuration binds to localhost to minimize the exposure.
This program is for educational purposes only. If you attempt these techniques without authorization, you are very likely to get caught. If you are caught engaging in unauthorized hacking, most companies will fire you. Claiming that you were doing security research will not work as that is the first thing that all hackers claim.
上面是注册账号时的须知,大概意思就是运行此程序的时候机器容易受到攻击,最好断网使用(减少曝光);其次就是本软件仅面向教育,如果你未经授权使用学习到的黑客技术,被公司解雇,责任自负。
二、题目攻略
Introduction(介绍)
a.WebGoat
WebGoat是一个故意不安全的应用程序,允许像您一样感兴趣的开发人员测试使用常见和流行的开源组件的基于Java的应用程序中常见的漏洞…
b.WebWolf
- Introducing WebWolf(介绍 WebWolf)
WebWolf使用的是端口9090,一般在题目要求使用WebWolf的时候才会使用。需要时打开网址:
http://127.0.0.1:9090/WebWolf

- Uploading files(上传文件)
WebWolf可以上传文件。这些文件将从应用程序外部获得。
例如,如果你想在XXE攻击中引用从xml引用的DTD,你可以使用WebWolf为该DTD提供服务。

上传文件后,可以通过点击Link获得完整URL。
- Your own mailbox(你自己的邮箱)
WebWolf为每个账号提供了一个邮件客户端,其中包含上课期间发送的电子邮件。

输入自己的邮箱,如(sadasdaf@webgoat.org),然后点击发送。

获得code为fadsadas,输入这个code即可完成任务。
- Landing page(登陆页面)
这意味着您可以使用WebWolf作为收集cookie等的登陆页面,这在您执行XSS课程时很有帮助。

点击蓝色的Click here to reset your password,将会打开一个页面。

输入重置密码后,用户将会看到错误的界面(事实上在正常的攻击中,用户看到的是正常的界面,这只是WebGoat的一个机制)。然后攻击者会在WebWolf中收到新密码。

可以看到新密码是abcdefg,而code是fadsadas,输入code,完成任务。
General(通用)
a.HTTP Basics(HTTP基础)
- How HTTP works(HTTP的工作原理)
在这里会给你一个连接下载OWASP ZAP(攻击代理),点连接下载就可以了,因为是从Github里面下载,所以记得挂VPN。
每个客户端请求和服务器响应有三个部分:请求或响应行、头部分和实体主体。
客户端发起交易时:
a. 客户端联系服务器并发送文档请求。GET请求可以具有url参数,这些参数将在Web访问日志中可用。
GET /index.html?param=value HTTP/1.0
b. 接下来,客户端发送可选的头信息,以通知服务器其配置和它将接受的文档格式。
User-Agent: Mozilla/4.06 Accept: image/gif,image/jpeg, /
c. 在POST请求中,用户提供的数据将遵循可选的标头,而不是POST URL中包含的数据的一部分。
- Try it !
在下面的输入字段中输入您的姓名,然后按“开始!”提交。服务器将接受请求,反转输入并将其显示给用户,说明处理HTTP请求的基本原理。


可以看到输入的名字被反转了。
- The Quiz
WebGoat在本课中使用了哪种类型的HTTP命令。POST还是GET。

打开开发者界面,随便输一些数字,点击Go!,然后可以看得到:

显然,第一个空填POST;第二个空填10。任务完成。
b.HTTP Proxies
- What’s a HTTP Proxy(什么是代理)
代理是将您的http客户端连接到后端资源的一些转发应用程序。
使用ZAP,您可以记录流量,检查流量,修改来自浏览器的请求和响应,并通过检查流量获取ZAP检测到的一系列已知漏洞的报告。
然后介绍了一些配置OWASP ZAP、ZAP使用、Burp重播的流程(后面都有介绍)。
- HTTP Proxy Setup
设置ZAP作为本地主机上的代理。
配置OWASP ZAP
- 启动ZAP。
在初始设置中选择“No, I do not want to persist this session at this moment in time.”,然后点击开始。
- 配置代理端口。
菜单中工具 > 选项… > Local Proxies > 选择一个端口如8090(空闲的) > OK。
- 设置浏览器
点击Manual Explore,按照下图进行配置(提前下载好火狐浏览器Firefox):

点击“启动浏览器”,即可进入这个界面,配置完成。
- 在历史面板中筛选请求
可以看到历史面板信息太多:
点击“过滤”前面的小图标,在“URL Inc Regex”中输入:
.*WebGoat.*
在“URL Exc Regex”中输入:
.*lesson.*.mvc
点击应用,然后历史信息中就不会显示内部WebGoat的请求了。

- 配置断点过滤器
点击工具栏中“橙色的叉号”,安装下图进行配置(当请求头包含POST时):

拦截的时候必须是使用ZAP打开的浏览器如FireFox。
- 拦截与修改请求
当您的请求被拦截时,请按照以下方式修改。

点击“Submit”,会弹出以下页面:
查看ZAP捕捉到的断点:

按照要求进行修改:

点击继续按钮,发现任务完成。

- 使用ZAP中的“编辑和重新发送”功能
从ZAP内部重新发送同一请求,不必切换到ZAP启用拦截按钮。
点击左侧的某个文件,右击文件选择“重发送”即可。如果您通过以这种方式提出请求解决了作业,WebGoat将自动将课程标记为已解决。(按照课程介绍导入OWASP ZAP根证书就可以了)
- ZAP为https代理
OWASP ZAP代理也可以配置为代理https请求。
- 手动设置代理
略过,后面有需要再回来看吧。
- Burp
另一个常用的代理,感兴趣的同学可以自己下载试试,本节有详细步骤。
c.Developer Tools(开发人员工具)
- “控制台”
通过控制台,你还可以运行自己的JavaScript代码行。如:console.log(“Hello WebGoat!”); 。
- 使用控制台
需要在控制台输入一个函数,得到返回的Code。

按照要求在控制台输入响应函数后,得到一个随机数:

输入随机数-367549795,完成任务。

- 使用“网络”选项卡
单击“Go!”,这将生成一个HTTP请求。尝试查找特定的HTTP请求。请求应该包含一个字段:“networkNum”,将随后显示的数字复制到下面的输入字段中,然后单击check按钮。

点击“Go!”,收到一个network:

打开之后,找到networdNum的数值。

将随机数输入,任务完成。

d.CIA Triad
- 机密性
确保机密性方法:
数据加密,身份验证(密码、双重认证、生物识别验证),减少信息出现的地方/次数,物理安全测量等。
- 完整性
确保完整性方法:
备份,冗余,哈希函数检查完整性,功能良好的身份验证方法和访问控制等。
- 可用性
确保可用性方法:
入侵检测系统,网络流量控制,防火墙,硬件维护等。
- 测试题目
答案:

e.Crypto Basics(加密基础)
- Base64编码
Web应用程序有时会使用基本身份验证,这使用Base64编码
可以使用终端进行base64解密,代码如下(只需要把中间的base64编码换掉就可以):

echo c2FkYXNkYWY6YWRtaW4= | base64 -d
- 其他编码
HTML编码、UUEn编码、XOR编码。
下面是XOR编码的解密实战:

使用{xor}解码工具进行解码:

输入密码,任务完成。

- 哈希
任务是解密哈希码:

使用MD5在线解码工具进行解码:


输入结果,任务完成。

- 对称加密与非对称加密(略)
- 签名
RAW签名、CMS签名、SOAP签名、电子邮件签名、PDF或Word或其他签名。(网页中均有详细介绍)
任务是
将RSA密钥的模量确定为十六进制字符串,并使用该密钥计算该十六进制字符串签名。

首先将私钥复制到一个private.txt文本中,如图所示:

然后在终端中输入:
openssl rsa -in ./private.txt -modulus

然后对模进行加密操作,终端中输入:
echo -n "95A4C235BBE7736C85A97E76E59158E76F6C57734C864D7FCD68F31A19A30454207BAEC7499406AA9B60B9487FA73523FC8878D63310B54D4D9078DC253406F9F195E89D5D6AEB250AFC80DAF96F6FCDF1E7376A860C82F2A09AC94613C6DA38F76FA09E45C7323C00A9FC1A3E5FC5C00D6FB771A588A1F1B10ED9B30B38C44E60A381A6BDD547BFD9A27067033BE1FBF21FD659F6C90C9E2F0B53DBE8BD0554096D1E80A58DB7A6B1EFD67DD0654B8B049EEA7AA99CF5E2D32B50DE15920D63FF0CE12F207BC79B0F74B2156BED40D9504D489B5C289CCA9C187F44E6AA459AD82D116BB7C79E5A36A58711C118B313E21D673E011FD795B40E33D35854B7C1" | openssl dgst -sign ./private.txt -sha256 -out ./dgst.txt
base64 ./dgst.txt > result
然后就会生成一个result的文件,文件里面就是最终的签名了:

任务完成。

- 基于文件的密钥存储(略)
- Java证书
任务检索意外留在码头容器映像中的密码,可以使用容器内的openssl命令。

终端输入:
sudo docker run -d webgoat/assignments:findthesecret

继续输入:
docker ps

然后输入:(中间的1e35e208f050换成自己的,就是上一步结果中的“CONTAINER ID”)
docker exec -ti 1e35e208f050 /bin/bash

连接到镜像后,发现root文件夹打不开,直接“su”需要密码。首先退出镜像:
exit
然后我们把镜像中的文件拷到本地(第一个“./”是目标地址,自己设置,9a50123bb793是“CONTAINER ID”):
docker container cp 9a50123bb793:./ ./
然后在本地找到root文件夹,进去之后发现default_secret文件(这个就是存储密码的文件),打开default_secret可以看到密码:
然后在终端输入:
echo "U2FsdGVkX199jgh5oANElFdtCxIEvdEvciLi+v+5loE+VCuy6Ii0b+5byb5DXp32RPmT02Ek1pf55ctQN+DHbwCPiVRfFQamDmbHBUpD7as=" | openssl enc -aes-256-cbc -d -a -pass pass:ThisIsMySecretPassw0rdF0rY0u

将得到的“Leaving passwords in docker images is not so secure”和“default_secret”输入,任务完成。

f.Writing new lesson(略)
WebGoat攻略 for Mac(2)
WebGoat攻略 for Mac(3)
WebGoat攻略 for Mac(4)
WebGoat攻略 for Mac(5)


















