钓鱼攻击简易指南:使用Sinker自动化构建凭证捕获页面

本文详细介绍了如何使用开源工具Sinker快速搭建钓鱼攻击的登录页面,通过自动化部署NGINX、Flask和Let's Encrypt证书,实现高效的凭证捕获,适用于红队测试和安全评估。

钓鱼攻击简易指南

社会工程学,尤其是钓鱼攻击,在红队演练和真实攻击中日益普遍。随着安全意识的提升和系统防护的加强,人为因素正成为更具吸引力的攻击向量。此外,钓鱼活动可用于测试公司员工的安全控制措施。获取一个有效登录凭证可为测试者节省数小时甚至数天的漏洞扫描和利用时间。

在本博客中,我们将逐步指导如何为钓鱼活动设置一个简单而有效的登录页面。我们将使用BHIS开发的开源工具,该工具安装简单,且不使用任何付费或第三方组件。

动机

不久前,我被要求为一个钓鱼演练设置登录页面,而这就是我收到的全部指示。为了构建这个页面,我首先尝试使用WordPress创建一个简单的注册表单。结果发现,要么WordPress比我想象的更复杂,要么我的技术能力不如自己认为的那么强。(事后看来,可能两者兼有。)在与界面斗争了几个小时后,我的耐心逐渐减少,测试日期又迫在眉睫,我决定是时候放弃了。然而,我的网页开发能力也一般,每次从头开始设置所有内容显然不是一个可持续的解决方案。

最终,我决定从头开始设置。我使用开源的HTML模板设计了登录页面,通过NGINX提供服务,并将表单提交通过NGINX反向代理转发到一个Flask服务器,在那里客户端IP、用户代理和表单数据被写入日志。然后,我开发了一个名为Sinker的工具来自动化整个过程,这样我就不必再重复这项工作。

本文的剩余部分将通过一个示例展示如何使用这个工具来设置钓鱼活动。

目标: Black Hills Information Security
域名: blackhills.phishingdomain.com

钓鱼邮件:

RE: 新的健康与安全措施。请在ARBITRARY_DATE前完成
Black Hills Infosec理解员工的健康与福祉至关重要。在当前Covid-19环境下,以及CDC最近对健康与安全措施的修订,采取预防措施并尊重彼此的关切非常重要。我们的保险合作伙伴正与PCHC合作,为您提供最新的风险和信息,包括Covid-19加强针信息、内部病例数等。请点击以下链接在我们的健康与安全门户上设置您的账户。必须完成此操作才能继续参加我们的任何保险计划。(注意:为方便起见,请使用您的Black Hills Infosec邮箱和密码进行注册)

好了。现在,我们只需要在那个“以下链接”处实际有一个可以捕获凭证的东西。这正是我们的工具Sinker帮助构建和部署的。

部署

要求

  • 一台可公开访问的服务器,用于托管登录页面(理想情况下运行Ubuntu的Debian系统)
  • 一个域名,其DNS A记录指向您的服务器

设置

  1. 克隆GitHub仓库:https://github.com/Hannnah1/Sinker

  2. 打开inventory文件,将IP地址替换为您的服务器的公网IP。如果您希望在多个服务器上部署钓鱼页面,请为每个额外的IP添加一行。

  3. 如果您的本地机器上没有安装Ansible,请运行runme_first.sh(注意:Windows用户需要手动安装Ansible或通过WSL运行程序)。

  4. 接下来,打开vars.yml并更改以下配置变量:

    • site: 包含登录页面的目录。必须与phishinglines/目录下的一个目录名称完全匹配。
    • target_name: 目标公司的名称,将显示在登录页面上
    • ssh_key: 用于登录远程服务器的SSH密钥位置
    • domain_name: 您的域名
    • certbot_mail_address: 用于生成letsencrypt证书的邮箱。我们将只允许目标通过https连接。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#--------------------------------------------------------------------------#
# Config variables. Do change these #
#--------------------------------------------------------------------------#
site: covidruse

Target_Name: Black Hills # Spaces are OK, no quotes please
ssh_key: $HOME/.ssh/id_rsa
domain_name: blackhills.phishingdomain.com
certbot_mail_address: hcartier@blackhillsinfosec.com

# CSS For landing page NO SEMICOLONS
background_color: white
primary_color: rgba(156, 191, 191, 1)
secondary_color: black

上面的代码片段已针对攻击Black Hills Information Security进行了编辑。除了公司名称外,我们还为CSS自定义了主要和次要颜色值。使用目标公司的颜色将有助于提高页面的可信度,因为 familiarity 元素。

配置完成后,现在是时候运行playbook了。可以通过在终端中输入以下命令来完成:

1
ansible-playbook main.yml

下一步是最重要的:

把手从键盘上拿开,站起来,去泡一杯热咖啡,而程序将代表您执行以下操作:

  • 更新软件包
  • 安装nginx
  • 为您的域名和登录页面配置nginx
  • 使用certbot生成letsencrypt证书
  • 将模板和登录页面目录的任何其他内容复制到/var/www/
  • 安装tmux
  • 在tmux会话中运行一个flask应用程序,以接收由nginx转发的表单提交并将其写入日志文件

如果一切顺利,您应该看到以下输出:

(如果未安装Cowsay,输出格式会略有不同,并且您会被同事视为不那么酷。只要没有产生失败或无法访问的错误,您就成功了。)

浏览blackhills.phishingdomain.com显示我们的登录页面按预期显示。

提交表单后,目标收到以下确认信息,表明他们的提交已收到。此确认的目的是不引起怀疑。

服务器记录客户端的IP地址、他们输入的名称、邮箱和密码,以及用户代理。如果我们登录到服务器控制台并查看forms.txt,我们将看到以下内容:

创建额外的登录页面

有数百个免费的HTML模板可以快速编辑以满足您的需求。

例如,在本博客中,我们改编了这里的模板:https://tympanus.net/Tutorials/LoginRegistrationForm/index3.html#toregister

为了使这些自动化设置脚本兼容,您需要进行以下更改:

  • 在任何您希望显示目标公司名称的地方,用确切的文本{{ Target_Name }}替换该位置
  • 您的表单必须具有id=“name”、id=“email"和id=“password"的元素
  • 您必须确保提交按钮的类型为“submit”,并插入send.js脚本。
1
2
<button type="submit">Complete Registration</button>
<script src="send.js"></script>
  • 您的页面必须按照模板格式命名为target.html.j2

恭喜!您现在有一个可以快速为多个演练设置的登录页面。

结论

钓鱼攻击很容易,但可能很耗时。希望这个程序可以帮助使其更简单和更快。作者建议不要在给客户的报告中包含上当者的姓名和邮箱。确切知道您获得了谁的凭证对修复没有帮助,并可能给那个人带来麻烦。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计