环境安装
靶机配置
安装java环境
sudo apt update
sudo apt install openjdk-17-jdk
靶场拉取
docker pull webgoat/webgoat
运行环境
docker run -p 0.0.0.0:8080:8080 -p 0.0.0.0:9090:9090 -e TZ=Europe/Amsterdam webgoat/webgoat
docker ps 查看
启动成功后访问:123.60.164.202:8080可能会遇到以下问题
访问123.60.164.202:8080/WebGoat/login即可
注册账号登录
WebWolf简介
靶场通关
General
General1
随便输入zml
抓包
随便输入GET orPOST 然后输入数字抓包即可得到答案
General2
目标
点击提交后抓包,更改请求方式为GET 添加x-request-intercepted:true 删除请求正文
General3
General4
General5
(A1) Broken Access Control
输入数据后抓包cookie一直在变而且每次数值+1于是开始爆破cookie
第一次:hijack_cookie=1982942791734836260-1697249499605
第二次:hijack_cookie=1982942791734836261-1697249569892
第三次:hijack_cookie=1982942791734836263-1697249590889
第三次应该是1982942791734836262-1697249(569892-590889)才对所以意味着有一个用户拿到了这么一个令牌1982942791734836262-1697249(569892-590889),我们要枚举出来得到他
Insecure Direct Object References
抓包看响应包
-
什么是restful,说人话就是类似动态页面静态化,使用get(查询)、post(更改)、put(新增)、delete(删除)四个方法来代表动作,请求的参数作为路径的一部分,比如,
- 老式的url get查询指定id的写法: htttp://www.example.com/selectBook.do?id=1
- restful写法:请求方法必须是Get http://www.example.com/books/1 1就是参数,get代表查询,books的s是必须加的
- restful查询所有的写法 : http://www.example.com/books/
- 同理,根据id删除的写法 http://www.example.com/books/1 方法必须是delete -
restful模式通过隐藏了url上面的请求动作,显得安全一些,而且针对某个对象开发的url也统一了。
-
回到正题,第4页需要通过post请求,提交一个restful路径来访问自己的配置文件,直接吧上面的路径放过来,加上id,就是restful风格的访问,
通过上面得知id是2342384
根据自己id2342384 点击查看个人资料抓包输入id枚举id
得到用户Buffalo Bill id:2342388
第二个任务是修改用户的配置文件
HTTP content-type
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
HTTP请求方式
这里我们利用PUT请求
缺少功能级访问控制
f12 查找定位隐藏程序
根据提示第2关通过的其中一个url对第3关有帮助
/access-control/users
/access-control/users-admin-fix
/access-control/config
直接URL输入第一个链接
因为这个网站前后端分离以及restful风格,所以content-type要改成json,获得了所有用户的信息,包括Jerry,过关
第四关,需要将当前登录到webgoat的用户添加到这个库,这样他就会判断会话用户存在,于是返回每个用户的数据时,加的是admin的盐,得到了jerry新的hash
NzQ1NDRjNjE2YzZlNTI0NzY1NmY3NDYxNmY2NzYyNjU3Nw==
NzQ1NDRjNjE2YzZlNTI0NzY1NmY2ZTY5NmQ2NDYx
base64解码
74544c616c6e5247656f74616f67626577
74544c616c6e5247656f6e696d6461
16进制解码
可以看出cooike就是前面一段加上用户名反过来
于是tom用户的cookie为tTLalnRGeomot经过16进制编码然后base64编码得到cookie
NzQ1NDRjNjE2YzZlNTI0NzY1NmY2ZDZmNzQ=