diff --git a/network-services-pentesting/pentesting-ftp/README.md b/network-services-pentesting/pentesting-ftp/README.md index 23f48a55d..fcc8fc055 100644 --- a/network-services-pentesting/pentesting-ftp/README.md +++ b/network-services-pentesting/pentesting-ftp/README.md @@ -4,11 +4,11 @@ ☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥 -* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! +* 你在一家**网络安全公司**工作吗?想要在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) -* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** -* **通过向[hacktricks仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud仓库](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。 +* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** +* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。 @@ -32,11 +32,11 @@ PORT STATE SERVICE ``` ### 主动连接和被动连接 -在**主动FTP**中,FTP **客户端**首先从其端口N向FTP服务器的命令端口(端口21)**发起**控制**连接**。然后,**客户端****监听**端口**N+1**并将端口N+1发送给FTP服务器。FTP **服务器**然后从其端口M**向FTP客户端的端口N+1**发起数据**连接**。 +在**主动FTP**中,FTP **客户端**首先从其端口N向FTP服务器的命令端口(端口21)**发起**控制**连接**。然后,**客户端****监听**端口**N+1**并将端口N+1发送给FTP服务器。FTP **服务器**然后从其端口M向FTP客户端的端口N+1**发起**数据**连接**。 但是,如果FTP客户端设置了控制来自外部的传入数据连接的防火墙,则主动FTP可能会有问题。因此,被动FTP是一个可行的解决方案。 -在**被动FTP**中,客户端从其端口N向FTP服务器的端口21**发起**控制**连接**。之后,客户端发出**passv命令**。服务器然后向客户端发送其一个端口号M。然后,**客户端**从其端口P**向FTP服务器的端口M**发起数据**连接**。 +在**被动FTP**中,客户端从其端口N向FTP服务器的端口21**发起**控制**连接**。之后,客户端发出**passv命令**。服务器然后向客户端发送其一个端口号M。然后,**客户端**从其端口P向FTP服务器的端口M**发起**数据**连接**。 来源:[https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) @@ -162,6 +162,10 @@ ftp://anonymous:anonymous@10.10.10.98 wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all ``` +如果您的用户名/密码包含特殊字符,可以使用[以下命令](https://stackoverflow.com/a/113900/13647948): +```bash +wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ +``` ## 一些FTP命令 * **`USER username`** @@ -171,41 +175,41 @@ wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all * **`EPRT |2|127.0.0.1|80|`** 这将指示FTP服务器在IP 127.0.0.1的80端口建立TCP连接(_由"2"表示_)。此命令**支持IPv6**。 * **`LIST`** 这将发送当前文件夹中的文件列表 * **`LIST -R`** 递归列出(如果服务器允许) -* **`APPE /path/something.txt`** 这将指示FTP将从**被动**连接或**PORT/EPRT**连接接收到的数据存储到文件中。如果文件名存在,它将追加数据。 -* **`STOR /path/something.txt`** 类似于`APPE`,但它将覆盖文件 +* **`APPE /path/something.txt`** 这将指示FTP将从**被动**连接或**PORT/EPRT**连接接收的数据存储到文件中。如果文件名存在,它将追加数据。 +* **`STOR /path/something.txt`** 类似于`APPE`,但它会覆盖文件 * **`STOU /path/something.txt`** 类似于`APPE`,但如果文件存在,则不执行任何操作。 -* **`RETR /path/to/file`** 必须建立被动或端口连接。然后,FTP服务器将通过该连接发送指定的文件 +* **`RETR /path/to/file`** 必须建立被动或端口连接。然后,FTP服务器将通过该连接发送指定的文件。 * **`REST 6`** 这将指示服务器在使用`RETR`发送数据时从第6个字节开始。 * **`TYPE i`** 设置传输为二进制 -* **`PASV`** 这将打开一个被动连接,并指示用户可以连接到哪里 +* **`PASV`** 这将打开一个被动连接,并告知用户可以连接的位置 * **`PUT /tmp/file.txt`** 将指定的文件上传到FTP ![](<../../.gitbook/assets/image (227).png>) ## FTP反弹攻击 -一些FTP服务器允许使用PORT命令。该命令可用于指示服务器您希望连接到其他FTP服务器的某个端口。然后,您可以使用此功能通过FTP服务器扫描主机的哪些端口是开放的。 +一些FTP服务器允许使用PORT命令。该命令可用于指示服务器您希望连接到其他FTP服务器的某个端口。然后,您可以使用此功能通过FTP服务器扫描主机的开放端口。 [**在此了解如何滥用FTP服务器以扫描端口。**](ftp-bounce-attack.md) 您还可以滥用此行为使FTP服务器与其他协议交互。您可以**上传包含HTTP请求的文件**,并使易受攻击的FTP服务器**将其发送到任意HTTP服务器**(_也许是为了添加新的管理员用户?_),甚至上传FTP请求并使易受攻击的FTP服务器从不同的FTP服务器下载文件。\ 理论很简单: -1. **将请求(在文本文件中)上传到易受攻击的服务器。**请记住,如果您想与其他HTTP或FTP服务器通信,您需要更改带有`0x0d 0x0a`的行 -2. **使用`REST X`避免发送您不想发送的字符**(也许要上传请求到文件中,您需要在开头放置一些图像头) +1. **将请求(在文本文件中)上传到易受攻击的服务器。**请记住,如果您想与其他HTTP或FTP服务器通信,您需要更改带有`0x0d 0x0a`的行。 +2. **使用`REST X`避免发送不想发送的字符**(也许要上传请求到文件中,您需要在开头放置一些图像头部) 3. **使用`PORT`连接到任意服务器和服务** 4. **使用`RETR`将保存的请求发送到服务器。** 由于连接不足以使用`RETR`发送数据,这很可能会引发类似**Socket not writable**的错误。尝试避免此错误的建议是: -* 如果要发送HTTP请求,请**将相同的请求连续发送一次**,直到至少达到**\~0.5MB**。像这样: +* 如果要发送HTTP请求,请**重复相同的请求**,直到至少达到**\~0.5MB**。像这样: {% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %} -* 尝试**使用与协议相关的“垃圾”数据填充请求**(与FTP通信时,可能只是垃圾命令或重复`RETR`指令以获取文件) -* 只是**使用大量空字符或其他字符填充请求**(分行或不分行) +* 尝试使用与协议相关的**"垃圾"数据填充请求**(与FTP通信时,可能只是垃圾命令或重复`RETR`指令以获取文件) +* 只需使用大量的空字符或其他字符填充请求(分行或不分行) 无论如何,这里有一个[关于如何滥用此功能使FTP服务器从不同的FTP服务器下载文件的旧示例。](ftp-bounce-download-2oftp-file.md)