Red Team之21 - FTP渗透
2022-12-13 09:2:24 Author: Gcow安全团队(查看原文) 阅读量:9 收藏

文件传输协议(FTP)是一种标准的网络协议,用于在计算机网络上的客户端和服务器之间传输计算机文件。 它是一个纯文本协议,使用**新行字符 ** 0x0d0x0a 所以我们有时候需要使用 ** telnet** 或 ** nc-C**来连接.

默认端口: 21

  1. PORT   STATE SERVICE

  2. 21/tcp open  ftp

主动和被动连接

主动连接FTP中,FTP客户端首先启动从其端口N到FTP服务器命令端口 - 端口21的控制连接。客户端然后侦听端口N+1并将端口N+1 发送到FTP服务器。FTP服务器然后发起数据连接,从它的端口M到FTP客户端的端口N+1。

但是,如果 FTP 客户端有防火墙设置来控制来自外部的传入数据连接,那么活动 FTP 可能会成为问题。并且,一个可行的解决方案是被动 FTP。

Passive FTP中,客户端发起从它的N 端口到FTP Server 的21 端口的控制连接。在此之后,客户端发出一个passv 命令。服务器然后向客户端发送其端口号 M 之一。客户端启动从其端口 P 到FTP 服务器的端口 M的数据连接。

来源: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/

连接调试

FTP命令 debug trace 可以用来查看通信是如何发生的。

枚举

Banner 抓取

  1. nc -vn <IP> 21

  2. openssl s_client -connect crossfit.htb:21 -starttls ftp #获取证书(如有)

使用starttls连接FTP

  1. lftp

  2. lftp :~> set ftp:ssl-force true

  3. lftp :~> set ssl:verify-certificate no

  4. lftp :~> connect 10.10.10.208

  5. lftp 10.10.10.208:~> login                      

  6. Usage: login <user|URL> [<pass>]

  7. lftp 10.10.10.208:~> login username Password

Unauth枚举

使用 nmap

  1. sudo nmap -sV -p21 -sC -A 10.10.10.10

你可以使用 HELPFEAT 命令来获取FTP服务器的一些信息:

  1. HELP

  2. 214-The following commands are recognized (* =>'s unimplemented):

  3. 214-CWD     XCWD    CDUP    XCUP    SMNT*   QUIT    PORT    PASV    

  4. 214-EPRT    EPSV    ALLO*   RNFR    RNTO    DELE    MDTM    RMD    

  5. 214-XRMD    MKD     XMKD    PWD     XPWD    SIZE    SYST    HELP    

  6. 214-NOOP    FEAT    OPTS    AUTH    CCC*    CONF*   ENC*    MIC*    

  7. 214-PBSZ    PROT    TYPE    STRU    MODE    RETR    STOR    STOU    

  8. 214-APPE    REST    ABOR    USER    PASS    ACCT*   REIN*   LIST    

  9. 214-NLST    STAT    SITE    MLSD    MLST    

  10. 214 Direct comments to [email protected]

  11. FEAT

  12. 211-Features:

  13. PROT

  14. CCC

  15. PBSZ

  16. AUTH TLS

  17. MFF modify;UNIX.group;UNIX.mode;

  18. REST STREAM

  19. MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;

  20. UTF8

  21. EPRT

  22. EPSV

  23. LANG en-US

  24. MDTM

  25. SSCN

  26. TVFS

  27. MFMT

  28. SIZE

  29. 211 End

  30. STAT

  31. #FTP服务器的信息(版本,配置,状态…)

匿名登录

anonymous : anonymous**anonymous : ftp : ftp

  1. ftp <IP>

  2. >anonymous

  3. >anonymous

  4. >ls -a # 列出所有文件(甚至隐藏)(是的,它们可能被隐藏)

  5. >binary #将传输方式设置为二进制而不是Ascii

  6. >ascii #将传输设置为Ascii而不是二进制

  7. >bye #退出

自动化

nmap默认使用 -sC选项执行匿名登录和反弹FTP检查。

  1. nmap --script ftp-* -p 21 <ip>

浏览器连接

您可以使用浏览器(如Firefox)通过如下URL连接到FTP服务器:

  1. ftp://anonymous:[email protected].10.10.98

请注意,如果web应用程序直接向FTP服务器发送用户控制的数据 **,您可以发送双URL编码' %0d%0a '(在双URL编码中,这是' %250d%250a ')字节,并使**FTP服务器执行任意操作。其中一种可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于纯文本的服务(如http)通信。

从FTP下载所有文件

  1. wget -m ftp://anonymous:[email protected].10.10.98 #下载全部

  2. wget -m --no-passive ftp://anonymous:[email protected].10.10.98 #下载全部

一些FTP命令

  • USER username

  • PASS password

  • HELP 服务器显示支持哪些命令

  • ** PORT127,0,0,1,0,80**这将指示FTP服务器与端口80中的IP 127.0.0.1建立连接(您需要将第5个字符设为“0”,第6个字符设为十进制端口,或者使用第5和第6个字符表示十六进制端口)。

  • ** EPRT|2|127.0.0.1|80|**这将指示FTP服务器与端口80中的IP 127.0.0.1建立TCP连接(*由“2”*表示)。命令支持IPv6

  • LIST这将发送当前文件夹中的文件列表

    • LIST-R 递归列出(如果服务器允许)

    • <

  • APPE/path/something.txt 这将显示 FTP 将从被动连接或从PORT/EPRT连接接收到的数据存储到文件中。如果文件名存在,它将追加数据。

  • STOR/path/something.txt 链接 APPE 但它会覆盖文件

  • STOU/path/something.txt 链接 APPE, 但如果存在,它不会做任何事情。

  • RETR/path/to/file 必须建立被动或端口连接。然后,FTP 服务器将通过该连接发送指示的文件

  • REST6 这将指示服务器下次使用它发送 RETR 内容时应该从第 6 个字节开始。

  • TYPE i 设置传输为二进制

  • PASV 这将打开一个被动连接,并指示用户可以连接

  • PUT/tmp/file.txt 将指定的文件上传到 FTP

[

]

FTP反弹 attack

有些FTP服务器允许使用PORT命令。此命令可用于向服务器指示您希望通过某些端口连接到其他FTP服务器。然后,您可以使用该命令通过FTP服务器扫描主机的哪些端口是开放的。

  • 您还可以滥用此行为使 FTP 服务器与其他协议交互。您可以上传一个包含 HTTP 请求的文件,*并让易受攻击的 FTP 服务器将其发送到任意 HTTP 服务器也许是为了添加一个新的管理员用户?*),或者甚至上传一个 FTP 请求,并让易受攻击的 FTP 服务器下载一个不同的文件FTP服务器。 理论很简单:

  1. 将请求(在文本文件中)上传到易受攻击的服务器。 请记住,如果您想与另一个 HTTP 或 FTP 服务器通信,您需要更改行 0x0d0x0a

  2. 用于避免发送您不想发送的字符(也许将请求上传到您需要在开头放置一些图像标题的文件中) REST X

  3. 用于连接到任意服务器和服务** PORT**

  4. 用于将保存的请求发送到服务器。 RETR

    这很可能会引发类似Socket not writable*的错误,因为连接持续时间不足以发送数据 。尽量避免的建议是: RETR

  • 如果您要发送 HTTP 请求,**请一个接一个地发送相同的请求,直到至少\~0.5MB

  • 尝试用相对于协议的“垃圾”数据填充请求(与FTP通信可能只是垃圾命令或重复' RETR '指令来获取文件)

  • 用大量空字符或其他字符填充请求

