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) ➞ hacker911Notas
- O dicionário
hacker911é gerado aleatoriamente a cada iteração do teste. - Crie uma string, não uma função.