Python 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 서 비 스 를 열 고 테스트 를 해 보 세 요.불법 용도 로 사용 할 수 없습니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.