Python raw_input()利用远程代码执行

时间:2012-06-28 11:59:33

标签: python exploit

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

我有两个班,第一个有一个我不应该打电话的方法,既不是来自外部,也不是来自内部;第二个有一个方法来解析用这种方式构建的用户请求:“方法调用arg1 arg2 ......”。 例如:“add 5 3”。并且应该使用5和3作为参数调用方法“do_add”。

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_'是一个很好的保护吗?

1 个答案:

答案 0 :(得分:2)

无法利用这一点。除非其中一个do_方法有其他漏洞。您无法执行未在process_cmd调用的同一对象上定义的方法。

input将是一个完全不同的东西,你执行任何你想要的东西。