Featured image of post script用法速查

script用法速查

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(其他人能读,注意敏感操作)

Pasted image 20261104224644.png


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

Pasted image 20261104224816.png

script.gif


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 里

Pasted image 20261104225646.png

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  中间是空格

scriptreplay.gif

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。