Inyección VI: Restricción de caracteres

La librería de esta colección insiste en usar eval(), pero dificultó el acceso al diccionario de usuarios para evitar copias. El diccionario hacker911 contiene el user_name y la password de todos los usuarios. La librería no permite que la cadena user contenga h, k ni ningún dígito, con la esperanza de mantener el diccionario inaccesible desde el procedimiento eval(). La función get_user(user_name) devuelve entradas para los usuarios que coinciden con un nombre de usuario determinado.

Crea una cadena de inyección user que copie el diccionario del usuario en res.

Ejemplos

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

  • El diccionario hacker911 se genera aleatoriamente en cada iteración de prueba.
  • Crea una cadena, no una función.