使用eval()函数注入hack()函数完成任务,是否需要修改eval()函数?
问题解答
1. 是否需要修改eval()函数?
不需要修改eval()函数本身。当前代码的漏洞在于字符串格式化拼接eval参数的写法:eval(f"login('{user_input}')"),这种方式会将用户输入直接拼接到待执行的代码字符串中,天然存在代码注入风险。我们只需构造恶意的user_input内容,就能利用该漏洞执行注入代码,无需改动eval函数本身。
2. 如何注入hack()函数?
根据hack1.py的逻辑,当hack3.txt文件存在时,程序会读取该文件内容作为user_input传入eval。我们只需在hack3.txt中构造特定内容,即可让eval执行时自动调用hack()。
构造hack3.txt的内容:
'); hack(); #
原理说明:
程序读取该内容后,eval的参数会被拼接为:
eval("login(''); hack(); #')")
');闭合login('的单引号和括号,让login('')先执行(返回空字符串,不影响原有流程)hack();就是我们要注入执行的函数调用#注释掉后续的'),避免出现语法错误
程序执行到eval语句时,就会自动触发hack()函数,完成注入目标。
内容的提问来源于stack exchange,提问作者SAI CHARAN KATKAM
相关产品推荐
相关产品推荐

