swisskyrepo/SMBLoot

GitHub: swisskyrepo/SMBLoot

SMBLoot 是一个基于终端界面的 SMB 共享浏览与文件管理工具,支持认证连接、目录递归浏览、文件预览、上传下载和批量操作。

Stars: 1 | Forks: 0

# SMBLoot SMBLoot 是一个终端界面工具,用于浏览 SMB 共享、读取远程文件、下载和上传文件,以及递归检查远程目录树。 ``` uv run SMBLoot.py --server 10.10.10.10 --username Administrator --password P@ssw0rd uv run SMBLoot.py --server 10.10.10.10 --username Administrator --hash :E19CCF75EE54E06B06A5907AF13CEF42 ``` ![SMBLoot GIF](https://raw.githubusercontent.com/swisskyrepo/SMBLoot/main/images/SMBLoot.gif) ## SMB 连接选项 每个选项也可以通过环境变量提供。 | 选项 | 环境变量 | 用途 | |---|---|---| | `--server` | `SMB_TUI_SERVER` | SMB 服务器地址 | | `--remote-name` | `SMB_TUI_REMOTE_NAME` | 当 NetBIOS 名称与服务器地址不同时的名称 | | `--username` | `SMB_TUI_USERNAME` | SMB 用户名 | | `--password` | `SMB_TUI_PASSWORD` | SMB 密码 | | `--hash` | `SMB_TUI_HASH` | NT hash 或 `LMHASH:NTHASH`,用于 pass-the-hash 认证 | | `--domain` | `SMB_TUI_DOMAIN` | 认证域 | | `--port` | `SMB_TUI_PORT` | SMB 端口;默认为 `445` | | `--timeout` | `SMB_TUI_TIMEOUT` | 连接超时时间(秒);默认为 `30` | | `--share` | `SMB_TUI_SHARE` | 启动时打开的共享 | | `--path` | `SMB_TUI_PATH` | `--share` 内的初始目录 | | `--loot-dir` | `SMB_TUI_LOOT_DIR` | 本地下载目录;默认为 `./loot` | | `--auto-loot-preview` | `SMB_TUI_AUTO_LOOT_PREVIEW` | 自动下载成功预览的文件;默认禁用 | 只需一种认证方式:`--password` 或 `--hash`。 这两个选项不能同时使用。同样的规则适用于 `SMB_TUI_PASSWORD` 和 `SMB_TUI_HASH`。 使用 **NT hash** 认证: ``` uv run SMBLoot.py \ --server 10.10.10.10 \ --username Administrator \ --hash 0123456789abcdef0123456789abcdef ``` 在预览文件时启用**自动下载(looting)**: ``` uv run SMBLoot.py \ --server 10.10.10.10 \ --username Administrator \ --password P@ssw0rd \ --auto-loot-preview ``` 自动下载的文件会在 `--loot-dir` 下保持相同的共享和远程目录结构。现有的本地文件会使用带编号的文件名进行保留。 ## 浏览器按键 | 按键 | 操作 | |---|---| | `[UP]` 或 `[k]` | 选择上一条目 | | `[DOWN]` 或 `[j]` | 选择下一条目 | | `[PAGE UP]` / `[PAGE DOWN]` | 移动一个屏幕 | | `[HOME]` 或 `[g]` | 选择第一个条目 | | `[END]` 或 `[G]` | 选择最后一个条目 | | `[ENTER]` | 打开选定的共享、目录或文件 | | `[BACKSPACE]` | 返回上一级 | | `[/]` | 打开命令提示符 | | `[d]` | 下载选定的文件 | | `[SUPPR]` | 确认后删除选定的文件 | | `[h]` | 显示键盘和命令帮助 | | `[q]` | 退出 | | `[r]` | 刷新当前列表 | ## 命令提示符 在浏览器或文件查看器中按 `[/]`,然后输入以下命令之一。 | 命令 | 描述 | |---|---| | `/get` | 下载选定的文件,或在查看器中使用时下载打开的文件。 | | `/get ` | 从当前远程目录下载指定名称的文件。 | | `/put ` | 将本地文件上传到当前远程目录。路径包含空格时请加引号。 | | `/filter ` | 使用不区分大小写的正则表达式或 glob 过滤当前列表。 | | `/filter` | 清除当前的列表过滤条件。 | | `/tree` | 在交互式树视图中递归列出当前共享和目录下的文件。 | | `/tree_download` | 递归下载当前共享和目录下的文件。 | | `/rm ` | 确认后从当前目录删除指定名称的文件。 | | `/help` | 显示键盘快捷键和可用命令。 | | `/exit` 或 `/quit` | 从任何视图退出 SMBLoot。 | 在输入 `/get` 或 `/put` 时按 `[TAB]` 可补全远程文件名或本地路径。 ## 树视图按键 | 按键 | 操作 | |---|---| | `[UP]` 或 `[k]` | 选择上一个文件 | | `[DOWN]` 或 `[j]` | 选择下一个文件 | | `[PAGE UP]` / `[PAGE DOWN]` | 移动选择一个屏幕 | | `[HOME]` 或 `[g]` | 选择第一个文件 | | `[END]` 或 `[G]` | 选择最后一个文件 | | `[ENTER]` | 打开选定的文件 | | `[d]` | 下载选定的文件 | | `[SUPPR]` | 确认后删除选定的文件 | | `[/]` | 打开命令提示符;`/get` 下载选定的文件 | | `[h]` | 显示键盘和命令帮助 | | `[ESC]`、`[BACKSPACE]` 或 `[q]` | 返回浏览器 | ### 过滤示例 glob 示例: ``` /filter *.csv ``` 正则表达式示例,显示除了以 `.csv` 或 `.pdf` 结尾之外的条目: ``` /filter (?i)^(?!.*\.(?:csv|pdf)$).*$ ``` 清除当前过滤器: ``` /filter ``` ## 测试 安装运行时依赖,然后运行单元测试套件: ``` uv run --with 'impacket>=0.13.1' python -m unittest discover --start-directory tests --verbose # 或 python -m pip install --requirement requirements.txt python -m unittest discover --start-directory tests --verbose ``` GitHub Actions 会在每次推送和拉取请求时运行相同的测试和 Ruff 检查。
标签:SMB, SNMP, 凭据利用, 文件传输, 横向移动, 编程规范, 逆向工具, 错误配置检测