您现在的位置是:首页 > 黑客技术

Python代码审计实战演练实例汇总之反序列化和命令执行

作者:果E安全网时间:2020-10-25 14:51:51分类:黑客技术

简介Python代码审计方式各种各样,可是总得来说是依据先人构思的转移结合拓展而产生。现阶段Python代码审计构思,展现分散化和多种多样的发展趋势。Python甚少产品研发工作经验及其联系实际碰到的构思和方

Python代码审计方式各种各样,可是总得来说是依据先人构思的转移结合拓展而产生。现阶段Python代码审计构思,展现分散化和多种多样的发展趋势。Python甚少产品研发工作经验及其联系实际碰到的构思和方法开展汇总,便于于小伙伴们的学习培训和参照。

反序列化漏洞在Python代码审计中归属于普遍高风险漏洞之一,它的不良影响依据执行自然环境略有不同,当地和远程控制各自为7.2和10的得分。根据得分也可获知漏洞伤害是不言而喻。那麼我们应当怎样发觉这一漏洞?有关发觉此类漏洞要从反序列化的模块谈起,Python的反序列化模块关键为pickle、cPickle、yaml这些。相关反序列化漏洞难题在很多年前就被大家所发觉,现阶段所见到的大部分反序列化漏洞是因为运用启用了存在的问题的反序列化模块。那麼我们把握住找寻反序列化模块则有可能会发觉反序列化漏洞。

有关这一漏洞是小编在今年财务审计anaconda自然环境模块情况下发觉,递交CNVD根据认证,尽管是当地开启漏洞,但肯定是有关反序列化漏洞非常好的实例,漏洞运用yaml模块难题开展反序列化。

漏洞剖析

漏洞危害的版本号 1.1.4 ,漏洞出現于dask模块中config.py文件,第139行。来源于程序流程根据coolect_yaml方式中应用了yaml所造成 的难题,方式主要用途从yaml文档搜集配备。

图片2.png

在其中第148公会分辨是不是为文件目录,传到文档就能再次执行。漏洞开启在第168行,应用了yaml.load执行了反序列化。

图片3.png

到此我们根据POC开启存有反序列化的方式,就可以导致编码执行难题。

漏洞POC

漏洞认证截屏:

图片1.png

恢复方式

yaml 在针对反序列化难题上,早已出示了安全性反序列化的解决方案,程序流程应用yaml.safe_load能够开展安全性的反序列化。我们针对财务审计难题的恢复提议依据具体情况应用。

在NumPy 1.16.0版本号以前存有反序列化命令执行漏洞,客户载入故意的数据库导致编码执行。依照国际惯例在讲这一反序列化以前要表明Python的pickle的反序列化基本原理和栈命令。但并不是这篇关键,故暂未探讨。

漏洞剖析

我们立即从编码层谈起,漏洞的通道,lib/npyio.py 第288行周边。在这儿存有应用反序列化模块的方式,而且allow_pickle数值True。allow_pickle 容许应用 Python pickles 储存对象数组,Python 中的 pickle 用以在储存到硬盘文档或从硬盘文档载入以前,对目标开展实例化和反序列化。通俗化讲是个电源开关,并默认设置打开。

图片4.png

漏洞开启部位,部位在lib/npyio.py,第418行。这里有反序列化载入的方式。小编将一些编码省去,直收看关键。默认设置文件格式规定ZIP文档作为前缀PK\\x03\\x04后缀名PK\\x05\\x06,假如不符合默认设置的文件格式,则会执行pickle.load()反序列化方式。

到此执行步骤为 NumPy.lib.npyio.py:load()=>pickle.py:load()。

漏洞POC

总的来说,撰写POC以下:

检测結果如图所示:

图片6.png

在Python模块中命令执行漏洞一样比较普遍、伤害很大。在财务审计命令执行时,大多数情况下程序流程很有可能会在考虑特殊条件下才可以执行命令,也很有可能必须在不一样的系统软件中才会执行命令,因此 必须关心编码逻辑性和一些特点。

Numexpr是深度学习模块NumPy的一个加速包,关键用以提升 NumPy的特性。

漏洞剖析

在该模块/numexpr/cpuinfo.py 第37行,存有执行命令的方式。

图片7.png

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),并根据形参传到,最后造成 命令执行难题。

漏洞POC

漏洞POC和执行結果:

图片8.png

dotenv是一个使Node.js文本文件中载入系统变量的库。

漏洞剖析

漏洞存有于dotenv 0.10.1版本号中的main.py文件当中,第317行,由此可见该方式形参传到命令和系统变量。可是因为未对能用命令开展过虑造成 随意命令执行难题。

图片9.png

漏洞POC

漏洞POC和执行結果:

图片10.png

根据之上实例和汇总,坚信我们可以进一步提高Python财务审计的功底。这种漏洞在Python财务审计中较为典型性,假如在文章内容中哪儿存有粗心大意,盼指正。

*文中创作者:米蒂姆,转截请标明来源于联合利华信息平台网.COM

郑重声明:

果E安全网所有活动均为互联网所得,如有侵权请联系本站删除处理,转载请注明本站地址。

我来说两句