> For the complete documentation index, see [llms.txt](https://redryan.gitbook.io/studyjoon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://redryan.gitbook.io/studyjoon/hacking/bhpt/undefined-4/http/smb.md).

# SMB 취약점 진단

## SMB 취약점 진단 <a href="#bkmrk-page-title" id="bkmrk-page-title"></a>

SMB(Server Message Block)은 윈도우 환경에서 네트워크에 파일이나 프린터를 공유할 때 사용되는 프로토콜입니다. 액티브 디렉토리(Active Directory)에 연결된 윈도우 서버에서는 기본적으로 사용하는 프로토콜이며, 도메인에 속하지 않은 윈도우 서버들이라고 해도 기본적으로 사용되는 경우가 많습니다. 리눅스에서는 Samba라는 네트워크 서비스를 사용되는 경우가 많습니다. SMB를 사용하건 Samba를 사용하건 모두 포트 445에서 실행되는 것이 일반적입니다. 원래는 파일과 프린터 공유를 목적으로 만들어졌지만, 경우에 따라서는 명령을 수행하거나 원격으로 호스트에 접근하는데 사용되기도 합니다. 이와 관련된 내용은 추후 다른 강의에서 다룹니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/kigkcNHlOYwo1BbT-image-1735976358354.png" alt=""><figcaption></figcaption></figure>

(출처: <https://www.softnas.com/docs/softnas/v3/html/drex\\_creating\\_a\\_cifs\\_share\\_custom\\_3.png>)

다녔던 학교, 학원, 직장의 윈도우 기반 컴퓨터를 사용할 때, 가끔씩 파일 탐색기의 왼쪽에 `Network`탭을 눌러봤을 때 다른 컴퓨터들의 이름이 보였던 경험이 있으신 분들이 계실겁니다. 이런 것처럼 파일 공유에 사용되는 것이 SMB입니다.

&#x20;

> SMB 쉐어들은 실제 윈도우 액티브 디렉토리 기반의 사내망/내부망에서 굉장히 중요한 파일들을 가지고 있는 경우가 많습니다. 내부망 모의해킹 을 하다보면 개인정보, 신용카드 번호, 회사 기밀 파일 등을 백업 서버/솔루션에 저장하지 않고 그냥 일반적인 SMB 쉐어에 넣어놓고, 이를 네트워크 전체에 오픈 시켜 놓는 경우(...)도 굉장히 많습니다. 그만큼 중요한 네트워크 서비스이니 꼭 꼼꼼하게 진단합니다.

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2F4RLOpFEgyX8FPbHOyVzU%2Fimage.png?alt=media&amp;token=bf7a90ce-4dae-4c4d-89dc-203005157ff9" alt=""><figcaption></figcaption></figure>

### 취약점 진단 <a href="#bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-ec-a7-84-eb-8b-a8" id="bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-ec-a7-84-eb-8b-a8"></a>

SMB는 취약점이 존재할 경우 민감한 파일의 노출이나 심지어는 원격 명령/코드 실행까지 이어질 수 있기 때문에 꼼꼼하게 취약점 진단을 진행해야합니다. 특히 웬만한 윈도우 서버 및 클라이언트에서는 기본적으로 사용되고, SMB를 이용하는 써드파티 솔루션이나 스크립트들 또한 많기 때문에 주의를 기울여야합니다.

* Null Session: SMB Null 세션은 계정 이름과 비밀번호 및 사용자 인증 단계를 거치지 않고 SMB를 사용할 수 있는 기능입니다. "네트워크 내 모든 사용자를 믿을 수 있다" 라는 옛날 개념으로부터 만들어진 기능입니다. 제로 트러스트 (Zero Trust) 및 내부자 위협, 그리고 내부망 공격이 자주 일어나는 요즘 같은 경우에는 활성화되어 있으면 안되는 기능입니다.
* 접근 가능한 SMB 쉐어(Share) 및 파일: Null 세션이나 유저 계정 정보를 이용했거나, 접근 가능한 SMB 쉐어가 무엇인지 확인하고, 해당 쉐어에는 어떤 파일이 들어있는지 파악합니다.
* SMB 관련 취약점: 워낙 오래전부터(90년대 중반, Windows 2.1) 사용되던 프로토콜이자 네트워크 서비스이기 때문에 원격 코드 실행 등의 심각한 취약점들이 있습니다. MS08-067, MS17-010 (Eternalblue), SMBGhost, MS15-011 등, 공개된 취약점들이 존재하는지 진단합니다.

이외에도 NTLM 릴레이 공격에 필요한 SMB Signing, SMBv1 등도 진단해야하지만, 이는 네트워크 기반 공격에 필요하기 때문에 BHPT에서는 다루지 않습니다.

## 실습

실습은 `mod3ex` 박스의 SMB(Samba) 네트워크 서비스를 상대로 진행합니다. 실습에는 enum4linux 라는 툴과 함께 실무에서 많이 사용되는 [`netexec`](https://github.com/Pennyw0rth/NetExec) 툴을 사용합니다.

### 1. 서비스 및 버전 확인

<pre><code><strong>nmap -p 445 -sV -sC -Pn -n --open [ip]
</strong><strong>searchsploit samba 4.6 -w
</strong></code></pre>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FAtfzDgC7rwYjOTFYo1PE%2Fimage.png?alt=media&amp;token=eb8796fd-a7be-4c65-bc7f-d3760cccd387" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FUy1cInvGQURKr1vcRttY%2Fimage.png?alt=media&amp;token=039c294b-4d70-4786-a079-04adab7f90cf" alt=""><figcaption></figcaption></figure>

### 2. NetExec 설치

```sql
# Rust 컴파일러 설치
sudo apt update sudo apt install -y rustc cargo

# 필요한 개발 도구들 설치
sudo apt install -y python3-dev libssl-dev libffi-dev build-essential
sudo apt install pipx git

# 이제 NetExec 설치 다시 시도
pipx install git+https://github.com/Pennyw0rth/NetExec.git

pipx ensurepath
nxc --help 
netexec --help
```

### 3. Null Session, Anonymous Session 확인

```
enum4linux -a <ip> 
# enum4linux : samba, smb에 관련된 정보들을 리눅스에서 정보수집을 할 수 있도록 도와주는 툴

# Null Session
netexec smb -u '' -p ''

# Anonymous Session 
netexec smb -u 'a' -p ''
```

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FeVXRMMSZcjMVgDY5VZnn%2Fimage.png?alt=media&amp;token=07daa848-0749-453a-8dd8-860e2b37f0ff" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FYv4VT9ymBrseL5ZCAntC%2Fimage.png?alt=media&amp;token=aa482352-c056-49d5-bfaf-694fb51c0287" alt=""><figcaption></figcaption></figure>

↘ 읽기 권한(파일 다운) 있지만 쓰기 권한(파일 업로드) 없다.

### 4. 접근 가능한 SMB 쉐어 및 파일 진단

```sql
# Null Session 
smbmap -H <ip>
netexec smb -u '' -p '' --shares

# Anonymous Session 
smbmap -H <ip> -u 'a' -p '' 
netexec smb -u 'a' -p '' --shares
```

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FNgwNa7ZQAIeCa211LiDO%2Fimage.png?alt=media&amp;token=e61739da-5ab8-4a6d-9ad1-23c88addca49" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FyEnhZm0hz8RmXq03oxul%2Fimage.png?alt=media&amp;token=18755d71-0f33-448e-8b96-1b6752dc438f" alt=""><figcaption></figcaption></figure>

###

### 5. SMB 쉐어 접근 및 파일 진단

```sql
smbclient \\\\<ip>\\<share> -U <user>

└─# smbclient \\\\172.31.224.37\\samba-share -U 
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Oct 12 00:09:20 2023
  ..                                  D        0  Sun Oct 15 16:07:57 2023
  id_rsa-fake                         N     3357  Thu Oct 12 00:09:20 2023
  id_rsa-fake.pub                     N      726  Thu Oct 12 00:09:20 2023
  
-- id_rsa-fake.pub : 공개키
-- id_rsa-fake : 개인키
```

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FMOcQ6oabRcYyDZSduT3T%2Fimage.png?alt=media&amp;token=33f7b6b8-2171-4126-9743-0e6c7a7ed92d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FPq7FPSDdESRLjIypyFma%2Fimage.png?alt=media&amp;token=6009f674-e19a-456a-bfec-ade58eecc637" alt=""><figcaption></figcaption></figure>

* 공개키는 다운로드 되지만 개인키는 다운되지 않는다. 권한이 없기 때문이다.
* 내가 가진 파일 업로드 put \[파일명]

### 6. SMB 관련 취약점 진단

```
nmap -p 445 -sV --script='smb-vuln-*' -Pn --open <ip>
```

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FHS2B9Vgsfrsac1G8GAQi%2Fimage.png?alt=media&amp;token=1bcd8021-8cf8-41a7-bfef-8d83df3810b7" alt=""><figcaption></figcaption></figure>

### 7. 다수의 호스트, 쉐어, 파일 진단

```
smbclient \\\\<ip>\\<share> -U <user>

└─# smbclient \\\\172.31.224.37\\samba-share -U 
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Oct 12 00:09:20 2023
  ..                                  D        0  Sun Oct 15 16:07:57 2023
  id_rsa-fake                         N     3357  Thu Oct 12 00:09:20 2023
  id_rsa-fake.pub                     N      726  Thu Oct 12 00:09:20 2023
```

### 연습 문제 <a href="#bkmrk-ec-97-b0-ec-8a-b5-eb-ac-b8-ec-a0-9c" id="bkmrk-ec-97-b0-ec-8a-b5-eb-ac-b8-ec-a0-9c"></a>

* `mod3ex`에서 실행중인 SMB(Samba) 네트워크 서비스를 찾은 뒤 정보수집을 진행하세요.
* 어떤 SMB 쉐어에 Null Session 접근이 가능한지, 읽기/쓰기 권한이 있는지 등을 확인해보세요.
* 접근 가능한 쉐어에 접근한 뒤 파일을 다운로드 받거나 업로드 해보세요.
* manspider를 이용해 `mod3ex`의 SMB에서 다운 받을 수 있는 모든 파일을 다운받아보세요.
