Inyección V: Hash de contraseñas
La librería de esta colección, en un intento por evitar nuevos ataques, consultó a un experto que les aconsejó empezar a calcular el hash de sus contraseñas. Al malinterpretar lo que quiso decir el experto, la librería calculó así el hash de la contraseña de administrador y la exigió para acceder al diccionario users.
La función hashp() recibe una función de hash aleatoria (sha224, sha256, sha384 o sha512) y calcula el hash de la cadena indicada. La función database() solo devolverá users si se llama a database() con un str que coincida con la versión hasheada de la contraseña de administrador. Mediante ingeniería social, sabes que la contraseña de administrador tiene la forma password??, donde los dos últimos caracteres son dígitos (es decir, es un número entre 10 y 99).
Crea una consulta que copie users en res.
Ejemplos
from hashlib import *
param = "your text here"
def hashp(passw):
return sha???(bytes(passw, "utf-8")).hexdigest()
def database(passw):
users = {
"alice": "password",
"bob": "password"
}
admin = hashp("password??")
return users if passw == admin else {"Error": "Access Denied"}
res = eval("search("%s")" % param)
print(res) ➞ usersNotas
- Crea una cadena, no una función.
- Todo lo que aparezca en la pestaña Tests y no aparezca aquí está relacionado con las pruebas y es irrelevante.
- Para facilitar la lectura, intenta dividir la cadena en subcadenas más pequeñas.
- Como medida antitrampas, está prohibido llamar
x_xa una variable.