moscovium-mc/ghost-protocol
GitHub: moscovium-mc/ghost-protocol
面向红队行动安全的 Python 工具集,提供日志清理、加密反向 Shell、会话记录和反物理攻击检测等功能。
Stars: 1 | Forks: 0
# ghost-protocol
一套为有辨识力的自由战士准备的行动安全和侦察脚本集合。
最初由 [@JusticeRage](https://github.com/JusticeRage) 编写,由 [@moscovium-mc](https://github.com/moscovium-mc) 修改。
所有脚本兼容 Python 3.8+。除非另有说明,所有工具均需要 Linux。
根据 [GPL v3 许可证](https://www.gnu.org/licenses/gpl.html) 分发。欢迎贡献。
## 目录
- [nojail.py](#nojailpy) — 隐蔽的日志清理工具
- [share.sh](#sharesh) — 加密文件传输
- [autojack.py](#autojackpy) — SSH 会话记录器
- [listurl.py](#listurlpy) — 多线程站点映射器
- [ersh.py](#ershpy) — 加密反向 Shell
- [boot_check.py](#boot_checkpy) — 邪恶女仆攻击检测器
- [notify_hook.py](#notify_hookpy) — 二进制绊网 / 警报系统
## nojail.py
隐蔽的日志清理器。从以下位置删除有嫌疑的条目:
- `/var/run/utmp`, `/var/log/wtmp`, `/var/log/btmp` (`who`, `w`, `last`)
- `/var/log/lastlog` (`lastlog`)
- `/var/**/*.log`, `.log.1`, `.log.N.gz` (文本日志,包括 gzip 压缩的轮转日志)
- 您指定的任何其他文件或目录
条目通过 IP 地址和/或主机名进行匹配。文件描述符技巧使得
syslog/journald 在写入时不会注意到篡改。临时数据存储在
`/dev/shm` 中,并在随后被安全擦除。
**相较 v1 版本的更改:**
- 完全重写为 Python 3
- 基于 `shred` 的安全删除,并带有手动回退机制
- 支持 gzip 日志(自动清理轮转/压缩的日志)
- `--daemonize` 等待 SSH 会话结束,然后触发
- Lastlog 伪造使用真实的先前会话,而不是归零
### 用法
```
./nojail.py [-h] [-u USER] [-i IP] [--hostname HOSTNAME]
[-r REGEXP] [-v] [-c] [-d] [-s]
[log_files ...]
optional arguments:
-u, --user USER Username to ghost (default: $USER)
-i, --ip IP Source IP to erase (default: $SSH_CONNECTION)
--hostname HOSTNAME Hostname to erase (default: rDNS of IP)
-r, --regexp REGEXP Extra regex to match lines for deletion
-v, --verbose More output
-c, --check Confirm each deletion
-d, --daemonize Background: clean when session ends. Implies -s.
-s, --self-delete Shred this script after execution
```
### 示例
```
./nojail.py --user root --ip 151.80.119.32 /etc/app/logs/access.log --check
```
### 免责声明
不做任何保证。不要为你本来就不应该做的事情责怪代码。
## share.sh
通过 [transfer.sh](https://transfer.sh) 进行便携式加密文件传输。
- AES-256-CBC + PBKDF2 (10 000 次迭代, SHA-256)
- 自动检测 `torsocks` / `torify` 以实现匿名
- 临时文件位于 `/dev/shm`(无磁盘痕迹),退出时安全擦除
- 使用 `curl` 或 `wget`,取决于哪个可用
**相较 v1 版本的更改:**
- 现代化的 `openssl -pbkdf2 -iter 10000 -md sha256`(不再使用旧的 `-k` 模式)
- `/dev/shm` 临时空间
- 当 `shred` 不可用时进行 3 次手动擦除
- 随机化远程文件名以避免指纹识别
### 用法
```
# 上传
./share.sh [-m max_downloads] [-d days] "encryption_key"
# 下载
./share.sh -r "encryption_key"
```
## autojack.py
监视 `auth.log` / `secure` 以查找新的 SSH 登录,并将
[shelljack](https://github.com/emptymonkey/shelljack) 注入到用户的 Shell 进程中,
记录完整的终端会话。
默认情况下,Root 会话被排除 (`EXCLUDED_USERS`)。
**相较 v1 版本的更改:**
- 完全重写为 Python 3
- 日志轮转检测(基于 inode)
- 递归进程树遍历器 (`pgrep -P`) 处理 PAM 辅助进程和 sshd 多路复用
- 可配置的 Shell 目标 (`bash`, `zsh`, `fish`, `sh`, `dash`)
- 启动前置条件检查
### 用法
```
# 从 screen session 运行
screen -S autojack
./autojack.py
```
会话记录在 `/root/.local/sj.log..` 中。
## listurl.py
多线程网站爬虫。通过递归跟踪链接来发现 URL。
适用于攻击面映射和 Bug Bounty 侦察。
**相较 v1 版本的更改:**
- 完全重写为 Python 3 (`queue`, `urllib.parse`)
- 现代 `requests` 重试适配器(优雅地处理 429 / 5xx)
- 更新了 User-Agent
- 更清晰的中断处理(CTRL+C 在打印结果前排空队列)
- 修复了 `SSLError` 处理(不再有 `.message` 属性)
### 用法
```
./listurl.py -u https://target.com [options]
-m MAX_DEPTH Crawl depth (default: 3)
-t THREADS Worker threads (default: 10)
-u URL Start URL (required)
-e Follow external links
-d Include subdomains
-c COOKIE Add a cookie: -c "session=abc". Repeatable.
-r REGEXP Exclude URLs matching this pattern
-s REGEXP Only show URLs matching this pattern
-n Disable SSL certificate verification
-o OUTPUT_FILE Write results to file
--timeout SECS Per-request timeout (default: 10)
-v Verbose (repeat for more)
```
### 示例
```
./listurl.py -u https://manalyzer.org --exclude-regexp "/report/"
```
## ersh.py
纯 Python 3 实现的加密反向 Shell。无编译依赖。
双向 TLS 1.3 认证 —— 两端互相验证。
**相较 v1 版本的更改:**
- 用 `ssl.SSLContext` + TLS 1.3 最低版本替换已弃用的 `ssl.wrap_socket`
- 证书写入 `/dev/shm` 支持的临时文件,并在握手后立即粉碎
- 守护进程化现在将 stdio 重定向到 `/dev/null`
- 全局修复 `e.message` → `str(e)`
- `FIRST_COMMAND` 取消设置更多与历史相关的环境变量
### 设置
**生成证书(在你的监听机器上):**
```
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" \
-keyout server.key -out server.crt && \
cat server.key server.crt > server.pem && \
openssl dhparam 2048 >> server.pem
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" \
-keyout client.key -out client.crt
```
**编辑 `ersh.py`:** 填入 `HOST`, `PORT`,并将证书内容粘贴到
`client_key`, `client_crt`, `server_crt` 中。
**启动监听器:**
```
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,openssl-min-proto-version=TLS1.3 \
file:`tty`,raw,echo=0
```
**在目标上运行:**
```
python3 ersh.py
```
**或者无文件方式(从非交互式 Shell):**
```
python3 - <<'EOF'
[paste script here]
EOF
```
## boot_check.py
通过 SMART 数据监控硬盘电源周期计数来检测邪恶女仆攻击。
如果硬盘通电次数多于操作系统启动次数,可能有人正在
复制你的硬盘。
**相较 v1 版本的更改:**
- 使用 `shutil.which()` 代替损坏的 `subprocess.Popen(["command", "-v", ...], shell=True)`
- 全局使用 f-strings
- `Optional` 返回类型,更清晰的函数签名
- SMART 解析处理旧版和现代 `smartctl -A` 输出
### 安装
```
apt install smartmontools dialog
cp boot_check.service /etc/systemd/system/
# 编辑其中的 ExecStart 路径
systemctl enable boot_check.service
./boot_check.py # initialise the baseline
```
## notify_hook.py
针对受监控二进制文件的绊网系统。将此脚本符号链接到任何你想
监视的二进制文件上(`id`, `whoami`, `gcc`, `curl`, …)。当用户运行该二进制文件时,
会静默触发警报,并透明地执行真实的二进制文件。
**相较 v1 版本的更改:**
- 多种通知后端:**Signal**, **Slack**, **Discord**, 通用 **HTTP webhook**, 以及 **syslog** 回退
- 使用 `os.execv` 用真实二进制文件替换 Hook 进程 —— `ps` 输出中没有额外条目
- 在 fork 辅助函数中修复 `e.message` → `str(e)`
- 使用 `shutil.which()` 进行二进制发现
- 搜索 PATH 目录,跳过 `/local/` 以避免自引用循环
### 设置
```
# Trap 'id'
ln -s /path/to/notify_hook.py /usr/local/bin/id
# 编辑 CALLER_WHITELIST 以抑制来自 cron、nagios 等的警报。
# 编辑 notify_callback() 以配置您的告警频道。
```
## 依赖
```
pip install -r requirements.txt
apt install smartmontools dialog # for boot_check.py
```
`autojack.py` 需要 [shelljack](https://github.com/emptymonkey/shelljack)(外部二进制文件)。
*由 @JusticeRrage 充满爱意地编写。由 @moscovium-mc 拖入现代纪元。*
标签:osquery, Python, SSH, 加密通信, 反取证, 反弹Shell, 后门检测, 安全测试工具, 安全脚本, 安全评估, 安全运营中心, 密码管理, 应用安全, 攻击路径可视化, 文件传输, 无后门, 日志清理, 痕迹清除, 网络安全, 网络映射, 行动安全, 运维安全, 隐私保护, 黑客工具