.. | ||
ftp-bounce-attack.md | ||
ftp-bounce-download-2oftp-file.md | ||
README.md |
21 - FTP Pentesting
htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team Expert)!
- 사이버 보안 회사에서 일하시나요? HackTricks에 귀사를 광고하고 싶으신가요? 혹은 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? 구독 요금제를 확인해보세요!
- PEASS Family를 발견해보세요, 저희의 독점적인 NFTs 컬렉션
- 공식 PEASS & HackTricks 스왹을 얻으세요
- 💬 그룹에 가입하세요 Discord 그룹 또는 텔레그램 그룹 또는 트위터 🐦@carlospolopm를 팔로우하세요.
- 해킹 트릭을 공유하고 싶으시다면 PR을 제출하여 hacktricks repo 및 hacktricks-cloud repo에 기여하세요.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
기본 정보
**파일 전송 프로토콜 (FTP)**는 서버와 클라이언트 간의 컴퓨터 네트워크를 통한 파일 전송을 위한 표준 프로토콜로 작동합니다.
평문 프로토콜로, **새 줄 문자 0x0d 0x0a
**를 사용하므로 때로는 telnet
또는 **nc -C
**를 사용하여 연결해야 할 수도 있습니다.
기본 포트: 21
PORT STATE SERVICE
21/tcp open ftp
활성 및 수동 연결
Active FTP에서 FTP 클라이언트는 먼저 포트 N에서 FTP 서버의 명령 포트인 포트 21로부터 제어 연결을 초기화합니다. 그런 다음 클라이언트는 포트 N+1을 청취하고 포트 N+1을 FTP 서버로 보냅니다. FTP 서버는 그런 다음 데이터 연결을 초기화하여 포트 M에서 FTP 클라이언트의 포트 N+1로부터 연결합니다. 하지만, FTP 클라이언트에 외부에서 들어오는 데이터 연결을 제어하는 방화벽이 설정되어 있는 경우, 활성 FTP는 문제가 될 수 있습니다. 그에 대한 실행 가능한 해결책은 수동 FTP입니다.
수동 FTP에서 클라이언트는 제어 연결을 자신의 포트 N에서 FTP 서버의 포트 21로 시작합니다. 이후 클라이언트는 passv 명령을 발행합니다. 그러면 서버가 클라이언트에게 포트 번호 M 중 하나를 보냅니다. 그리고 클라이언트는 FTP 서버의 포트 M으로부터 자신의 포트 P로 데이터 연결을 시작합니다. 원본: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
연결 디버깅
FTP 명령어 **debug
**와 **trace
**는 통신이 어떻게 발생하는지 확인하는 데 사용될 수 있습니다.
열거 (Enumeration)
배너 그랩핑
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
Starttls를 사용하여 FTP에 연결하기
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.10.208
lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password
인증되지 않은 열거
nmap을 사용하여
sudo nmap -sV -p21 -sC -A 10.10.10.10
다음 명령어 HELP
와 FEAT
을 사용하여 FTP 서버의 일부 정보를 얻을 수 있습니다:
HELP
214-The following commands are recognized (* =>'s unimplemented):
214-CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
214-EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
214-XRMD MKD XMKD PWD XPWD SIZE SYST HELP
214-NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC*
214-PBSZ PROT TYPE STRU MODE RETR STOR STOU
214-APPE REST ABOR USER PASS ACCT* REIN* LIST
214-NLST STAT SITE MLSD MLST
214 Direct comments to root@drei.work
FEAT
211-Features:
PROT
CCC
PBSZ
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
REST STREAM
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
UTF8
EPRT
EPSV
LANG en-US
MDTM
SSCN
TVFS
MFMT
SIZE
211 End
STAT
#Info about the FTP server (version, configs, status...)
익명 로그인
anonymous : anonymous
anonymous :
ftp : ftp
ftp <IP>
>anonymous
>anonymous
>ls -a # List all files (even hidden) (yes, they could be hidden)
>binary #Set transmission to binary instead of ascii
>ascii #Set transmission to ascii instead of binary
>bye #exit
Brute force
여기에서 기본 ftp 자격 증명이 있는 좋은 목록을 찾을 수 있습니다: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automated
Anon login 및 bounce FTP 체크는 nmap에서 -sC 옵션 또는 기본적으로 수행됩니다:
nmap --script ftp-* -p 21 <ip>
브라우저 연결
다음과 같은 URL을 사용하여 브라우저(예: Firefox)를 통해 FTP 서버에 연결할 수 있습니다:
ftp://anonymous:anonymous@10.10.10.98
참고로, 웹 응용 프로그램이 사용자가 제어하는 데이터를 직접 FTP 서버로 전송하는 경우 이중 URL 인코딩 %0d%0a
(이중 URL 인코딩에서는 %250d%250a
) 바이트를 전송하여 FTP 서버가 임의의 작업을 수행하도록 할 수 있습니다. 이러한 임의의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
FTP에서 모든 파일 다운로드
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
만약 사용자 이름/비밀번호에 특수 문자가 포함되어 있다면, 다음 명령을 사용할 수 있습니다:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
몇 가지 FTP 명령어
USER username
PASS password
HELP
서버는 지원하는 명령어를 표시합니다.- **
PORT 127,0,0,1,0,80
**이는 FTP 서버가 IP 127.0.0.1의 포트 80으로 연결을 설정하도록 지시합니다 (5번째 문자를 "0"으로, 6번째를 10진수로 또는 5번째와 6번째를 사용하여 포트를 16진수로 표현). - **
EPRT |2|127.0.0.1|80|
**이는 FTP 서버가 IP 127.0.0.1의 포트 80으로 TCP 연결을 설정하도록 지시합니다. 이 명령어는 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 서버는 해당 연결을 통해 지정된 파일을 보냅니다.REST 6
이는 서버에게 다음에RETR
을 사용하여 무언가를 보낼 때 6번째 바이트부터 시작해야 한다고 알려줍니다.TYPE i
전송을 이진으로 설정합니다.PASV
이는 수동 연결을 열고 사용자가 연결할 수 있는 위치를 알려줍니다.PUT /tmp/file.txt
지정된 파일을 FTP에 업로드합니다.
FTPBounce 공격
일부 FTP 서버는 명령어 PORT를 허용합니다. 이 명령어를 사용하여 서버에게 특정 포트의 다른 FTP 서버에 연결하려는 의사를 전달할 수 있습니다. 그런 다음 FTP 서버를 통해 호스트의 어떤 포트가 열려 있는지 스캔할 수 있습니다.
여기에서 FTP 서버를 악용하여 포트를 스캔하는 방법을 배우세요.
또한 이 동작을 악용하여 FTP 서버가 다른 프로토콜과 상호 작용하도록 할 수 있습니다. HTTP 요청을 포함한 파일을 업로드하고 취약한 FTP 서버가 임의의 HTTP 서버로 전송하도록 만들거나 (새로운 관리자 사용자를 추가할 수도 있음) 또는 FTP 요청을 업로드하고 취약한 FTP 서버가 다른 FTP 서버로 파일을 다운로드하도록 할 수도 있습니다.
이론은 간단합니다:
- 취약한 서버에 요청을 업로드합니다 (텍스트 파일 내부). 다른 HTTP 또는 FTP 서버와 통신하려면
0x0d 0x0a
로 라인을 변경해야 합니다. - 보내고 싶지 않은 문자를 보내지 않도록
REST X
를 사용합니다 (아마도 파일 내부에 요청을 업로드하려면 시작 부분에 이미지 헤더를 넣어야 할 수도 있음). - 임의의 서버 및 서비스에 연결하려면
PORT
를 사용합니다. - 저장된 요청을 서버로 보내려면
RETR
를 사용합니다.
이는 아마도 소켓이 쓰기 불가능 오류를 발생시킬 가능성이 높습니다. 이를 피하려는 제안은 다음과 같습니다:
- HTTP 요청을 보내는 경우, 최소한 ~0.5MB까지 같은 요청을 연이어 넣으세요. 이렇게 하면:
{% file src="../../.gitbook/assets/posts.txt" %} posts.txt {% endfile %}
- 프로토콜과 관련된 "잡동사니" 데이터로 요청을 채우려고 시도하세요 (FTP에 대화하는 경우 잡동사니 명령어 또는 파일을 가져오기 위해
RETR
명령을 반복하는 것일 수도 있음) - 요청을 많은 널 문자 또는 다른 문자로 채우세요 (라인으로 나누거나 그렇지 않아도 됨)
어쨌든, 여기에는 FTP 서버가 다른 FTP 서버에서 파일을 다운로드하도록 만드는 방법에 대한 예전 예제가 있습니다.
Filezilla 서버 취약점
FileZilla는 일반적으로 로컬에 FileZilla-Server용 관리 서비스를 바인딩합니다 (포트 14147). 귀하의 기기에서 이 포트에 액세스하는 터널을 만들 수 있다면, 빈 암호로 연결하여 FTP 서비스를 위한 새 사용자를 만들 수 있습니다.
구성 파일
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
사후 침투
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
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
HackTricks 자동 명령어
Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one.
Protocol_Description: File Transfer Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for FTP
Note: |
Anonymous Login
-bi <<< so that your put is done via binary
wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
^^to download all dirs and files
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp
Entry_2:
Name: Banner Grab
Description: Grab FTP Banner via telnet
Command: telnet -n {IP} 21
Entry_3:
Name: Cert Grab
Description: Grab FTP Certificate if existing
Command: openssl s_client -connect {IP}:21 -starttls ftp
Entry_4:
Name: nmap ftp
Description: Anon login and bounce FTP checks are performed
Command: nmap --script ftp-* -p 21 {IP}
Entry_5:
Name: Browser Connection
Description: Connect with Browser
Note: ftp://anonymous:anonymous@{IP}
Entry_6:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -t 1 -l {Username} -P {Big_Passwordlist} -vV {IP} ftp
Entry_7:
Name: consolesless mfs enumeration ftp
Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
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'
제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!
- 사이버 보안 회사에서 일하시나요? 회사가 HackTricks에 광고되길 원하시나요? 혹은 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? 구독 요금제를 확인해보세요!
- The PEASS Family를 발견해보세요, 저희의 독점적인 NFT 컬렉션
- 공식 PEASS & HackTricks 스왹을 얻으세요
- 💬 Discord 그룹에 가입하거나 텔레그램 그룹에 참여하거나 트위터에서 팔로우하세요 🐦@carlospolopm.
- 해킹 트릭을 공유하고 싶으시다면 PR을 hacktricks repo 및 hacktricks-cloud repo 에 제출하세요.