Python raw_input()攻击远程代码执行

Python raw_input()攻击远程代码执行,python,exploit,Python,Exploit,我正在寻找一种方法来使用raw_input()提示符执行另一个对象的代码,以确保以安全的方式执行 我有两个类,第一个类有一个我不应该调用的方法,既不是从外部调用,也不是从内部调用;第二个有一个解析用户请求的方法,它是这样构建的:“调用arg1 arg2的方法…”。 例如:“添加5 3”。方法“do_add”应以5和3作为参数调用 class Obj1 : # ... def do_forbidden(self) : # Not supposed to exec

我正在寻找一种方法来使用raw_input()提示符执行另一个对象的代码,以确保以安全的方式执行

我有两个类,第一个类有一个我不应该调用的方法,既不是从外部调用,也不是从内部调用;第二个有一个解析用户请求的方法,它是这样构建的:“调用arg1 arg2的方法…”。 例如:“添加5 3”。方法“do_add”应以5和3作为参数调用

class Obj1 :

    # ...

    def do_forbidden(self) :
        # Not supposed to execute

    # ...

class Obj2 :

    # ...

    def process_cmd(self, cmd) :
        words = cmd.split()
        if len(words) > 0 :
            mthdname = 'do_' + words[ 0 ]
            args = words[1:]

            if hasattr(self, mthdname):
                mthd = getattr(self, mthdname)
                mthd(*args)

    # ...
然后:

obj1 = Obj1()
obj2 = Obj2()
# ...
cmd = raw_input("Command : ")
obj2.process_cmd(cmd)
在这里,是否有一种方法可以键入可以从obj1执行“do_forbidden()”的内容?input()而不是raw_input()有区别吗


如果确实有可能利用此漏洞,攻击者可以“猜测”其中一个方法的名称来执行此漏洞,那么前缀“do_uu”是否是一种良好的保护?

不可能利用此漏洞进行攻击。当然,除非
do\uu
方法之一存在其他漏洞。您不能执行与调用
process\u cmd
的对象不同的方法


input
将是一个完全不同的东西,您可以根据需要执行任何操作。

如果这有用的话,我正在使用Python 2.6。谢谢。你确定没有一种奇怪的方式来执行诸如缓冲区溢出或任何其他奇怪的事情吗?对于input(),我想保留raw_input()是个好主意!缓冲区溢出通常是内存分配错误的结果。由于在Python中不手动执行此操作,因此不太可能生成一个(可能是在C扩展中,是的,也可能是通过ctypes模块…)