Injeção VI: Restrição de caracteres

A livraria desta coleção insiste em usar eval(), mas dificultou o acesso ao dicionário de usuários para evitar cópias. O dicionário hacker911 contém o user_name e a password de todos os usuários. A livraria não permite que a string user contenha h, k ou qualquer dígito, na esperança de manter o dicionário inacessível a partir do procedimento eval(). A função get_user(user_name) retorna entradas para os usuários que correspondem a um nome de usuário fornecido.

Crie uma string de injeção user que copie o dicionário do usuário para res.

Exemplos

hacker911 = {
  "u_DHQAIC": "pwd_AHGBLIXIO",
  "u_BEOUROGP": "pwd_GQGWVE",
  "u_RPZSQBT": "pwd_EFLT",
  "u_DABRZJRIV": "pwd_EHZUQBW",
  "u_JVGQJC": "pwd_NQFXBQ",
  "u_RVUUIB": "pwd_JNKBLTHEC"
}

def get_user(s):
    if s in hacker911:
        return {s: hacker911[s]}
    return dict()

res = eval("get_user(\"{}\")".format(user))

print(res) ➞ hacker911

Notas

  • O dicionário hacker911 é gerado aleatoriamente a cada iteração do teste.
  • Crie uma string, não uma função.