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提示
然后输出完整文本:
|
|
该命令可以有多个[[]]字符串,每个都会在对话框中有一个字段。
正则表达式值
提示很方便,但我不太喜欢对话框。幸运的是,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文件以便更轻松地管理。
快乐的:替换!