使用Python请求库向DVWA发布请求时缺少CSRF令牌



我正在尝试制作一个程序,允许我在网站上提交用户名和密码。为此,我使用的是DVWA(该死的易受攻击的Web应用程序(,它运行在localhost:8080上。
但每当我尝试发送post请求时,它总是返回一个错误。

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)

您需要首先对该URL发出GET请求,并从响应中解析正确的"CSRF"值(在本例中为user_token(。从响应HTML中,您可以找到隐藏的值:

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

此外,您似乎需要为以下请求包含第一个GET请求中的cookie——这可以通过使用请求自动完成。Session((对象。您可以通过例如print(resp.cookies)从第一个响应中看到cookie。

这是修改后的代码。我使用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)

最新更新