标签 - 代码审计

? python ? ? 代码审计 ?    2020-01-10 17:22:56    1694    0    0

0x01 前言

时间的车轮滚滚而过,我终于学到代码审计了。


0x02 Python 危险内置函数

Python3 里面,主要有:

  • eval()
  • exec()
  • compile()

title

注:
python3 删去了 execfile() 函数,代替方法如下:

  1. with open('test1.py','r') as f:
  2. exec(f.read())

Python2 里面,主要有:

  • eval()
  • execfile()
  • compile()

    title

注:
需要说明的是在 Python2 中 exec 不是函数,而是一个内置语句(statement),但是 Python 2 中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。


0x03 eval() 函数(执行单个表达式)

功能: 将字符串当成有效的表达式来求值并返回计算结果。

语法:

  1. eval(expression, globals= None, locals= None)

官方文档中的解释:
将字符串 str 当成有效的表达式来求值并返回计算结果。
globals(全局)和 locals(局部)参数是可选的,如果提供了globals参数,那么它必须是 dictionary 类型;
如果提供了 locals 参数,那么它可以是任意的 map 对象。

eval() 函数三个参数的用法可以参考此两篇博客,写的很清楚了:

总结来说,eval() 函数的第二、三个参数,也就是 globalslocals 是可以省略的,如果传入了,它们的作用是定义作用域的。globals 代表作用域为全局、locals 代表作用域为局部。如有冲突,以 locals 的作用域为准 。

第二三个参数分别指定能够在 eval 中使用的函数等,如果不指定,默认为 globals(