Linux 自带的"终端录像机"——把整个 shell 会话(输入 + 输出 + 颜色 + 控制字符)原封不动录下来。 PG/OSCP 实战:复盘、写 WP、留 evidence 的神器。录完一个 session,回放 = 完整 WP 草稿。
1. 基础用法
1# 启动录制(默认录到 typescript 文件)
2script
3# 提示 "Script started on ...",进入新 shell
4# ... 你的所有操作都会被录 ...
5exit
6# 提示 "Script done on ..."
7
8# 指定输出文件
9script session.log
10
11# 静默模式(不显示 "Script started/done" 那两行)
12script -q session.log
13
14# 追加(默认是覆盖)
15script -a session.log
录出来的文件是什么:
- 完整保真:包含 ANSI 颜色、转义序列、Ctrl-C 字符
- 包含 timing 信息(如果你加了
-t) - 文件所有权归当前用户,默认权限 644(其他人能读,注意敏感操作)

2. 实战关键选项
1# -c, --command <cmd>:录一个具体命令就退出(不进入交互 shell)
2script -c "nmap -sV target" nmap.log
3
4# -f, --flush:每写一行就 flush 到磁盘(实时看,像 tail -f)
5# 适合长时间任务边录边看
6script -f session.log
7# 然后在另一个终端:tail -f session.log
8
9# -q, --quiet:静默,不显示 "Script started" / "Script done"
10script -q session.log
11
12# -a, --append:追加到已有文件
13script -a session.log
14
15# -t[FILE], --timing[=FILE]:把 timing 数据也录下来(每个字符的延迟)
16# 关键 - 重放时能模拟"原始速度",可以慢动作回放
17script -t=timing.log session.log
18
19# -e, --return:返回被录制 shell 的 exit code
20script -e -c "./exploit.sh" exploit.log
21echo $? # 拿到 exploit.sh 的退出码,不是 script 的
22
23# -V, --version
24# -h, --help


3. 渗透测试高频用法
3.1 完整录一个 PG 靶机打通过程(写 WP 一遍过)
1# 攻击机上开始
2script -q -t=/tmp/ochima.timing /tmp/ochima.full.log
3
4# 完整的 nmap / 漏洞利用 / 提权全程
5# ... 1 小时后 ...
6exit
7
8# 录完得到两个文件:
9# /tmp/ochima.full.log - 终端完整输出
10# /tmp/ochima.timing - 每个字符的延迟
3.2 只录一个工具的输出
1# 录整个目录扫描过程
2script -q -c "gobuster dir -u http://target -w /usr/share/wordlists/..." gobuster.log
3
4# 录漏洞利用过程(带完整交互)
5script -q -c "python3 exploit.py 10.10.10.10 80 http://target:8338" exploit.log
3.3 录反弹 shell 的所有操作
1# 攻击机监听 + 录制一体化
2script -q -c "nc -lvnp 80" reverse_shell.log
3# 拿到 shell 后的所有命令、输出、读 flag、提权 → 全在 reverse_shell.log 里

3.4 长时间任务进度监控
1# 跑 hashcat / john / ffuf 这种可能跑几小时的任务
2# 实时看进度,同时录下来
3script -f -c "hashcat -m 0 hashes.txt rockyou.txt" hashcat.log &
4# 另一个终端:
5tail -f hashcat.log
4. 录完怎么处理
4.1 直接 cat:会看到 ANSI 控制字符
$ cat session.log
Script started on ...[K
[1;31mroot@kali[0m:[1;34m~[0m$ id
[?2004huid=0(root) ...
看着乱——那是因为终端用 ANSI 转义序列做了颜色和光标移动,录的时候一并录下来。
4.2 干净查看的几种方法
1# 1. col -b 过滤掉 backspace 类控制字符(保留颜色)
2cat session.log | col -b
3
4# 2. ansi2txt 工具(更彻底,去掉所有 ANSI 序列)
5# 装:pip install ansi2txt 或 apt install colorized
6ansi2txt < session.log > clean.log
7
8# 3. 直接用 less -R 看(less 自动解释 ANSI 颜色)
9less -R session.log
10
11# 4. 用脚本回放(保留原始速度,-t 提供 timing)
12scriptreplay -t timing.log -s session.log
13# 脚本回放时像慢动作重放,对写 WP 时回顾操作流程很有用
14# script 的 -t 在 util-linux 新版里改了语法,录制的时候不能再跟一个裸参数
15# 录制用-t=timing.log
16# 回访用 -t timing.log 中间是空格

4.3 提取特定行
1# 找执行过的命令(通常带行首的提示符特征)
2grep -E '^\$' session.log
3
4# 找 flag
5grep -E 'flag{|FLAG{|HTB{|THM{' session.log
6
7# 找关键错误
8grep -i 'error\|fail\|denied' session.log
4.4 删掉"Script started/done" 那两行
录出来的文件头尾有这两行垃圾,开 WP 的时候要删:
1# 删头
2sed -i '1,2d' session.log # 删前 2 行
3# 删尾
4sed -i '$d' session.log # 删最后 1 行("Script done")
5
6# 或者直接 grep 掉
7grep -v "^Script \(started\|done\)" session.log > clean.log
5. 实战小技巧
5.1 录制 + 实时回看(边录边监控)
1# 终端 A:启动录制
2script -f -q session.log
3
4# 终端 B:实时看
5tail -f session.log
6# 内容会随终端 A 的操作同步出现
5.2 录制时存到专门目录
1# PG 考试环境建议
2mkdir -p ~/pg-sessions/$(date +%Y%m%d)
3cd ~/pg-sessions/$(date +%Y%m%d)
4script -q -t timing.log -c "bash" full.log
5.3 录制敏感信息时要小心
script 录的是纯文本,会包含:
- 密码 / API key / token
- 反弹 shell 的命令(攻击者 IP / 端口)
cat /etc/shadow之类
写完 WP 后建议:
1# 1. 检查有没有敏感字符串
2grep -i 'password\|api\|key\|token' session.log
3# 2. 替换或脱敏
4sed -i 's/password=[^&]*/password=REDACTED/g' session.log
5# 3. 删原文件
6shred -u session.log # 安全删除
5.4 配合 scriptreplay 做"教学视频"
1# 录的时候带 timing
2script -q -t timing.log session.log
3
4# 重放(按原始速度)
5scriptreplay -t timing.log -s session.log
6
7# 加速 / 慢放
8scriptreplay -t timing.log -s session.log 2.0 # 2 倍速
9scriptreplay -t timing.log -s session.log 0.5 # 半速(讲解用)
5.5 录 SSH 登录后的所有操作
1# 在跳板机/堡垒机上 record
2script -q /var/log/audit/ssh_session_$(whoami)_$(date +%s).log
3
4# 之后审计能回放整个会话
6. 一句话 vs rlwrap 对比
| 工具 | 解决啥问题 |
|---|---|
rlwrap | 给程序加 readline(历史/补全) |
script | 录下整个会话给以后看 |
两者正交,经常一起用:
1# 录一个带历史补全的交互会话(PG 考试时神器)
2script -q -c "rlwrap nc -lvnp 80" reverse_shell.log
这条组合拳 = 拿到 shell 后能 ↑↓ 翻历史命令 + 整个 session 录下来回放 = 不用记笔记也能写 WP。

