type
status
date
slug
summary
tags
category
icon
password
最近因為公司需要對客戶執行社交工程,裡面有釣魚郵件這項測試。而公司原本有前輩寫的簡易版網站,但疏於維護而且還是跑在xampp上面,所以我就自告奮勇要重新刻一個了。
但下班後越想越不對勁,我不會前端再加上距離Deadline只有兩個禮拜。我只好去萬能的GitHub找有沒有已經寫好的框架,還真的找到一個叫做GoPhsih的,他是用Golang寫的,效能不用質疑而且前端畫面也好看就選它了
notion image
先列舉幾個它的優點

優點

  • 簡單容易上手(我是自己架並接上mysql,如果懶的話可以直接用docer 跑起來)
  • 有提供Python API,如果有需要自動化的話
  • 信件模板可以直接import原始文件
  • 釣魚頁面也可以直接輸入網址,它會自動去爬取那個頁面,只要在做輕微修改即可
  • 提供了大部分釣魚郵件所需要的功能了(缺少的部分我們後面會討論)
  • 好看
順便提幾個它的缺點

缺點

  • 在設計的時候架構太小太亂,並沒有涵蓋完整的功能,導致如果開發人員要自行二次開發的話會很痛苦。
  • 沒有開發document,要自己去追code
  • 安裝的時候會踩到一些mysql的小坑,要自己再migiration的sql檔做一些修改
以上
因為它提供的功能
  1. 在信件中插入Tracking Image來判斷用戶是否開啟郵件
  1. 置換信件中的超連結網址導向釣魚網頁,判斷用戶是否點擊釣魚信件裡的內容
  1. 當用戶在釣魚頁面時判斷用戶是否傳送資料
因為工作的需要,我們還需要在信件中加入附件並且判斷用戶是否有開啟檔案,但因為它實作的方式太粗暴了,如果是post就是傳送資料,如果是get就是點擊連結,對整個Handler大改會很痛苦,所以我選擇在後端增加判斷並在網址後面多加一個參數
這個改完來去改前端和template,就在那邊跳來跳去,去分析它API吐出去的資料格式是長什麼樣子,然後再去js那邊改,改完再去template那邊修改,因為它是寫死的,不是很懂它的邏輯,我覺得可以全部都用js渲染。
第二個需求是延續第一個而來的,在GoPhish裡信件中的附件並不能隨著使用者而改變,這樣會讓我們去判斷個別用戶是否點開檔案變得很困難。我的目標是附件是一個html檔案,可以執行javascript,我在這個html中插入Golang的模板語言,在透過GoPhish送信的時候順便渲染附件。
這裡就要抱怨一下gophish的架構混亂了,function名稱重複,超難讀的,找到後就不難處理了。
  1. 從資料庫撈出content
  1. base64 decode
  1. template execute
  1. io.Copy回去信件
  1. 寄信

成果

 
notion image

總結

總的來說Gophish依然是一款很棒的開源軟體,畫面漂亮,使用好上手。對於二次開發來說,人家也是MIT授權,不爽就自己改,我覺得問題不大。
Build caddy server Hugo + GithubBuild caddy server Hugo + Github
Loading...