Filezilla 服务漏洞

FileZilla通常绑定FileZilla-Server (端口 14147)的本地管理服务。如果您可以从您的机器创建一个隧道来访问此端口,您可以使用空白密码*连接并为 FTP 服务创建一个新用户

配置文件

  1. ftpusers

  2. ftp.conf

  3. proftpd.conf

  4. vsftpd.conf

Post-Exploitation

vsFTPd 的默认配置可以在 /etc/vsftpd.conf. 在这里,您可以找到一些危险的设置:

  • anonymous_enable=YES

  • anon_upload_enable=YES

  • anon_mkdir_write_enable=YES

  • anon_root=/home/username/ftp - 匿名目录。

  • chown_uploads=YES - 更改匿名上传文件的所有权

  • chown_username=username - 获得匿名上传文件所有权的用户

  • local_enable=YES - 允许本地用户登录

  • no_anon_password=YES - 不要匿名询问密码

  • write_enable=YES - 允许命令:STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 和 SITE

Shodan

  • ftp

  • port:21

自动化

  1. Protocol_Name: FTP    #协议缩写(如果有的话)。

  2. Port_Number:  21     #如果有多个,则用逗号分隔。

  3. Protocol_Description: File Transfer Protocol          #协议缩写

  4. Entry_1:

  5.  Name: Notes

  6.  Description: Notes for FTP

  7.  Note: |

  8.    Anonymous Login

  9.    -bi     <<< so that your put is done via binary

  10.    wget --mirror 'ftp://ftp_user:UTDRSCH53c"[email protected]'

  11.    ^^to download all dirs and files

  12.    wget --no-passive-ftp --mirror 'ftp://anonymous:[email protected]'

  13.    if PASV transfer is disabled

  14. Entry_2:

  15.  Name: Banner Grab

  16.  Description: Grab FTP Banner via telnet

  17.  Command: telnet -n {IP} 21

  18. Entry_3:

  19.  Name: Cert Grab

  20.  Description: Grab FTP Certificate if existing

  21.  Command: openssl s_client -connect {IP}:21 -starttls ftp

  22. Entry_4:

  23.  Name: nmap ftp

  24.  Description: Anon login and bounce FTP checks are performed

  25.  Command: nmap --script ftp-* -p 21 {IP}

  26. Entry_5:

  27.  Name: Browser Connection

  28.  Description: Connect with Browser

  29.  Note: ftp://anonymous:[email protected]{IP}

  30. Entry_6:

  31.  Name: Hydra Brute Force

  32.  Description: Need Username

  33.  Command: hydra -t 1 -l {Username} -P {Big_Passwordlist} -vV {IP} ftp

  34. Entry_7:

  35.  Name: consolesless mfs enumeration ftp

  36.  Description: FTP enumeration without the need to run msfconsole

  37.  Note: sourced from https://github.com/carlospolop/legion

  38.  Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' &&  msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'

推荐一个靶场,靶场地址:https://yunjing.ichunqiu.com/ranking/summary?id=BzMFNFpvUDU 从web到内网再到域的靶场环境都全,且出题的思路很好,感兴趣的可以去玩玩


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyNzk2NDcwMw==&mid=2247488161&idx=4&sn=cd4cbe2f53bd63e90d758cf5b4297915&chksm=fa76ddd1cd0154c718eac6be0b13fc8db5111b56a0b5747b971847cf4588ce2209bb2d1a33d5#rd
如有侵权请联系:admin#unsafe.sh