Токен CSRF отсутствует при отправке запроса в DVWA с использованием библиотеки запросов Python - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь создать программу, которая позволит мне отправлять имя пользователя и пароль на веб-сайте. Для этого я использую DVWA (чертовски уязвимое веб-приложение), работающее на localhost: 8080.
Но всякий раз, когда я пытаюсь отправить почтовый запрос, он всегда возвращает ошибку.

токен csrf неверен

Вот мой код:

import requests
url = 'http://192.168.43.1:8080/login.php'
data_dict = {"username": "admin", "password": "password", "Login": "Login"}
response = requests.post(url, data_dict)
print(response.text)

1 Ответ

0 голосов
/ 09 мая 2020

Вам нужно сначала сделать запрос GET для этого URL-адреса и проанализировать правильное значение CSRF из ответа (в данном случае user_token). В ответе HTML вы можете найти скрытое значение:

<input type="hidden" name="user_token" value="28e01134ddf00ec2ea4ce48bcaf0fc55">

Кроме того, кажется, что вам нужно включить файлы cookie из первого GET запроса для следующего запроса - это можно сделать автоматически с помощью запроса. Объект Session (). Вы можете увидеть файлы cookie, например, print(resp.cookies) из первого ответа.

Вот измененный код. Я использую библиотеку BeautifulSoup для анализа html - она ​​находит правильное поле ввода и получает из него значение.

POST метод впоследствии использует это значение в параметре user_token.

from bs4 import BeautifulSoup
import requests

with requests.Session() as s:

    url = 'http://192.168.43.1:8080/login.php'
    resp = s.get(url)
    parsed_html = BeautifulSoup(resp.content, features="html.parser")
    input_value = parsed_html.body.find('input', attrs={'name':'user_token'}).get("value")
    data_dict = {"username": "admin", "password": "password", "Login": "Login", "user_token":input_value}
    response = s.post(url, data_dict)
    print(response.content)
...