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) ➞ hacker911Notas
- El diccionario
hacker911se genera aleatoriamente en cada iteración de prueba. - Crea una cadena, no una función.