A10 Server-side Request Forgery
1. Cross-Site Request Forgeries
1-3, 这里有个submit query按钮,直接点击会提示来自相同host,我们改下请求的host就可以拿到flag,
这是最简单的方法,但这里应该不是这个目的。xsrf通常是同一浏览器的不同网站之间有恶意行为。所以我们要自己写一个html文件来模拟外站,复制sub query那个form
<html>
<body>
<form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" name="form1"
target="_blank" successcallback=""
action="http://127.0.0.1:8081/WebGoat/csrf/basic-get-flag">
<input name="csrf" type="hidden" value="false">
<input type="submit" name="submit">
</form>
</body>
</html>
然后在同一个浏览器打开,点击提交按钮
1-4, 这关同上,也是改host,也可以构造html,然后填表提交
1-7, 这关需要在外站用json提交数据,因为json提交会有cros检验限制,所以这关出了修改host外,还需将Content-Type改为 text/plain
1-8, 这关只需新注册个用户,用户名为当前用户名前加csrf-,然后在同一浏览器登录。再点击solved即可
2. Server-Side Request Forgery
2-2,这关修改请求获取不同的服务器资源,直接修改图片名称即可
2-3, 这关也是直接修改请求,将请求改为一个地址,这样返回的就是地址的内容了,地址是个外站
client side
1.Bypass front-end restrictions
一共两关,都特别简单,页面以正则的方式限制了输入的内容,我们抓包绕过前端,然后直接修改就可以
2. Client side filtering
2-2,这里是想获取Neville Bartholomew的薪水,页面没展示,但是看源码是可以直接看到的
2-3, 这关是需要我们找到checkout code,从源码给的提示我们可以看到checkout code有webgoat, owasp, owasp-webgoat
我们分别填入去试试,发现有个请求时返回不同code的折扣的
我们修改这个请求,把后面的code去掉,发现返回的是所有的code列表。可以看到有我们想要的。
3. HTML tampering
3-2,这个直接抓包改数字就可以,没什么好说的
challenges
1. Admin lost password
这关要求是要找到admin的密码登录。第一个肯定想到的是sql注入,但是试了几下都不行,然后看了前端代码也没找到什么线索。题目也提示了爆破是不行的。这就没辙了。后来网上看了答案,简直让人震惊。密码竟然藏在那个图片里,下载logo,然后记事本打开就可以看到,我想现实中应该没有人会这么干嘛,不知道这题的意义何在 。
2.Without password
这关可以使用sql注入
3. Admin password reset
这关目标和以前的重置密码一样,但是原来的方法不行了,原来修改host能直接拦截邮件请求。这里不行。直接说结果,网上看的答案,这里有个git源码泄露的漏洞,请求WebGoat/challenge/7/.git就能下载到.git文件,然后就能看到生成token的源码,
从源码可以看出这里随机生成设置了一个种子,这个种子是固定的。那这里就会有个问题,当设置相同的种子后,random生成的随机序列是一样的。也就是伪随机,所以这里我们也就可以生成admin的token。
4. Without account
这关只要把GET改成HEAD就可以了,后端使用了spring boot的@GetMapping注解,但这个注解并有限制head请求