【问题标题】:SyntaxError: Invalid syntax? Eval() [duplicate]SyntaxError:语法无效? eval() [重复]
【发布时间】:2019-07-26 03:06:36
【问题描述】:

基本上我正在针对 python eval 安全问题进行 POC,但出现以下错误:

Traceback (most recent call last):
 File "exploit.py", line 11, in <module>
  a = paste()
 File "exploit.py", line 6, in paste
  if eval('%s > 1' % a):
 File "<string>", line 1
import os;os.system('pwd') > 1
     ^
SyntaxError: invalid syntax

代码:

import datetime

def paste():
    a = "import os;os.system('pwd')"
    if eval('%s > 1' % a):
       print a
    else:
       #create_brew(request.json)
       return None, 201
a = paste()
print a

谁能帮助我如何在线导入库?

【问题讨论】:

  • 对比__import__("os").system("pwd"),纯粹是一个表达式。

标签: python


【解决方案1】:

eval 在表达式中起作用。 使用exec执行语句[import是语句]

另请注意,您不能将 exec 分配给变量。

>> exec('import os;data = os.getcwd()')
>> print(data)
>> # /path/of/you/cwd

您可以使用变量data 继续您的测试。


冒昧地编辑您的代码如下:

def paste():
    data = None
    exec('import os;data = os.getcwd()')
    if data:
        return data
    else:
         return None, 201


a = paste()

print(a)

【讨论】:

  • 你能再澄清一点吗?你的意思是像a = "exec(import os;os.system('pwd'))"
  • 更新了我的答案。您不能像使用 eval 那样分配它。请注意, eval 仍然会返回 None 。 docs.python.org/3/library/functions.html#eval
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多