Python请求;登录到DVWA

Python请求;登录到DVWA,python,python-3.x,web,python-requests,Python,Python 3.x,Web,Python Requests,我正试图登录到这个该死的易受攻击的Web应用程序,因为我试图编写我的第一个漏洞。然而,第一个障碍是登录页面。没有有效的登录名,我无法访问其他目录 我试图分析我必须发送的标题等,但我似乎仍然无法使登录工作 POST /dvwa/login.php HTTP/1.1 Host: 192.168.26.129 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: Mozilla/

我正试图登录到这个该死的易受攻击的Web应用程序,因为我试图编写我的第一个漏洞。然而,第一个障碍是登录页面。没有有效的登录名,我无法访问其他目录

我试图分析我必须发送的标题等,但我似乎仍然无法使登录工作

POST /dvwa/login.php HTTP/1.1
Host: 192.168.26.129
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.26.129/dvwa/login.php
Cookie: security=high; PHPSESSID=c4bb8820be21ea83e6545eff0a2cb53b
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 44

username=admin&password=password&Login=Login
当我尝试使用浏览器登录时,这就是burp的全部请求

import requests

payload = {
    'username': 'admin',
    'password': 'password',
    'Login': 'Login'
}

headers = {
    'Host': '192.168.26.129',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
    'Accept': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'http://192.168.26.129/dvwa/login.php',
    'Connection': 'close',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': '44'
}

cookies = dict(security='high', PHPSESSID='c4bb8820be21ea83e6545eff0a2cb53b')

with requests.Session() as c:
    p = c.post('http://192.168.26.129/dvwa/login.php', headers=headers, data=payload, cookies=cookies)
    print(p)
    r = c.get('http://192.168.26.129/dvwa/vulnerabilities/exec')
    print(r.text)
这就是我尝试使用python请求登录的方式。 我两次得到200 OK,但它总是返回登录屏幕的HTML代码


有人能告诉我我的错误是什么吗?

如果您有有效的cookie,您可以将它们添加到会话中

cookies = dict(security='high', PHPSESSID='o9m7jgcspe02h9rffj9g7cv0t5')

with requests.Session() as c:
    c.cookies.update(cookies)
现在您可以访问
/dvwa/vulnerabiles/exec


如果您没有cookie,则可以使用登录页面获取它们。
在登录表单中,您必须提交的隐藏输入字段中有一个令牌。您可以使用或
re
获取其值

import requests
import re


payload = {
    'username': 'admin',
    'password': 'password',
    'Login': 'Login'
}

with requests.Session() as c:
    r = c.get('http://127.0.0.1/dvwa/login.php')
    token = re.search("user_token'\s*value='(.*?)'", r.text).group(1)
    payload['user_token'] = token

    p = c.post('http://127.0.0.1/dvwa/login.php', data=payload)
    r = c.get('http://127.0.0.1/dvwa/vulnerabilities/exec')
    print(r.text)
我使用
re
是因为它是一个标准库,但最好使用
bs4
进行html解析。如果安装了
bs4
,则可以使用此选择器获取令牌:
“输入[name=user\u令牌]”