Impossibile accedere a dvwa con un semplice programma python, anche se le credenziali di accesso sono buone

2
import requests

target_url = "http://127.0.0.1/dvwa/login.php"
data_dict = {"csrfmiddlewaretoken": "bbbfeed6e1aea50f14a51a331054022c", "username": "admin", "password": "password", "Login": "Submit"}
response = requests.post(target_url, data=data_dict)
print(response.content.decode(errors="ignore"))

Sto usando il codice qui sopra per accedere qui: link Dopo aver letto alcune letture, ho visto che era perché non è riuscito al controllo CSRF, quindi l'ho implementato nel mio data_dict.

Ecco il problema: ora, anche con il controllo CSRF aggiunto, mi sta dando lo stesso

invalid CRSF token

problema come prima.

Che cosa sta succedendo? Grazie in anticipo.

    
posta Erik Dz 02.11.2018 - 18:24
fonte

1 risposta

1

Per accedere devi anche inviare un campo nascosto chiamato user_token che assomiglia a questo:

<input type='hidden' name='user_token' value='random_value_here' />

Il valore cambia ogni volta che si aggiorna la pagina, quindi è necessario un po 'di scraping del web per fare ciò che si sta cercando. Il seguente codice utilizza bs4 per raschiare la pagina e ottenere il valore di user_token corretto e quindi accede correttamente all'applicazione:

import requests
from bs4 import BeautifulSoup

url = "http://127.0.0.1/dvwa/login.php"

def get_token(source):
    soup = BeautifulSoup(source, "html.parser")
    return soup.find('input', { "type" : "hidden" })['value']

with requests.Session() as s:
    src = s.get(url).text
    creds = {
        "username"   : "admin",
        "password"   : "password",
        "Login"      : "Submit",
        "user_token" : get_token(src)
    }
    r = s.post(url, data = creds)
    print r.text
    
risposta data 02.11.2018 - 20:07
fonte