Espanso:文本替换,简单高效
Espanso 是一款功能强大的跨平台开源文本替换(或文本扩展)工具。简单来说:它能将你输入的内容替换为其他内容。例如,想象一下只需输入三个字符,就能神奇地显示出完整的电子邮件地址?Microsoft Word 的自动更正和手机的智能补全功能可以实现部分类似操作,但 Espanso 结合高级功能(如运行 shell 命令)后,其能力将更加强大。
本文重点介绍在 Linux 上使用 Espanso(结合 shell 命令)来辅助渗透测试人员的常见任务,尽管它几乎可用于任何场景。
为何使用文本扩展工具?
虽然部分工作可能通过 LLM 实现自动化,但许多繁琐任务永远不会消失。发送电子邮件、编写命令、获取外部 IP 地址——甚至输入电话号码或邮寄地址——都是低效的时间浪费。此外,文本扩展工具可以减少因拼写错误导致的错误,并降低整体失误率。
安装
Espanso 官网提供 Windows、macOS 和 Linux 的安装包。也可通过 GitHub 上的源代码手动安装。安装后,程序使用配置文件和一个匹配文件;两者均为 YAML 格式,可根据需求轻松更新。
默认情况下,Espanso 无需过多配置即可成功运行。可以说,匹配规则才是核心所在。
匹配与替换
位于 Espanso 配置目录中的 base.yaml 文件包含匹配和替换规则。你也可以添加自己的 YAML 文件,以便更轻松地管理规则。
项目的详细文档说明了如何在系统中定位此文件,但 Espanso 本身包含一个便捷快捷方式,可用默认编辑器打开该文件。以下命令将打开文件进行编辑:
|
|
基本思路是匹配你输入的文本字符串(称为触发器),并将其替换为其他内容。一个简单示例如下:
|
|
在系统的几乎所有位置,如果我输入 :me,Espanso 会将其替换为 Chris。
与 Espanso 的默认示例一样,我倾向于在触发器前使用冒号,因为这在英语中不常见。如果你像我一样是 vim 阵营的用户,请小心不要覆盖你需要的内容!
前面的示例仅节省了 5 个字符的输入,并不是非常有用。但写出完整的签名非常实用,所以我设置了以下内容(至少非常接近):
|
|
我为电话号码、地址、电子邮件地址等设置了简单的替换。即使是最基本的用法,Espanso 也能节省时间。但结合一些附加功能,它可以变得更强大。
关于 YAML 的重要说明:空格很重要(类似于 Python 😔)。如果你不熟悉该格式,只需复制并编辑现有行以保留缩进。
高级用法
变量
Espanso 可以使用内部变量使匹配更具动态性,而无需完全依赖 shell 命令。以下示例将 {{time}} 值替换为当前的小时和分钟。
|
|
当我输入 :now 时,它会被替换为 It’s 15:53。
提示输入值
如果你经常写相同的电子邮件——例如渗透测试开始通知——你可以将其添加到 Espanso 中,并让它提示你输入收件人姓名,然后拼写出你的文本。Espanso 团队有一个示例:
|
|
现在,在任何地方输入 :greet,Espanso 都会打开此对话框:
然后输出完整文本:
|
|
该命令可以有多个 [[]] 字符串,每个字符串在对话框中都有一个字段。
正则表达式值
提示功能很方便,但我不太喜欢对话框。幸运的是,Espanso 可以在触发器中使用正则表达式,并将你输入的内容捕获为变量。扩展文档中的示例,我们可以在输入时直接传递名称。
|
|
要使用此功能,我现在可以输入 :greet(Nikto),它会获取传递的值并在输出中替换,结果如下:
|
|
如果多个值具有唯一名称(例如上例中的“person”),你可以传递多个值。
Shell 命令
Espanso 的另一个强大功能是能够运行 shell 命令。虽然作为安全人员,我们应该警惕让程序调用 shell,但在这种情况下,我们可以控制输入和输出以保持安全并使生活更轻松。(我们不要讨论这基本上是一个键盘记录器,好吗?如果你愿意,可以查看源代码并监视网络流量!)。
以下是我经常使用的一个示例,用于将外部 IP 地址添加到文档等中。
|
|
现在,当我输入 :myip 时,它会向 http://ifconfig.me/ 网站发出 curl 请求,该网站仅返回源 IP 地址。
另一个 shell 命令用例(我发现使用 shell 比学习 Espanso 的内部变量更容易)是为状态报告编写电子邮件主题。
|
|
现在,当我打开新电子邮件时,我将光标放在主题行中并输入 :ps 以写出:
|
|
另一个方便的功能是编码——通过正则表达式匹配器和 shell 命令的组合,在任何地方对任何内容进行 base64 编码。
|
|
现在,无论我在 Burp、命令行还是任何地方,我都可以输入 :b64(text) 并获取替换后的版本,如 dGV4dAo=。
其他用途
Espanso 可用于大量场景。我的常见用法包括:
- 电子邮件主题
- 电子邮件内容
- 测试笔记模板
- 联系信息
- 长 shell 命令
- 注入字符串
- 等等……
实际上,有一个专门的网站分享用途,例如我的新最爱 :dadjoke。Nick Aliferopoulos 甚至分享了一系列渗透测试命令和字符串。
总结
Espanso 有许多未在此涵盖的功能,例如完整单词替换(在任何应用程序中自动更正拼写错误!)。对我来说一个方便的功能是,因为我总是拼错它:
|
|
所以,现在我可以使用 nmap 扫描器,而不是不存在的 namp 扫描器。注意 word: true 元素确保它是完整的单词“namp”,而不是,比如说,当我写信给 NAMPA 关于我在冰箱里发现的一些奇怪霉菌时。
使用全局变量还可以帮助构建复杂的工作流程——这个看似简单的程序中内置了大量功能。
进一步探索这些功能,你可以随心所欲地自定义和自动化,节省大量时间。如果你添加了许多替换规则,甚至可以将它们拆分到不同的 YAML 文件中以便更轻松地管理。
祝你使用 :replacements 愉快!