如何使用curl或javascript登录网站?

问题描述 投票:0回答:1

我正在 Portswigger 上学习 XSRF 的基础知识,并使用 FireFox 完成了实验室:没有防御措施的 CSRF 漏洞。我试图更进一步,从终端完成相同的实验。但是,当我向服务器发送请求时,它会返回登录页面的正文;因此,即使我提供了访问实验室帐户的用户名和密码,身份验证也无法正常工作。

我的目标是使用

curl
测试登录,然后使用
javascript
实现自动化。

这是 Zshell 脚本:

#!/usr/bin/env zsh

curl -iLs --compressed \
--user 'wiener':'peter' --cookie-jar ./tmpCookie.txt \
"https://0ad500d004b92108827b3d3c00770085.web-security-academy.net/login"

curl -iLs --compressed \
--cookie ./tmpCookie.txt \
"https://0ad500d004b92108827b3d3c00770085.web-security-academy.net/my-account?id=wiener"

这是 JavaScript:

//!/usr/bin/env node

const req = require("axios"); // http requests

// Function to authenticate and obtain session token
async function authenticate(url, username, password) {
    try {
        const response = await req.post(url, { username, password });
        return response.headers["session-token"]; // Assuming server returns session token in headers
    } catch (error) {
        console.error("Authentication failed:", error);
        return null;
    }
}

// Make authenticated requests.
async function main() {
    const urL = "https://0ad500d004b92108827b3d3c00770085.web-security-academy.net/login"
    const sessionToken = await authenticate(urL, "wiener", "peter");
}

main();
javascript session curl cookies header
1个回答
0
投票

JavaScript 将凭证作为 POST 正文的一部分发送:

await req.post(url, { username, password })

cURL 命令将其作为 HTTP 基本身份验证发送:

--user 'wiener':'peter'

这是两件截然不同的事情。您可以通过向 cURL 请求添加 JSON 正文(并将其设为 POST 请求)来匹配 JavaScript 版本:

curl -iLs --compressed \
  --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"wiener","password":"peter"}' \
  --cookie-jar ./tmpCookie.txt \
  "https://0ad500d004b92108827b3d3c00770085.web-security-academy.net/login"
© www.soinside.com 2019 - 2024. All rights reserved.