CSRF例会靶场练习

Lab1: CSRF vulnerability with no defenses

攻克靶场

image-20250320161612684

image-20250320161631173

image-20250320161647567

进去登录,随便输一个email来update email,打开BurpSuite,打开HTTP历史记录image-20250320161845229

找到改email的记录,右键它,找到CSRF PoC

image-20250313191436170

他可以根据我们的 post 表单中的信息自动生成一个CSRF的poc,直接复制下面的HTML就好了

image-20250320162438536

image-20250320162554086

复制到这里,改一下邮箱就解决了

修补建议

使用CSRF token

为每个用户会话生成一个唯一的、随机的CSRF Token,并将其嵌入表单或请求头中。服务器在处理请求时,验证该Token是否有效。

Lab2: CSRF where token validation depends on request method

攻克靶场

按上一个的步骤继续

image-20250320164337758

到这一步时发现下面多了一个csrf,生成PoC试试

没有解决。放重放器试试看看image-20250320172328385

发现如果改了csrf就会提示”Invalid CSRF token”

这道题可以更改请求方式,这样就不会被检测令牌,再生成Poc就可以成功了

修补建议

GET请求也有检测令牌

Lab3: CSRF where token validation depends on token being present

前面的过程一样

image-20250331190009371

生成PoC,这里的依然有csrf,尝试删除

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0a83002c0404404d808a3fd300980049.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="yuhua&#64;bbb&#46;com" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>

可以,通过

Lab4: CSRF where token is not tied to user session

这道题题目给了两个账号

这道题的原因是某些应用程序不会验证令牌是否与发出请求的用户属于同一会话,所以可以用没有用过的令牌去csrf

image-20250331192848841

现在其中一个账号随便换一个邮箱,拦截下来

image-20250331192954335

将 csrf 令牌复制下来,然后丢弃,这样的令牌就是全新未使用的。

&csrf=XlFjr4ghhAisRwfhBkRjkP2lmtqDQux8

开一个无痕窗口登另一个账户

image-20250331193155734

随便换一个邮箱,和之前一样步骤生成PoC

把令牌换成刚刚复制下来的

这样就解决了

登两个账号

image-20250331195653015

修改邮箱看看历史记录

image-20250331201213059

看到有 email , csrf 还有两个cookie,session是用户的登录cookie,csrfkey就是和csrf绑定的,于是可以采用和Lab4一样的方法。

见鬼了,过不了,不知道为什么

等待……


CSRF例会靶场练习
http://example.com/2025/03/20/CSRF例会靶场练习/
作者
yuhua
发布于
2025年3月20日
许可协议