No se puede iniciar sesión en dvwa con un programa Python simple, aunque las credenciales de inicio de sesión son buenas

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"))

Estoy utilizando el código anterior para iniciar sesión aquí: enlace Después de leer un poco, vi que fue porque falló en la comprobación de CSRF, así que lo implementé en mi data_dict.

Aquí está el problema: ahora, incluso con el cheque CSRF agregado, me está dando lo mismo

  

token CRSF no válido

problema como antes.

¿Qué está pasando? Gracias de antemano.

    
pregunta Erik Dz 02.11.2018 - 18:24
fuente

1 respuesta

1

Para iniciar sesión, también debe enviar un campo oculto llamado user_token que tiene este aspecto:

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

El valor cambia cada vez que actualiza la página, por lo que necesita un poco de raspado web para hacer lo que está buscando. El siguiente código utiliza bs4 para raspar la página y obtener el valor user_token correcto y luego inicia sesión correctamente en la aplicación:

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
    
respondido por el game0ver 02.11.2018 - 20:07
fuente

Lea otras preguntas en las etiquetas