Injeção V: Hash de senhas

A livraria desta coleção, na tentativa de evitar novos ataques, consultou um especialista que a aconselhou a começar a aplicar hash em suas senhas. Por entender errado o que o especialista quis dizer, a livraria aplicou hash na senha de administrador e passou a exigi-la para ter acesso ao dicionário users.

A função hashp() recebe uma função de hash aleatória (sha224, sha256, sha384 ou sha512) e calcula o hash da string fornecida. A função database() só retornará users se database() for chamada com uma str que corresponda à versão com hash da senha de administrador. Por meio de engenharia social, você sabe que a senha de administrador tem o formato password??, em que os dois últimos caracteres são dígitos (ou seja, é um número entre 10 e 99).

Crie uma consulta que copie users para res.

Exemplos

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) ➞ users

Notas

  • Crie uma string, não uma função.
  • Tudo o que estiver presente na aba Tests e não aparecer aqui está relacionado aos testes e é irrelevante.
  • Para facilitar a leitura, tente dividir sua string em substrings menores.
  • Como medida antitrapaça, é proibido nomear uma variável como x_x.